FSLにはeddyという拡散MRI画像の渦電流を補正するプログラムが搭載されています。
かつてはeddy_correctというシンプルなプログラムでしたが、
今のeddyは、計算量がとてつもなく大きな(=処理時間がかかる)プログラムとなっています。
Liux版のFSLには、eddy_openmp というCPU版と、eddy_cuda{8.0,9.1}というGPU版があります。
Ubuntu 18.04 が搭載されているLinuxで NVIDIA製のグラフィックボードが搭載されている場合、eddy_cudaを比較的簡単にセットアップできるので紹介します。
注意:NVIDIAのドライバを入れる時点で、ディスプレイの解像度が変になることがあります。現在の実働マシンに使う場合は相当注意しながら行ってください。個々人の環境があまりにも違うのでこの方法で不具合が起こっても責任は負いかねます。(すでに3台のマシンでセットアップを行い問題ないことを確認していますが…)
とりあえず入れたい人のためのインストール方法
- 以下の4つのコマンドでセットアップできます。
sudo update-pciids sudo ubuntu-drivers autoinstall (再起動) sudo apt install nvidia-cuda-toolkit ln -sf ${FSLDIR}/bin/eddy_cuda9.1 ${FSLDIR}/bin/eddy_cuda
解説つきインストール方法
比較のためにCUDAを入れない状態でのtopupとeddy_openmpの実行
- mritrix3に入っている dwifslpreproc を使ってCUDAを入れない状況で 拡散MRIデータ1例に対して topup と eddy を実行してみました。その結果ですが、
real 17m25.986s user 85m45.748s sys 0m56.166s
となり、1例あたり85分かかりました。なかなかしんどいですね…。
PCI IDリストの新しいバージョンをダウンロード
- 搭載されているグラフィックボードを正しく認識するため、PCI IDリストを以下のコマンドでアップデートします
sudo update-pciids
搭載されているグラフィックボードの確認
- 自分のマシンに搭載されているグラフィックボードが認識されているか確認します
lspci | grep -i nvidia
- 私の場合、以下のようになりました。
01:00.0 VGA compatible controller: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti Rev. A] (rev a1) 01:00.1 Audio device: NVIDIA Corporation TU102 High Definition Audio Controller (rev a1) 01:00.2 USB controller: NVIDIA Corporation TU102 USB 3.1 Host Controller (rev a1) 01:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU102 USB Type-C UCSI Controller (rev a1)
私のマシンには、GeForce RTX2080が搭載されていることがわかります。
グラフィックボードのドライバの確認
ubuntu-drivers devices
で必要なドライバを確認します。
ubuntu-drivers devices == /sys/devices/pci0000:00/0000:00:01.1/0000:02:00.0 == modalias : pci:v000010DEd00001E07sv000010DEsd000012FAbc03sc00i00 vendor : NVIDIA Corporation driver : nvidia-driver-450 - distro non-free driver : nvidia-driver-460 - distro non-free recommended driver : nvidia-driver-450-server - distro non-free driver : nvidia-driver-418-server - distro non-free driver : xserver-xorg-video-nouveau - distro free builtin
2021年1月22日現在、nvidia-driver-460というのが推奨になっています。素直にこれを入れることにします。
グラフィックボードのドライバのインストール
- 以下のコマンドで上記の推奨ドライバがインストールできます。
sudo ubuntu-drivers autoinstall
再起動
- インストールできたら再起動します
nvidia-smi での確認
- nvidia-smi は “NVIDIA System Management Interface program” の略です。
nvidia-smi Fri Jan 22 19:53:41 2021 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 GeForce RTX 208... Off | 00000000:01:00.0 On | N/A | | 0% 42C P8 22W / 260W | 230MiB / 11016MiB | 1% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 1569 G /usr/lib/xorg/Xorg 118MiB | | 0 N/A N/A 2602 G ...gAAAAAAAAA --shared-files 106MiB | +-----------------------------------------------------------------------------+
- ここでCUDA Version: 11.2となっていますが、実際、CUDAはまだ入っていないことに注意してください。ここのVersionはあてになりません。
CUDA 9.1のインストール
- FSL 6.0.4 では、eddy_cudaは CUDA 8.0 と CUDA 9.1に対応したバージョンが搭載されています。Ubuntuでは、
nvidia-cuda-toolkit
というプログラムが準備されています。これはどのバージョンのCUDAが入るか確認します。apt show nvidia-cuda-toolkit
でインストールされるcudaのバージョンを確認できます。
apt show nvidia-cuda-toolkit Package: nvidia-cuda-toolkit Version: 9.1.85-3ubuntu1 Priority: extra Section: multiverse/devel Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Debian NVIDIA Maintainers <pkg-nvidia-devel@lists.alioth.debian.org> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 61.0 MB Depends: nvidia-profiler (= 9.1.85-3ubuntu1), nvidia-cuda-dev (= 9.1.85-3ubuntu1), nvidia-opencl-dev (= 9.1.85-3ubuntu1) | opencl-dev, gcc-6 | clang-4.0 | clang-3.9 | clang-3.8 | clang (<< 1:5~) | gcc-5 | gcc-4.9 | gcc-4.8, g++-6 | clang-4.0 | clang-3.9 | clang-3.8 | clang (<< 1:5~) | g++-5 | g++-4.9 | g++-4.8, libc6 (>= 2.4), libgcc1 (>= 1:3.0), libnvvm3 (>= 7.0), libstdc++6 (>= 4.1.1)
cuda 9.1が入ることがわかります。これをこのまま使うことにします。
sudo apt install nvidia-cuda-toolkit
CUDAのバージョン確認
nvcc -V
で、どのバージョンのCUDAが使用されるか確認できます。
nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2017 NVIDIA Corporation Built on Fri_Nov__3_21:07:56_CDT_2017 Cuda compilation tools, release 9.1, V9.1.85
CUDA 9.1が使われていることがわかります。
eddy_cuda の準備
- eddyのUsersGuideに、eddy_cudaの準備の方法が記載されています。素直にそのまま実行します。eddy_cuda9.1へのシンボリックリンクをeddy_cudaとして準備します。FSLのページに書かれていないこととしては、sudoをつけることが必要ということぐらいでしょうか。
sudo ln -sf ${FSLDIR}/bin/eddy_cuda9.1 ${FSLDIR}/bin/eddy_cuda
これで準備は完了です。
eddy_cudaを使用した topupとeddy_cudaの実行
- 一番最初に用いたものと同じデータに対して dwifslpreproc を使って topup と eddy を実行してみました。その結果ですが、
real 7m2.535s user 7m3.179s sys 0m16.221s
となり、eddy_openmpの場合 85分45秒、eddy_cudaの場合、7分3秒という結果になりました!実に12倍のスピードアップです。
ということで、比較的簡単にeddy_cudaをセットアップできました。