Ubuntu18.04上のFSL6.0.4でeddy_cudaを使う方法

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をセットアップできました。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください