はじめに
私はPyTorchユーザで、もちろんGPUも使っていますが、OSはいつもFedoraです。
Ubuntuは使ったことがありません。
そこで、FedoraにCUDAをインストールする際に注意すべき事項をメモとして書いておきます。
(おそらく、CentOSについても、以下のようにすれば大丈夫だと思います。)
Fedoraをインストールしたらランレベルを3にしておく
こうしなくても大丈夫かもしれませんが、安全のためです。
# ln -fs /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
として、ランレベルを3にし、OSが起動したら、rootでログインして
# startx
でGUIに移りましょう。無事に作業が終わった後で、元に戻せばいいだけです。
マザーボードのBIOS設定でSecure Bootをオフにする
これをしないと、NVIDIAのドライバのインストールが途中で止まります。必ずオフにしましょう。
厄介なのは、マザーボードによっては、Windows関連メニューの下にこの設定が配置されていて、
非常に分かりくいことです。BIOSの画面を探しまわって、Secure Bootの項目を見つけ出しましょう。
作業するディスプレイはマザーボードにつなぐ
こうするのがややこしくなくていいです。(nouveau関係が面倒です。)
マザーボードのBIOS設定で、使用するディスプレイ端子をオンボードのほうに変えておきます。
そして、マザーボードにディスプレイをつないだ状態で、作業しましょう。
kernel-headersとkernel-develをインストールしておく
とりあえず
# dnf install kernel-headers kernel-devel
として、kernel-headersとkernel-develをインストールしておきましょう。
順番はcudaのインストール→再起動→ドライバのインストール
最初にcudaをインストールします。私は、CUDA Toolkitのページから、
Linux→x86_64→Fedoraと移り、「rpm (local)」をいつも使っています。
そして、まず
# rpm -ivh cuda-repo-fedoraXX-XX-X-local-XX.X.XXX-XXX.XX-X.X-X.x86_64.rpm
とし、次に
# dnf install cuda
とします。
その後、
# reboot
と、リブートします。
そして、 DOWNLOAD DRIVERSのページで、
NVIDIA-Linux-x86_64-XXX.XX.run というファイルをダウンロードし、実行します。
# chmod 755 NVIDIA-Linux-x86_64-XXX.XX.run
# ./NVIDIA-Linux-x86_64-XXX.XX.run
途中はそのままEnterキーを押していればいいはずです。
(最後の X configuration file のところは、Enterキーを押せばNoになるはずです。)
おわりに
以上の手順を踏めば、neauvouのmodesetがどうのこうのという話には、関わらなくて済むと思います。
もし、やっぱりnouveau関係で引っかかったという場合は、ここにある指示に従いましょう。
深層学習フレームワークをGPU上で使うのは、Fedoraでも全く問題ないです。
追記
(2019/07/18 追記、2019/07/22 修正)
深層学習フレームワークを使う場合、CUDAのバージョンは10.1ではなく10.0でないとダメかもしれません。
CUDAをダウングレードする際は、
# rpm -qa | grep cuda
と,消したいCUDAのリポジトリを探し,例えば
# rpm -e cuda-repo-fedora29-10-1-local-10.1.168-418.67-1.0-1.x86_64
と、そのリポジトリを消します。そして古いCUDAをインストールするとき、例えば、
# dnf erase cuda
# rpm -ivh cuda-repo-fedora27-10-0-local-10.0.130-410.48-1.0-1.x86_64.rpm
# dnf --allowerasing install cuda
と、再インストール時には--allowerasing
オプションを指定する必要があると思います。
(2019/07/23 追記)
不要だった部分(dkmsはなくてもよかった)を削除して、構成も少し変更しました。
(2019/07/24 追記)
Fedora 29インストール時にいつもと違うパッケージを選んだら、
ドライバのインストール中にエラーが出ました。
その理由は、kernel-develがインストールされていなかったことでした。
kernel-develが必要だと分かりましたので、記事を修正しました。