FSL 6.0.6 and later now support CUDA 11 or later.
After various trials and errors, I have found a simple way to use CUDA effectively with FSL, which I will introduce here.
Assuming that FSL 6.0.6 or later is already installed.
FSL 6.0.6 and later now support CUDA 11 or later.
After various trials and errors, I have found a simple way to use CUDA effectively with FSL, which I will introduce here.
Assuming that FSL 6.0.6 or later is already installed.
FSL 6.0.6 以降で、CUDA 11以降も対応するようになりました。
いろいろ試行錯誤した結果、以下のようなシンプルな方法でFSLでCUDAを上手に使うことができるようになったので紹介します。
なお、Amulet社から販売している Powerstep Tower for Lin4Neuro は、既にこれらの設定が済んでいますので、電源入れたらすぐにEDDY, BEDPOSTX, XTRACTなどがGPUを使って解析できます。
なお、FSL 6.0.6 以降は既にインストールされているとします。
bedpostx_gpu を走らせると、以下のエラーがでます。
/usr/local/fsl/bin/bedpostx_postproc_gpu.sh: 行 20: --cnonlinear/bin/merge_parts_gpu: そのようなファイルやディレクトリはありません
この解決法がFSLのMLで紹介されています。
https://www.jiscmail.ac.uk/cgi-bin/wa-jisc.exe?A2=FSL;ee0b1626.2112
具体的には、
${FSLDIR}/bin の中にある bedpostx_postproc_gpu.sh の
# last 2 parameters are subjdir and bindir parameters="" while [ ! -z "$2" ] do
を
# last 2 parameters are subjdir and bindir parameters="" while [ ! -z "${2+x}" ] do
に変更します。
while の後の test文 の中が、 $2 が ${2+x} になっています。
これで無事に動きます。
ご紹介まで。(金子貴久子先生、情報提供ありがとうございました)
4月30日にUbuntuのアップデートをしたら、以下のようなメッセージが出ました。
W: GPG エラー: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY A4B469963BF863CC
E: リポジトリ https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease はもう署名されていません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。
NVIDIAのリポジトリが変更があったのかなと思い、NVIDIAのサイトを見に行ったら、きちんと書いてありました。
Updating the CUDA Linux GPG Repository Key
このページに書いてありますが、Ubuntu 18.04の場合は行うべきことは以下になります。(Ubuntu 20.04は1804を2004に変えるだけです)
sudo apt-key del 7fa2af80 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt update
これで公開鍵が更新されます。
ただ、人によっては以下のメッセージが出てくるかもしれません。
W: ターゲット Packages (Packages) は /etc/apt/sources.list:63 と /etc/apt/sources.list.d/cuda-ubuntu1804-x86_64.list:1 で複数回設定されています
これは、/etc/apt/sources.list と /etc/apt/sources.list.d/cuda-ubuntu1804-x86_64.list
に同じ内容が記載されていることによります。
この場合は、
/etc/apt/sources.list にある
deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /
を削除すればOKです。
ATTENTION (16 Apr 2023): From 6.0.6, you can use the latest CUDA to run eddy_cuda10.2. So this post is obsolete. I wrote a new post, so please check it out.
FSL 6.0.5 ships eddy_cuda10.2 which literally uses CUDA 10.2.
I explored a way to use eddy_cuda10.2, PyTorch and Tensorflow concurrently. Below is How-To for Ubuntu 18.04/20.04.
注意(16 Apr 2023): FSL 6.0.6 から、CUDA 11以降でもeddy_cuda10.2が動くようになりました。したがって、以下の内容はもう古くなっています。新しい記事をご確認ください。
私のメインマシンは Lin4Neuro 18.04 ですが、そろそろ Lin4Neuro 20.04 への移行を考えています。
今、実験機には NVIDIA GeForce RTX 2070 が備え付けられています。
これを使って、FSL 6.0.5 の eddy をGPUが使えるように設定し、なおかつ、Tensorflow, Pytorch といった Deep Learning のフレームワークも使えるようにしたいと思います。
FSL 6.0.5 にはデフォルトで CUDA 10.2 に対応した eddy_cuda10.2 が配布されています。なので、CUDA 10.2を入れることにします。
なお、これは Ubuntu 18.04 でも全く問題なくできることがわかりましたので、タイトルを変更しました。
eddy implemented in FSL is time-consuming program. FSL recommends using eddy_cuda, GPU version of eddy. They ship eddy_cuda8.0 and edddy_cuda9.1. If you use Ubuntu 18.04, you can make use of eddy_cuda9.1 with only 4 commands.
Disclaimer: Installing nvidia-driver could cause display problem. I am not responsible for the problem…
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台のマシンでセットアップを行い問題ないことを確認していますが…)
2021/12/19追記: より新しく確実な方法を書きましたので、そちらをご参照ください。これはもう古いです。こちら(Ubuntu 20.04 / 18.04 環境で CUDA 10.2, FSL 6.0.5, Tensorflow, PyTorch をセットアップする方法)になります。CUDA 10.2 ですが、他のバージョンにも容易に応用できる方法です。
Ubuntu 18.04で、ディープラーニング環境を構築したいと考えました。
いろいろネットの情報を得てトライしてみたのですが、苦戦しました。
しかし、トライしているうちに、いくつか大事なことがわかってきました。
ポイントは、以下のとおりです。
まずいちばん大事なのはこれです。ドライバーが古いものしか対応していないと、対応するCUDAのバージョンも古くなります。
これから詳しく記載します。
カーネルを最新のものを追いかけるとCUDAは動かないという事象が起きます。Ubuntu 18.04では、標準が4.15、そしてHWEが4.18です。CUDAは、この2つのバージョン(標準とHWEカーネル)だけサポートします。詳しくは、NVIDIAのページをご覧ください。
これらのコツをつかんだら、再現性が高くセットアップすることができるようになりました。
Step by Stepで示します。
現在、GPUでの機械学習ができる環境を構築しています。
様々な試行錯誤があるので、これはこれで別の記事になるのですが、
非常に困ったことが起こりました。
NVIDIAのGeForce RTX2070というグラフィックボードを入手したのですが、
Linux (Lin4Neuro based on Ubuntu 18.04)のインストールまでは全く問題ないのですが、NVIDIAのドライバーをインストールすると、再起動後、画面が全くうつらなくなるのです。
そして、Ctrl+Alt+Deleteも受け付けなくなり、ハードリセットしか方法がなくなります。
折角よい性能のグラフィックボードを入手したのにどうしてうつらなくなってしまうんだろうとネットの情報を探しまくりましたがなかなか情報が見つかりませんでした。
1ヶ月、問題が解決しませんでした…。
そのような中、ふと「ソフトがダメならハードか?」と思いました。
Display Portを使って画面を出力していましたが、HDMIに変えてみたらどうだろうと思い、変えてみたところ、あっさりうつりました…。
“NVIDIA” “Display Port” “Black screen”で調べると情報がちらほら出てきました。
やらなきゃいけないことがたくさんあるので、これ以上の調査はしないでおきますが、
今日の結論は、「画像の出力がおかしかったらDisplay PortをHDMIに切り替えてみよう」ということでした。
使いたいGPU計算ソフトがCUDAの特定のバージョンでしか動かないことがあると思います。
CUDAのバージョンの切り替え方を書いておきます。
切り替え先のバージョンがインストールしてある必要があります。
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-11.5 100 sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-11.0 90 sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-10.2 80
sudo update-alternatives --config cuda
$ sudo update-alternatives --config cuda alternative cuda (/usr/local/cuda を提供) には 3 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /usr/local/cuda-11.5 100 自動モード 1 /usr/local/cuda-10.2 80 手動モード 2 /usr/local/cuda-11.0 90 手動モード 3 /usr/local/cuda-11.5 100 手動モード 現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:
すると、以下のような表示になります。
update-alternatives: /usr/local/cuda (cuda) を提供するためにマニュアルモードで /usr/local/cuda-10.2/ を使います
私は、できるだけ .bashrc をいじらないでというのを最近、モットーにしています。Ubuntuでは .bashrc の中で読み込まれる .bash_aliases があるのでそちらに追記します。.bash_aliases はその名の通り、本来はエイリアスの設定を書くものと思いますが、様々なパスをここに書いておくと、.bashrc を直接いじらなくていいので安全かと思います。
update-alternatives を併用すると、以下のような記載で大丈夫になります。LD_LIBRARY_PATHは、自分が使い分けをしたいCUDAの lib64 のパスをひたすら書いていきます。
# CUDA export PATH=/usr/local/cuda/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda-10.2/lib64:/usr/local/cuda-11.0/lib64:/usr/local/cuda-11.5/lib64${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}}
$ nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2019 NVIDIA Corporation Built on Wed_Oct_23_19:24:38_PDT_2019 Cuda compilation tools, release 10.2, V10.2.89
nvcc -V
例:CUDA5.0に切り替える場合
sudo unlink /usr/local/cuda sudo ln -s /usr/local/cuda-5.0 /usr/local/cuda
nvcc -V