Ubuntu 22.04にCUDA開発環境の構築
個人的にホストとしているUbuntuにCUDA環境を入れるのはあまり好きではなくて、Dockerから使うとかしたかったわけですが、StreamDiffusionを実行するときにわざわざLD_LIBRARY_PATHするのも面倒だし、もう入れてしまおうと観念してしまい入れました。
あとはcudaを有効にして機械学習アリのOpenCVライブラリを使う場合にCUDA開発環境を入れておかないとCUDA有効なOpenCVのライブラリをリビルドできないというところですね。。。
で、入れるのは昔に比べたら相当楽になったわけですが、若干のハマりポイントがあったので備忘録代わりに書いておきます
関係ない話ですがStreamDiffusionはなかなか夢ありそうですね。
https://github.com/cumulo-autumn/StreamDiffusion
最新のNvdiaグラフィックドライバのインストール
何もNvidiaのドライバを入れていない状態で入れるのは楽なんですが、現在Ubuntu公式が用意してくれているNVidiaのドライバを使用するのではなく、NVidiaのレポジトリから入れ直す場合はちょっとハマるポイントがあるので次の手順で行います。
新し目のNvidiaのGPU(RTX4080や4090など)はnouvauが真面目に動かずGUIログイン画面にすらならないので、recovery modeを併用して入れる必要があります。
1.Nvidia謹製のレポジトリ追加
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
$ sudo apt update
2.「追加のドライバー」などで、nvidiaドライバーから一旦Nouvauドライバーに戻す
3.再起動
ここでnouvauモードでXWindowが起動してこない人は、一旦リセットして以下手順でubuntuのrecovery modeに入ります。
3-1.電源投入後のgrubの画面で「Advanced options for Ubuntu」を選択して、「起動するLinuxバージョン名の後ろに(recovery mode)」のものを選択
3-2.しばらくするとメニュー画面が出るので「root」を選択
3-3.Ctrl+Dを押すとなんとか…という画面が出るけど、ここでリターンを押してrootシェルに入る
3-4. そのままではネットワークが動いておらず何もできんので、とりあえずip linkコマンドでLANインターフェイスの名前を見る(例だとeth0がそれ)
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
おそらく「DOWN」になってるので、以下で復帰させる
これでとりあえずネットワークとインターネットが使えるようになる
# ip link set eth0 up
# dhclient eth0
# systemctl start systemd-resolved
(これはDHCPがルータにある場合。ない場合はipコマンドでIPAddressを割り振ればOK)
4.とりあえずubuntu-drivers devices
で入れるドライバを決める。
Recommendedと書いてあるものを入れると良いが2023/12現在は535ドライバが安定版、545ドライバが最新版という位置づけになっているので注意。
$ ubuntu-drivers devices
vendor : NVIDIA Corporation
driver : nvidia-driver-545 - third-party non-free recommended
driver : nvidia-driver-525 - third-party non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-530 - third-party non-free
driver : nvidia-driver-535 - third-party non-free
driver : nvidia-driver-535-open - distro non-free
driver : nvidia-driver-525-open - distro non-free
driver : nvidia-driver-535-server-open - distro non-free
driver : nvidia-driver-525-server - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
5.ここでnvidiaドライバを改めて入れる(例では545のドライバ)
# apt update
# apt upgrade
# apt install nvidia-driver-545
6.再起動(update-initramfs -u
はドライバインストール中にやっているはずなので要らない)
cuda-driverとcudnnのインストール
cudaドライバをまずはインストールする
$ sudo apt install cuda-drivers
これをしたら念の為再起動(いらないかもしれない)
その後
$ sudo apt install cuda-toolkit
をしてからcudnnをインストールする
$ apt list libcudnn8 -a
とするといろいろなバージョンが出てくる
何も考えずに
$ sudo apt install libcudnn8 libcudnn8-dev libcudnn8-samples
とすると最新が入るので、最新を入れたくない場合はlistの結果を参照してバージョン番号を降ると良い
パスの設定やLD_LIBRARYの設定はやってくれないので.bashrc
に以下追加
export PATH="/usr/local/cuda/bin${PATH:+:${PATH}}"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
export CUDA_PATH=/usr/local/cuda
追加したらコマンドプロンプトをもう一枚立ち上げてnvcc(cudaコンパイラ)が動くか以下確認
こう出れば多分OK
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Nov__3_17:16:49_PDT_2023
Cuda compilation tools, release 12.3, V12.3.103
Build cuda_12.3.r12.3/compiler.33492891_0
なお、これで入るcuda類は/usr/local
以下に入ります
/usr/local/cuda
は/etc/alternatives/cuda/
にリンクされていて、バージョンを古いのにしたいとかだと例によってupdate-alternatives
で変更が可能だと思われます
sudo update-alternatives --config cuda
なお、sudo apt upgrade
をすると漏れなくアップデートされてしまうことになるので、バージョンを止めたい時は/etc/apt/sources.list.d/cuda-ubuntu2204-x86_64.list
のエントリーを以下のようにコメントアウトすること。
# deb [signed-by=/usr/share/keyrings/cuda-archive-keyring.gpg] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /