nvidia関連のドライバーが依存の問題でアップデートできない時の解決法

2023年11月9日に普通にアップデートしたら以下の問題が発生しました。
環境はUbuntu 22.04です。

$ sudo apt update
---(中略)---
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 nvidia-dkms-535 : 依存: nvidia-kernel-common-535 (= 535.129.03-0ubuntu1) しかし、535.129.03-0ubuntu0.22.04.1 はインストールされています
 nvidia-driver-535 : 依存: nvidia-compute-utils-535 (= 535.129.03-0ubuntu1) しかし、535.129.03-0ubuntu0.22.04.1 はインストールされています
                     推奨: libnvidia-gl-535:i386 (= 535.129.03-0ubuntu1)
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。

nvidia-dkms-535 が nvidia-kernel-common-535 に依存しているとあります。
よくみると、
nvidia-kernel-common-535は
535.129.03-0ubuntu1 が必要なようですが、 535.129.03-0ubuntu0.22.04.1がインストールされていると言われています。

バージョンの小さな違いがエラーを引き起こしているようです。

まずは、メッセージに従ってsudo apt –fix-broken install を実行しました。

$ sudo apt --fix-broken install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
依存関係を解決しています ... 完了
以下の追加パッケージがインストールされます:
  nvidia-compute-utils-535 nvidia-kernel-common-535
以下のパッケージはアップグレードされます:
  nvidia-compute-utils-535 nvidia-kernel-common-535
アップグレード: 2 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。
3 個のパッケージが完全にインストールまたは削除されていません。
38.6 MB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 61.8 MB のディスク容量が消費されます。
続行しますか? [Y/n] 
(データベースを読み込んでいます ... 現在 382086 個のファイルとディレクトリがイン
ストールされています。)
.../nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb を展開する準備をして
います ...
nvidia-kernel-common-535 (535.129.03-0ubuntu1) で (535.129.03-0ubuntu0.22.04.1 
に) 上書き展開しています ...
dpkg: アーカイブ /var/cache/apt/archives/nvidia-kernel-common-535_535.129.03-0ub
untu1_amd64.deb の処理中にエラーが発生しました (--unpack):
 '/lib/firmware/nvidia/535.129.03/gsp_ga10x.bin' を上書きしようとしています。こ
れはパッケージ nvidia-firmware-535-535.129.03 535.129.03-0ubuntu0.22.04.1 にも存
在します
dpkg-deb: エラー: ペースト subprocess was killed by signal (Broken pipe)
.../nvidia-compute-utils-535_535.129.03-0ubuntu1_amd64.deb を展開する準備をして
います ...
nvidia-compute-utils-535 (535.129.03-0ubuntu1) で (535.129.03-0ubuntu0.22.04.1 
に) 上書き展開しています ...
dpkg: アーカイブ /var/cache/apt/archives/nvidia-compute-utils-535_535.129.03-0ub
untu1_amd64.deb の処理中にエラーが発生しました (--unpack):
 '/usr/bin/nvidia-powerd' を上書きしようとしています。これはパッケージ nvidia-ke
rnel-common-535 535.129.03-0ubuntu0.22.04.1 にも存在します
dpkg-deb: エラー: ペースト subprocess was killed by signal (Broken pipe)
処理中にエラーが発生しました:
 /var/cache/apt/archives/nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb
 /var/cache/apt/archives/nvidia-compute-utils-535_535.129.03-0ubuntu1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

となってうまくいきません。

どうしたらいいか調べていたら、この記事を見つけました。

sudo dpkg -i --force-overwrite /var/cache/apt/archives/nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb

をした後に sudo apt –fix-broken install をすればいいと書いてあります。

ただ、私の環境では、これを見つける前にsudo apt clean をしていたためか、該当するdebファイルがありませんでした。

このdebファイルは、nvidiaのウェブサイトから入手できます。
以下、特定のバージョンのファイルへのリンクは貼らないことにします。その時その時でバージョンが違う可能性があるからです。エラーメッセージからバージョンをよく確認したうえで、該当するものをダウンロードしてください。

問題を起こした私の環境はUbuntu 22.04だったので、

https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/

にいって、
nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb

をホームディレクトリの下のDownloadsにダウンロードしました。

Ubuntu 20.04 の方の場合は、nvidiaのリンクは以下になります。

https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/

ここから、
nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb もしくは、ご自身のエラーメッセージに該当するファイルをダウンロードしてください。

そのうえで以下を実行しました。

$ cd ~/Downloads
$ sudo dpkg -i --force-overwrite ./nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb
(データベースを読み込んでいます ... 現在 382086 個のファイルとディレクトリがインストールされています。)
.../nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb を展開する準備をしています ...
nvidia-kernel-common-535 (535.129.03-0ubuntu1) で (535.129.03-0ubuntu0.22.04.1 に) 上書き展開しています ...
dpkg: 警告: --force が有効なので、問題を無視します:
dpkg: 警告: '/lib/firmware/nvidia/535.129.03/gsp_ga10x.bin' を上書きしようとしています。これはパッケージ nvidia-firmware-535-535.129.03 535.129.03-0ubuntu0.22.04.1 にも存在します
dpkg: 警告: --force が有効なので、問題を無視します:
dpkg: 警告: '/lib/firmware/nvidia/535.129.03/gsp_tu10x.bin' を上書きしようとしています。これはパッケージ nvidia-firmware-535-535.129.03 535.129.03-0ubuntu0.22.04.1 にも存在します
nvidia-kernel-common-535 (535.129.03-0ubuntu1) を設定しています ...
update-initramfs: deferring update (trigger activated)
initramfs-tools (0.140ubuntu13.4) のトリガを処理しています ...
update-initramfs: Generating /boot/initrd.img-6.2.0-36-generic

お、上書きされたようです。

そのうえで、再度、sudo apt –fix-broken install を実行します。

$ sudo apt --fix-broken install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
依存関係を解決しています ... 完了
以下の追加パッケージがインストールされます:
  nvidia-compute-utils-535
以下のパッケージはアップグレードされます:
  nvidia-compute-utils-535
アップグレード: 1 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。
3 個のパッケージが完全にインストールまたは削除されていません。
286 kB のアーカイブを取得する必要があります。
この操作後に追加で 614 kB のディスク容量が消費されます。
続行しますか? [Y/n] 
(中略)
libnvidia-extra-535:amd64 (535.129.03-0ubuntu1) を設定しています ...
nvidia-driver-535 (535.129.03-0ubuntu1) を設定しています ...
man-db (2.10.2-1) のトリガを処理しています ...
dbus (1.12.20-2ubuntu4.1) のトリガを処理しています ...
libc-bin (2.35-0ubuntu3.4) のトリガを処理しています ...
initramfs-tools (0.140ubuntu13.4) のトリガを処理しています ...
update-initramfs: Generating /boot/initrd.img-6.2.0-36-generic

これで問題が解決しました。

nvidia-kernelのバージョン違いが問題を引き起こしていたようです。dpkg -i –force-overwrite を使うことで解決できました。

結構これで困っている方は多いと思うので、共有しておきます。

Print Friendly, PDF & Email

過去のPhilipsのfMRIデータをdcm2niixで変換しようとした時に4次元データにならない問題の解決法

ある施設のrs-fMRIのDICOMデータをNiftiに変換しようとした時に、以下のようになってしまい、4次元データができませんでした。

sub1_+rsfMRI_201.nii
sub1_+rsfMRI_201_t10000.nii
sub1_+rsfMRI_201_t100000.nii
sub1_+rsfMRI_201_t102500.nii
sub1_+rsfMRI_201_t105000.nii
sub1_+rsfMRI_201_t107500.nii
sub1_+rsfMRI_201_t110000.nii
sub1_+rsfMRI_201_t112500.nii
sub1_+rsfMRI_201_t115000.nii
sub1_+rsfMRI_201_t117500.nii
sub1_+rsfMRI_201_t120000.nii
sub1_+rsfMRI_201_t122500.nii
sub1_+rsfMRI_201_t12500.nii
...

ポイントは、ファイル名の後ろに tの後に数字がつくことです。

この原因を探っていたところ、dcm2niixのGitHubページを見つけました。
https://github.com/rordenlab/dcm2niix/issues/428

ここで開発者のChris Rorden教授が以下のように述べています。

your files have a bogus value for cardiac trigger time (0018,1060). This is a limitation of your images, not dcm2niix. You should work with your Philips Research Collaboration manager to fix your scanner. For archival-quality data you could purge the invalid tags from your images, e.g. gdcmanon –dumb –remove 0018,1060 -i … -o …

Cardiac Trigger Timeというタグに値が入ってしまっていることで、dcm2niixはこれを別々のものと認識してひとつにしないようです。過去に撮像したデータの場合、0018,1060を削除するのは一手ではないかとおっしゃっています。実際に確認したところ、そのタグが入っていました。

そこで、このタグを削除する以下のようなPythonスクリプトを書いてみました。pydicomが入っていれば動くはずです。
こちらから手に入れられます。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Script to remove trigger time from Philips fMRI
# source: https://github.com/rordenlab/dcm2niix/issues/428
# 14 Oct 2023 K. Nemoto

import sys, os, time, argparse
import pydicom

__version__ = '20231004'

__desc__ = '''
Remove Trigger Time (0018,1060) from Philips rsfMRI
'''
__epilog__ = '''
examples:
  dcm_rm_trigger_time.py DICOM_DIR1 DICOM_DIR2 ...
'''

def remove_triggertime(src_dir):
    # modify files
    for root, dirs, files in os.walk(src_dir):
        for file in files:
            try:
                src_file = os.path.join(root, file)
                ds = pydicom.dcmread(src_file)
                pid = src_dir.replace('/','')
                del ds[0x0018, 0x1060]
                ds.save_as(src_file)
            except:
                pass

if __name__ == '__main__':
    start_time = time.time()
    parser = argparse.ArgumentParser(description=__desc__, epilog=__epilog__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('dirs', metavar='DICOM_DIR', help='DICOM directories.', nargs='+')

    err = 0
    try:
        args = parser.parse_args()
        for dicom_dir in args.dirs:  # Loop through all the provided directories
            print(f'remove dicom tag (0018,1060) from {dicom_dir}')
            remove_triggertime(dicom_dir)
        print("execution time: %.2f second." % (time.time() - start_time))
    except Exception as e:
        print("%s: error: %s" % (__file__, str(e)))
        err = 1

    sys.exit(err)

これは、

dcm_rm_triggertime.py DICOMフォルダ

とすることで、そのフォルダ内のtrigger timeタグを削除します。

この処理をした後のDICOMを使って dcm2niix を行ったところ、問題なく変換されました。

困っている人がいると思うので共有しておきます。

Print Friendly, PDF & Email

Windows 10/11 で、WSL2 を使って FSL をインストールする方法

Windows 10/11 では、Windows Subsystem for Linux (WSL) を使ってUbuntuなどのLinuxをインストールできます。WSL2 を使うと、GPUも使えるとのことです。

しかし、WSL2は基本、コマンドラインです。LinuxのGUIを起動するためには、工夫が必要です。現在、いくつかのアプリが公開されていますが、FSLの公式ページでは、VcXsrv を勧めていますのでそれを使うのが無難でしょう。

Ubuntu 22.04 も発表されて1年が過ぎて安定してきましたので、ここでは、

  • WSL2
  • Ubuntu 22.04
  • VcXsrv

をいれたうえで、FSL をインストールしてみます。

なお、このページは、FSLの公式サイトを参考に作成しました。

続きを読む

Print Friendly, PDF & Email

FreeSurferとFSL 6.0.6以降を同時にインストールしている時に起きる事象への対処法

FreeSurfer と FSL 6.0.6以降を使っていると、ある事象が起きます。

  • Python3がFSLが提供するPython3になります。
  • dcm2niixがFSLが提供するdcm2niixになります。

これの影響を受けているかの確認法および対処法を最初に解説した後、その理由を述べます。

続きを読む

Print Friendly, PDF & Email

CONNで前処理したfMRI画像の時系列データを取り出す方法

ある方から、「CONNで前処理したfMRI画像から、デフォルト・モード・ネットワーク(DMN)の時系列データを取り出すにはどうしたらよいですか?」というご質問をいただきました。

鍵となるプログラムは以下の2つです。

  • conn_matc2nii
  • spm_summarise

以下に、方法を記載します。

続きを読む

Print Friendly, PDF & Email

Ubuntu 20.04/22.04 上の FSL6.0.6 以降で CUDA 11以降のGPUを使う方法

FSL 6.0.6 以降で、CUDA 11以降も対応するようになりました。

いろいろ試行錯誤した結果、以下のようなシンプルな方法でFSLでCUDAを上手に使うことができるようになったので紹介します。

なお、Amulet社から販売している Powerstep Tower for Lin4Neuro は、既にこれらの設定が済んでいますので、電源入れたらすぐにEDDY, BEDPOSTX, XTRACTなどがGPUを使って解析できます。
なお、FSL 6.0.6 以降は既にインストールされているとします。

続きを読む

Print Friendly, PDF & Email

Ubuntu で 新しいハードディスクを追加する方法 step by step

これまで新しいハードディスクを追加する際の tips を書いてきましたが、最初から最後までまとめます。SATA接続のSSDも同様です。

  1. 新しいデバイスを確認する
  2. fdisk を使って確認できます。

    sudo fdisk -l
    

    詳細はこちらに説明があります。

    この後は、 /dev/sda が新たなデバイスであると仮定します。

  3. パーティションの作成
  4. gdisk を使います。

    sudo gdisk /dev/sda
    

    この後、タイプするコマンドは

    n #新しいパーティションを追加 設定はすべてデフォルトのままでも可
    p #パーティションテーブルを確認
    w #パーティションテーブルの書き込み
    

    の3つだけです。

    詳細は先ほどと同じく、こちらに説明があります。

  5. ext4 としてフォーマット
  6. mkfs.ext4 を使います。

    sudo mkfs.ext4 /dev/sda
    
  7. ハードディスクのUUIDを確認
  8. blkid で確認できます。

    sudo blkid | grep dev\/sda
    

    ここで表示されるUUIDを後ほど使います。

  9. マウントポイントの作成
  10. 今の場合は /mnt/data1 にマウントするとします。

    sudo mkdir /mnt/data1
    
  11. /etc/fstab への追加
  12. /etc/fstab に以下の内容を追加します。詳細はここでは説明しませんが、データ用ならば以下の設定でよいのではないかと思われます。

    # HDD 2023-04-15 (コメントを記載した方がどのハードディスクかわかります)
    UUID=上記で調べたUUID    /mnt/data1    ext4    defaults    0    0
    
  13. ハードディスクのマウント
  14. mount -a でマウントできます。

    sudo mount -a
    
  15. オーナーシップの変更
  16. 自分だけ使う場合、chown を使ってオーナーを自分にすると使い勝手がいいです。

    sudo chown -R $USER:$USER /mnt/data1
    

これでハードディスクを追加できました。

Print Friendly, PDF & Email

FSLの設定ファイルを読み解く

FSLはデフォルトでは、Linuxの場合は、.profile の下、macOS の場合はお使いのシェルに応じて、.bash_profile もしくは .zprofile の下に 以下のような設定が書き込まれます。(6.0.6以降の設定です)

# FSL Setup
FSLDIR=/usr/local/fsl
PATH=${FSLDIR}/share/fsl/bin:${PATH}
export FSLDIR PATH
. ${FSLDIR}/etc/fslconf/fsl.sh

この内容を理解できると、ソフトの設定がわかるようになるので、1行ずつ解説してみます。

続きを読む

Print Friendly, PDF & Email

FreeSurfer で Local Gyrification Index を求めるための準備

FreeSurfer では Local Gyrification Index (LGI) を求めることができます。LGIを一言で言えば、脳の皮質の折りたたみの状態を指標化とでも言えるでしょうか。
詳細は、本家のウェブサイトにありますが、ポイントを示します。

  • 必要なソフトウェアとしては、Matlab と Matlab Imaging Toolbox が必要となります。
  • Matlab のパスに $FREESURFER_HOME/matlab を追加しておくことが必要です。
  • 画像の準備としては、recon-all が終わっていることが必要です。

この3つを準備しておけば、あとは、以下のコマンドをタイプするだけです。

recon-all -s <fsid> -localGI
Print Friendly, PDF & Email

Ubuntu 20.04, 22.04 に HCP Pipeline の環境を設定する方法

しばらく前に、Ubuntu 18.04用にHCP Pipelineの環境を設定する方法を記載しましたが、いくつかアップデートもあるので、Ubuntu 20.04用以降でも設定できるようにします。

*2023/10/08追記: Neurodebianの設定についてうまく動かないミスがありましたので修正しました。神谷先生、ご指摘ありがとうございました。

続きを読む

Print Friendly, PDF & Email

macOSへのFreeSurfer7.3.2のインストールスクリプト

FreeSurfer 7.3.2が公開されました。色々新しい機能が実装されています。

macOSへのインストールはデモ動画が示されていますが、コマンドラインで一気にインストールしたいと思いました。

インストールスクリプトを作成しましたので、公開します。

スクリプトの内容はこちらから確認できます。実際の方法は下に記載してありますので、そちらに従ってください。

続きを読む

Print Friendly, PDF & Email

XFCEのウィンドウのサイズ変更は、Alt + 右クリック + 矢印が便利

Lin4NeuroはXFCEを採用しています。とても軽量なのでいいのですが、ウィンドウのサイズ変更でウィンドウの端を上手につかむことができず困ることがあります。
いいショートカットを教えていただきました。「Altキーを押しながら右クリックして、マウスを動かす」です。

私はマウスはできるだけ使わない方がうれしい人間なので、マウスを矢印キーで代用できないか試してみたらバッチリでした。

Alt + 右クリック + 矢印キーで、ウィンドウのサイズが比較的簡単に変更できます。

お試しあれ。

Print Friendly, PDF & Email