プロフィール

髭山髭人(ひげひと)

自分の書いた記事が、一人でも誰かの役に立てば...
活動信条の一つとして「貴方のメモは、誰かのヒント」というのがあります。

このサイトについて

本家HP packetroom.net から切り離した いわゆる技術メモ用のブログで、無料レンタルサーバーにて運用しています。広告表示はその義務なのでご容赦。
XREA さんには長年お世話になっています

ESPnet を使うために CUDA 系を導入

概要

WSL2 + Ubuntu の組み合わせで nVidia製グラボを載せた WindowsPC で、
ESPnet を使った機械学習的(と言うより合成音声)なヤツを作ったりしたかった。
ちな、テキストから読み上げる TTS (Text To Speech) ってジャンル?です。

WSL2とUbuntuをWindowsにインストール 記事の続きです

  • だいぶ初心者向け
    Linux 系よくわからん みたいな過去の自分宛みたいな節があります。
    当たり前のことをくどくど説明するのでご容赦。

1. CUDA Toolkit の導入

執筆時点での 最新 CUDA バージョンは 12.1 であるものの、
ESPNet の動作に必要な PyTorch 自体が、最新のCUDAに対応しているとは限らない。
執筆時点の PyTorch が対応しているCUDAバージョン11.7系 なので、まずはこれを導入する。

( ※ 今言及した PyTorch は、後続の記事で順番に導入します )

CUDA Toolkit
最新版 https://developer.nvidia.com/cuda-downloads
アーカイブ https://developer.nvidia.com/cuda-toolkit-archive

アーカイブページから CUDA Toolkit 11.7.1 を選択すると別ページに移動するので、
そこから以下の順番通りに緑色の選択項目ボタンをクリックして進める。

※ Distribution は WSL-Ubuntu を選んでください。 Ubuntu では無い ので注意

全て選ぶと Download Installer for Linux WSL-Ubuntu 2.0 x86_64 の文言と共に、
以下のようなコマンド一覧が出てきます。

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-11-7-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
  • 🔰
    ⚠️ 予め cd ~ または cd %HOME コマンドを事前に実行し、ホームディレクトリに移動しておきましょう
    また、 sudo が先頭にあるコマンドの初回実行時に パスワード入力を促される事があるので、都度対応してください。
    ( Ubuntuのログインアカウント作成時に2回入力したヤツです )

さて、コマンド群を一気に実行する方法もありますが、ここでは一行ずつ順番にコピペでターミナルへ入力して進めます。
普段の感覚なら、ペーストは Ctrl + VShift + Insert ですが、どちらも利きません。
本ターミナルでは 右クリック がペースト扱い なので、一行ごとに右クリックで貼り付け ⇒ Enter で都度実行してください。

コマンド中にある /cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb は、およそ 2.3GB のファイルです。
wget はダウンロード用のコマンドで、 当該URLからファイルをDL & コマンドを実行した現在位置(ディレクトリ)に保存します。

行中にあるコマンド、
sudo cp /var/cuda-repo-wsl-ubuntu-11-7-local/cuda-*-keyring.gpg /usr/share/keyrings/
に関してですが、 * の部分がやや不定となるようです。
直前に実行した sudo dpkg -i cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb の応答内容をコピペで実行してください。
ドラッグで選択範囲を取った後、そのまま右クリックでクリップボードにコピーされます。
貼り付けるのも右クリックです。 慣れないうちはターミナルのコピペで混乱するかもしれません Σ(´ ` )

  • 💡 バックアップ小テクニック
    今後もし Ubuntu 自体をリセットしたくなった時、折角 wget でDLしたファイルも一緒に消えてしまいます。
    この為、( 原則インストーラー系に限りますが ) DLした大容量のファイルは Windows 側へ一旦コピーしておくと、
    作業やり直しの際に 再びWindows側からコピーしなおす事で DLの手間・時間を減らせるのでオススメです。

    また、DLに関しても wget コマンド経由で直接DLする選択肢もあれば、
    Windows側のブラウザで、
    https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb
    のURLを 直接開いてDLした後、
    それを Ubuntu のホームディレクトリにコピーする選択肢もあります。
    ( どちらもやっている事は "DLしたファイルを Ubuntuのユーザーホームディレクトリに置く" なので一緒 )

全行ぶんの工程を終了後 apt show cuda コマンドを実行
以下のようなログが出ればOKです

Package: cuda
Version: 11.7.1-1
Priority: optional
Section: multiverse/devel
Maintainer: cudatools <cudatools@nvidia.com>
Installed-Size: 7168 B
Depends: cuda-11-7 (>= 11.7.1)
Download-Size: 2402 B
APT-Manual-Installed: yes
APT-Sources: file:/var/cuda-repo-wsl-ubuntu-11-7-local  Packages
Description: CUDA meta-package
 Meta-package containing all the available packages required for native CUDA
 development. Contains the toolkit, samples, driver and documentation.

2. nvcc コマンドが使えるように Path を2つ通す

今導入した CUDA Toolkit をコマンドで触れる( nvcc が使える ) ようにします。
nvcc -V を実行してみてください。
本来の応答内容はこのようなログですが、

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Jun__8_16:49:14_PDT_2022
Cuda compilation tools, release 11.7, V11.7.99
Build cuda_11.7.r11.7/compiler.31442593_0

「入ってない(またはpathが通っていない)」と判断された場合、こんな応答になります。

Command 'nvcc' not found, but can be installed with:
sudo apt install nvidia-cuda-toolkit

/usr/local/cuda/bin/nvcc --version
とすれば 本来 nvcc -V と同様の結果を呼び出せるものの、それでは不十分なので設定を行います
nano というエディタで、特定ファイルを編集する感じ。

sudo nano $HOME/.bashrc コマンドを実行 ( passの入力に応じてください )

カーソルをエディタ下部へ移動し、ファイルの末尾に、

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH

の2行を追加 ( ※ 後者はライブラリ用 )

  • 📝 nano の使い方メモ
    nano 上なら、Ctrl + U でペーストが出来ます。
    右クリックでもペーストできるので、そちらでもOK。
    nano は「Ctrl + 何かのキー」を使った操作がセオリーの様です。
    英文ですが、画面下にちょっとした機能が表示されているので、それを参考に触ってください。
    • 編集を終えたら
      Ctrl + O で上書き確認。そのまま Enter
      Ctrl + X で nano エディタ終了
    • 変な風になっちゃったら
      Ctrl + X で 終了要求
      画面下で "Save modified buffer?" と尋ねられたら N を入力すれば、
      そのまま保存せずに破棄終了できます

編集し終えたら source ~/.bashrc のコマンドを実行してください。
( 有効化の意味合いがあります )
この時、ユーザー名の色が変わるかもしれません。
その場合は su ユーザー名 の実行で戻ると思います。

3. cuDNN のDL

NVIDIA CUDA Deep Neural Network library 略して cuDNN だそうです。

  • 要ユーザー登録
    NVIDIA Developer Program に参加していないとDL出来ない ので、
    https://developer.nvidia.com/developer-program
    にあるページ中央の Member Area ボタンから登録を済ませておいてください。

ログインした状態で https://developer.nvidia.com/rdp/cudnn-download ページにアクセス後、
" I Agree To the Terms of the cuDNN Software License Agreement " にチェックを入れて進みます。

cuDNN のDL系項目/リンクが表示されるので、先程インストールした CUDA 11.7 系に対応する、
Download cuDNN v8.9.0 (April 11th, 2023), for CUDA 11.x ( ※執筆時点 ) をまず選択し、 リンク集を表示します。

今回の環境・ケースでは "WLS2のUbuntu上で使う" ので、Ubuntu カテゴリとなり、
更に同じく Ubuntu バージョンが今回 22.04 LTS + CPUタイプが x86_x64 なので、
Local Installer for Ubuntu22.04 x86_64 (Deb) をDLするのが正解となります。

執筆時時点では cudnn-local-repo-ubuntu2204-8.9.0.131_1.0-1_amd64.deb のファイル名で、
サイズは 890 MB 程度でした。

4. cuDNN の導入

参考 : https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#installlinux

Windows 側エクスプローラから Linux(Ubuntu) の階層を開き、
上記手順でDLした cudnn-local-repo-ubuntu[うんたらかんたら]_amd64.deb ファイルを、
/Ubuntu/home/[ユーザー名]/ ディレクトリにコピー。

あとは下記を一行ずつコピペ実行していきます。
作業用としてホームディレクトリにファイルを置いたので、
実行前に cd ~ または cd $HOME で事前に現在地位置を合わせておいてください

sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.0.131_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-[バージョン]/cudnn-local-*-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt -y install libcudnn8 libcudnn8-dev libcudnn8-samples

上記2行目の不定部分 * は、1行目で実行した dpkg -i 処理の完了後に出てくる説明をもとに適宜弄ってください。

  • ターミナル上のコピペ方法
    文字選択 → 右クリックでコピー
    貼り付けも 右クリックです ( ややこしい!w )

5. cuDNN の動作確認

https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#verify

例のごとく一行ずつ実行してください

cp -r /usr/src/cudnn_samples_v8 .
cd cudnn_samples_v8/RNN
make clean && make
./RNN

↑ これで露骨にエラーっぽいの出てこなければOKかと

以下、確認後のお片付け ( 確認起動用にコピーしてきたファイル消すだけなので、必須ではない )

cd ~
rm -r cudnn_samples_v8

注 : Ubuntu 自体にグラフィックドライバは不要

「Ubuntu上でグラボを使うのだから、Ubuntu内にも nVidia 製品用のグラフィックドライバーを入れるのだろうか」
とふんわり思ったのですが、公式に以下の説明がありました ( 日本語翻訳後 )

https://docs.nvidia.com/cuda/wsl-user-guide/index.html#cuda-support-for-wsl-2

Windows NVIDIA GPU ドライバーがシステムにインストールされると、WSL 2 内で CUDA が使用可能になります。
Windows ホストにインストールされた CUDA ドライバーは、WSL 2 内で libcuda.so としてスタブ化されるため、
ユーザーは NVIDIA GPU Linux ドライバーを WSL 2 内にインストールしないでください。
デフォルトの CUDA Toolkit にはドライバーがパッケージ化されており、
WSL 2 NVIDIA ドライバーをデフォルトのインストールで簡単に上書きできるため、
ここでは非常に注意する必要があります。

WLS2 + Ubuntu の Windows 環境なら不要(むしろ入れないで?)との事。

他にも、グラボハードウェア系?の情報を見る各種コマンドの応答が、
無反応だったり グラボ認識してなさそうな結果となりますが、これも仕様なのかなと思います。

lspci
lshw -C display

🙏 参考記事

Qiita @seichi25 - windows10,WSL2でESPNetの環境構築【音声合成】

Qiita @cacaoMath - WSL2で libcuda.so: cannot open shared object fileになる