140文字以上

140文字では伝わらないことを書いています。禁無断転載

twitter(@chromarock), github, bluesky, Mastodon(japanet), misskey, ほしいものリスト, 本人証明, その他プロフィール

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のレポジトリから入れ直す場合はちょっとハマるポイントがあるので次の手順で行います。

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/ /
共有する 共有用にコピー