(2022年2月1日)CUDA-Tool-Kitに同梱されるNVIDIAドライバが更新され、HDMIのバグで画面が真っ黒になる問題が解消されていることが確認できたので、runファイルを使ってNVIDIAドライバとCUDAツールキットを個別にインストールする方法は本ページ最下部の「参考:2022年12月時点のNVIDIAドライバとCUDA-Tool-Kitインストール方法」に移動しました。
NVIDIAのグラフィックボードを搭載したPCで機械学習環境を立ち上げる方法としてWindows PCのWSL2仮想環境にUbuntuをインストールする方法があります。
WSL2は以前より使いやすくなってきていますが、ゲームコントローラなど外部に接続した機器との通信等がうまくいかないことがあります。
その点、仮想環境ではなくPCに直接Ubuntuをインストールするとそのような問題は解消されます。
本記事では、NVIDIAのグラフィックボードを搭載したPCにUbuntu 22.04LTSをインストールして、TensorflowとPyTorchでMNISTの動作確認をするまでの方法を紹介します。
機械学習用に自作PCを組む場合のパーツ選びについては以下の記事も参考にしてください。
Ubuntuインストール後の機械学習環境構築の手順を以下の動画に収めていますので、よろしければ参考にしてください。
使用環境
自作PCを使用しましたが、NVIDIAのGPUを搭載したPCであれば同様に実行できます。
項目 | 内容 |
---|---|
マザーボード | Z690 UD DDR4 |
CPU | Intel Core i9 12900KF |
GPU | NVIDIA GeForce RTX 3090 |
NVIDIAドライバ | 525.60.11 |
CUDAバージョン | 11.8 |
CuDNNバージョン | 8.7.0.84 |
Anacondaインストーラ | Anaconda3-2022.10-Linux-x86_64.sh |
Tensorflow | 2.11.0 |
PyTorch | 1.13.0+cu117 |
Ubuntuインストールメディア作成
Ubuntu 22.04 LTSのインストールメディアを作成するには、以下のどちらかからISOイメージを入手します。
WindowsならRufus、MacならbalenaEtcherでISOイメージをUSBメモリに書き込むことができます。
Ubuntu 22.04LTSのインストールメディアは12GB以上が推奨されているので、16GBのUSBメモリを使用しました。
以下の動画にWindows PCでUbuntuのインストールメディアを作成する手順を収めていますので、よろしければご覧ください。
以下は、MacでUbuntuのインストールメディアを作成する手順です。
Ubuntuインストール
本章のUbuntuインストールは、可能なら有線LANをつないだ状態で実行することをおすすめします。
前章で作成したUbuntuのインストールメディアをUSB端子に差し込み、電源ボタンを押した直後にDelキーを連打してBIOSを起動し、USBからの起動優先順位を上げておきます。
BIOSの操作は機種によって異なりますが、多くの場合、下図のようにBootを開くと起動優先順位を設定できます。
Save & ExitからBIOSを終了し、再起動します。
下図のようにUbuntuの起動選択画面が出るので、一番上の「Try or Install Ubuntu」がハイライトされた状態でEnterを押します。
以下の画面で「Ubuntuをインストール」を押します。
キーボードを選択して「続ける」を押します。
「グラフィックスとWi-Fi〜」にチェックを入れて「続ける」を押します。
下図は、一度UbuntuをインストールしたSSDを使った際の表示例になります。
まっさらなSSDだと一番上が通常の新規インストールになるはずなので、それを選択します。
「それ以外」は、WindowsとUbuntuのデュアルブートにしたい場合や、内蔵ドライブ以外にUbuntuをインストールしたい場合の選択肢になります。
「インストール」を押して先に進みます。
下図の画面で地域を選択し、「続ける」を押します。
ユーザ名、PC名、パスワードを設定し、「続ける」を押します。
インストールが完了すると、下図の画面になるので、「今すぐ再起動する」を押します。
下図のようにインストールメディアを抜いてEnterを押すよう指示されるので従います。
この画面は機種によって異なります。
再起動したらUbuntuのログイン画面が立ち上がるので、設定したユーザ名、パスワードでログインします。
無線LANドライバインストール
無線LANを使用せず、有線LANを常に使用する方は、本章の内容は不要なので、次の章に進んでください。
Firefoxブラウザを起動して、Googleなどと打ち込み、Googleに接続できる場合は、自動で無線LANドライバがインストールされているので、次の章に進んでください。
無線LANドライバを自力でインストールする必要がある方は、以下の記事を参考にしてください。
NVIDIAドライバ・CUDA-Tool-Kitのインストール
CUDA-Tool-Kitのダウンロード
こちらのサイトから下図のように使用する機器、バージョン等を設定すると、画面下の方にコマンドが表示されます。
コマンドを以下にも記載しますが、内容は時が経つと更新されるので、上記サイトから最新のコマンドを取得してください。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt-get update sudo apt-get -y install cuda
CUDA-Tool-KitにはNVIDIAドライバが同梱されており、一緒にインストールされます。
CUDA関連ツールの動作確認
nvidia-smiを実行します。
nvidia-smi
nvidia-smiの右上に表示されるCUDAバージョンは、ドライバに関連付けられているバージョンが表示されているだけで、あまり意味はないそうです。
CUDAのコンパイラnvccで、実際にインストールしたCUDAバージョンを確認できます。
nvcc --version
CuDNNインストール
CuDNNのインストーラをダウンロードするにはNVIDIAのアカウントが必要ですので、ここから登録してください。
こちらのサイトからライセンス承諾のチェックを入れ、CUDA 11.xの中からLocal Installer for Ubuntu22.04 x86_64 (Deb)を選択してダウンロードします。
mv ~/ダウンロード/cudnn-local-repo-ubuntu2204-8.7.0.84_1.0-1_amd64.deb . sudo dpkg -i cudnn-local-repo-ubuntu2204-8.7.0.84_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
上記でlibcudnn8-samples
をインストールするとCuDNNのサンプルプログラムが/usr/src
にダウンロードされるので、動作確認に使用します。
cp -r /usr/src/cudnn_samples_v8 . cd cudnn_samples_v8/RNN make ./RNN cd ../..
エラー無く実行できれば成功です。
Anacondaインストール
Anacondaのサイトの下記リンクからLinux 64-Bit用インストールスクリプトをダウンロードします。
インストール用スクリプトを実行します。
bash ~/ダウンロード/Anaconda3-2022.10-Linux-x86_64.sh
Anacondaインストーラが~/.bashrcに設定を書き足すので、sourceして有効にします。(次回以降はターミナル立ち上げると~/.bashrcの設定が有効になるので、sourceする必要はありません)
source ~/.bashrc
これで、コマンドプロンプト(コマンド入力部の左側の部分)に(base)と表示されるようになります。
Anaconda環境を最新の状態にします。
conda update conda conda update --all
Tensorflow
Anacondaをインストールするとcondaコマンドが使えるようになるので、Tensorflow用の仮想環境をpython 3.9でtfとして作成し、アクティベートします。
conda create -n tf python=3.9 conda activate tf
TensorflowとJupyter Notebookをインストールします。
pip install -U pip pip install tensorflow pip install notebook
サンプルプログラムをダウンロードします。
git clone https://github.com/tak6uch1/wsl2_pytorch_tf_gpu.git cd wsl2_pytorch_tf_gpu
GPUが正しく認識できているか確認するため以下のコマンドを実行します。
python check_gpu.py
以下のようにdevice_type: “GPU”が表示されて、グラフックボードの名称が表示されれば、正しくGPUを認識できています。
((( 省略 ))) 2022-09-04 14:08:54.978476: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1532] Created device /device:GPU:0 with 20143 MB memory: -> device: 0, name: NVIDIA GeForce RTX 3090, pci bus id: 0000:01:00.0, compute capability: 8.6 [name: "/device:CPU:0" device_type: "CPU" memory_limit: 268435456 locality { } incarnation: 15858451040075004051 xla_global_id: -1 , name: "/device:GPU:0" device_type: "GPU" memory_limit: 21122318336 locality { bus_id: 1 links { } } incarnation: 7473896646874375007 physical_device_desc: "device: 0, name: NVIDIA GeForce RTX 3090, pci bus id: 0000:01:00.0, compute capability: 8.6" xla_global_id: 416903419 ]
Jupyter Notebookを起動します。
jupyter notebook
ここでFirefoxの新しいタブが開いて「ファイルへのアクセスが拒否されました」と表示される場合、ターミナルに表示される下記の部分をブラウザのアドレス入力部分に貼り付け、またはCtrl+クリックで下記URLにアクセスします。
以下のようにJupyter Notebookが立ち上がったら、New→Python 3からPython3の入力モードに移行します。
以下を入力し、Shift+Enterで実行します。
%%time run -i mnist_cnn.py
以下のように表示されれば成功です。
PyTorch
Python 3.9の仮想環境torchを作ってアクティベートします。
conda deactivate conda create -n torch python=3.9 conda activate torch
PyTorchのGPU環境とJupyter Notebookをインストールします。
上記PyTorchのインストールコマンドはPyTorchのサイトから下図のように設定して表示されるコマンドを使用します。
下記の2行目は、上記で表示されたコマンドを貼り付けたものです。
pip install -U pip pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116 pip install notebook
バージョンが上がると変わると思いますので、最新のコマンドを使うことをおすすめします。
PyTorchのバージョンを確認します。
python check_pytorch.py
以下のように表示されれば成功です。
1.13.0+cu117 True tensor([[0.9790, 0.8275, 0.5433], [0.3195, 0.2094, 0.6533], [0.9534, 0.9820, 0.2672], [0.9472, 0.0067, 0.0115], [0.2973, 0.2317, 0.7180]])
以下のコマンドでPyTorch用MNISTがエラー無く実行できれば成功です。
python mnist_cnn_pytorch.py
上記を実行中に別のターミナルで以下のコマンドを実行することでGPUの使用状況を確認できます。
nvidia-smi -l
止める場合はCtrl+Cを押します。
トラブルシューティング
CUDAツールキットインストール後に画面が真っ黒
2022年12月4日時点でdebに同梱される520から始まるバージョンのドライバ(515もNG)では、HDMI出力にバグがあるようで、再起動後に画面は真っ黒で何もできない状態になりました。※
※2023年1月でこの問題は解消済みです。
「参考:2022年12月時点のNVIDIAドライバとCUDA-Tool-Kitインストール方法」に記載のとおり、runファイルを使って、525から始まるバージョンのドライバをまずインストールし、CUDA 11.8ツールキットをドライバ無しでインストールすることで解決できました。
CUDAのインストールでエラー
CUDAをインストールしようとして「以下のパッケージには満たせない依存関係があります」というエラーが出た場合、以下のように実行することで解決しました。
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo apt-get -y install cuda
CuDNNリポジトリでGPGエラー
sudo apt update実行時に以下のようなエラーが出る場合の対処方法を紹介します。
エラー:1 file:/var/cudnn-local-repo-ubuntu2204-8.5.0.96 InRelease 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 247F95647ED72349 ・・・ W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: file:/var/cudnn-local-repo-ubuntu2204-8.5.0.96 InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 247F95647ED72349 W: file:/var/cudnn-local-repo-ubuntu2204-8.5.0.96/InRelease の取得に失敗しました 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 247F95647ED72349
「CuDNNインストール」の章において、debファイルのダウンロードとsudo dpkg -i
〜のコマンドは実行したものの、GPGキーのコピーをしていない場合にこのエラーが出ます。
エラーを解消するには、CuDNNのGPGキーを所定の場所に格納する必要があります。
以下のコマンドで/usr/share/keyrings以下に存在するファイルを確認すると、cudnnから始まるファイルが見つからないと思います。(cudaから始まるファイルはあると思います)
ls -l /usr/share/keyrings
CuDNNのインストール時、dpkgコマンド実行後に以下を実行することでCuDNNのGPGキーを使用できるようになります。
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
再度、上記のlsコマンドを実行してGPGキーを確認すると、以下のようにcudnnから始まるファイルが見つかると思います。(下記の2行目、1行目はCUDA用)
-rw-r--r-- 1 root root 1134 4月 22 18:07 cuda-archive-keyring.gpg -rw-r--r-- 1 root root 1141 9月 11 06:24 cudnn-local-7ED72349-keyring.gpg
以下のアップデートコマンドを実行してエラーが解消されることを確認してください。
sudo apt update
システムプログラムの問題
各種環境構築の際に問題が発生すると、問題解消後も「システムプログラムの問題が見つかりました。」のダイアログが表示されることがあるようです。
以下を実行することでダイアログを出なくすることができました。
sudo rm /var/crash/* sudo sed -i 's/enabled=1/enabled=0/g' /etc/default/apport
まとめ
NVIDIAのグラフィックボードを搭載したPCにUbuntu 22.04 LTSをインストールして、GPU使用のTensorflowとPyTorch機械学習環境を構築する方法を紹介しました。
2022年12月4日現在、CUDA-Tool-Kitに同梱されている520から始まるバージョンのNVIDIAドライバを使用すると黒い画面になる問題があり、別途525から始まるバージョンのNVIDIAドライバを個別にインストールすることで回避する方法を紹介していますが、今後のバージョンで問題が改善されれば、またdebを利用したネットワークインストールが可能になると思います。
他のサイトでもUbuntuのインストール方法が紹介されていますが、内容が古く、そのままでは正しく実行できないものもありますので、本記事がこれから機械学習用にLinuxマシンを立ち上げたいと思っている方の参考になれば幸いです。
Ubuntuもかなり使いやすく進化してきたので、そろそろ、メインPCをUbuntuにしても良いかもしれないと考えています。
動画編集など、普段はMacを使用していましたが、Ubuntuに移行できそうと考えているので、今後も機械学習に限らず、Ubuntuを普段使いするための情報を発信していきます。
ものづくりに興味があり、いろいろ触り始めたらLinuxの知識が必要になって困っているという方向けに以下のページを作成しましたので、よろしければ参考にしてください。
参考:2022年12月時点のNVIDIAドライバとCUDA-Tool-Kitインストール方法
本章の内容は古い内容であり、実行する必要はありません。
以下の動画は本章の内容を実践した際のものです。
Nouveauの無効化
まず、nouveauを無効化する設定を行います。
以下のようにviエディタでnouveauの設定ファイルを新規作成します。
sudo vi /etc/modprobe.d/blacklist-nouveau.conf
blacklist-nouveau.conf
ファイルに以下の2行を書きます。
blacklist nouveau options nouveau modeset=0
保存したら以下を実行します。
sudo update-initramfs -u
Linuxカーネルヘッダのインストール
Linuxカーネルヘッダをインストールします。
sudo apt update sudo apt install linux-headers-$(uname -r)
何もインストールされない場合は、すでにインストールされているためであり、問題ありません。
各種ライブラリのインストール
必要なライブラリをインストールします。
sudo apt install build-essential dkms git pkg-config libglvnd-dev
万が一、画面が真っ黒になって何もできなくなった際に、別のPCからSSHログインできるようにopenssh-serverとnet-toolsをインストールしておきます。
sudo apt install openssh-server net-tools
NVIDIAドライバのダウンロード
以降の作業をするためのディレクトリを作成し、そこに移動します。
私は以下のようにしましたが、任意のディレクトリで実行可能です。
mkdir -p work/cuda_driver cd work/cuda_driver
こちらのサイトから下図のように使用しているグラフィックボードの情報を記入し、ドライバのrunファイルをダウンロードします。
ダウンロードしたrunファイルを作業ディレクトリに移動します。
mv ~/ダウンロード/NVIDIA-Linux-x86_64-525.60.11.run .
CUDA-Tool-Kitのダウンロード
こちらのサイトから下図のように使用する機器、バージョン等を設定すると、画面下の方にコマンドが表示されます。
ここでは、1行目のwgetコマンド(ファイルのダウンロード)のみ実行しておきます。
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
時が経つと上記コマンドはバージョンが上がって変わっていくと思いますので、NVIDIAのサイトに従って最新のコマンドを使用するのが良いでしょう。
CUIモードへ変更
上記でダウンロードしたドライバのrunファイルを使ってインストールするには、Xサーバを停止した状態にする(CUIモードにする)必要があります。
以下を実行すると、graphical.targetと表示され、GUIを使用するモードであることがわかります。
sudo systemctl get-default
以下のコマンドでCUIモードに変更します。
sudo systemctl set-default multi-user.target
再起動します。
下図のような黒い画面のみのコマンド入力しかできないモードになりますが、ビックリしないでください。
ユーザ名とパスワードを入力してログインすると、通常のターミナルと同様に使えます。
NVIDIAドライバのインストール
上記で作成した作業ディレクトリに移動し、NVIDIAドライバをインストールします。
cd work/cuda_driver sudo bash NVIDIA-Linux-x86_64-525.60.11.run
下の画面では左の「Continue Installation」を選択します。
32-bitライブラリは不要なので「No」を選択します。
DKMSビルドの質問は「Yes」を選択します。
nvidia-xconfigの質問は「Yes」を選択します。
再起動します。
sudo reboot
CUDA-Tool-Kit
再度ログインして、次はCUDA-Tool-Kitをインストールします。
cd work/cuda_driver sudo bash cuda_11.8.0_520.61.05_linux.run
下の画面でDriverのチェックをスペースキーを押して外し、Installを選択してEnterを押します。
Driverのチェックが入ったままにしておくと520番台のNVIDIAドライバがインストールされて、再起動後に黒い画面になり、何もできなくなってしまいます。
.bashrc
を編集するのでvi
エディタで開きます。
vi ~/.bashrc
.bashrc
の末尾に以下の2行を追記します。
export PATH=/usr/local/cuda-11.8/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64
IPアドレスを確認して再起動
これでインストールと環境変数設定は完了ですが、再起動後に画面が真っ黒で操作できなくなった場合の予防策として、IPアドレスを確認しておきます。
ifconfig
ここでinet 192.168.xxx.xxxなどと表示されたものがIPアドレスですので、メモしておきます。
GUIモードに戻して再起動します。
sudo systemctl set-default graphical.target sudo reboot
書籍紹介
実践して楽しむことを重視していて、充実のサンプルコードで画像認識やテキスト分析、GAN生成といったAI応用をGoogle Colab環境下で体験できます。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
この本は、機械学習の仕組みを学ぶのにとても良い本だと思います。
Tensorflow/Kerasなどの既存プラットフォームを使うのではなく、基本的な仕組みを丁寧に説明し、かんたんなPythonコードで実装していく手順を紹介してくれます。
機械学習のコードがどのような処理をしているのか、想像できるようになります。
新しいLinuxの教科書
Linuxコマンドラインの使い方やシェルスクリプトの書き方、ファイルバージョン管理などの説明があり、これからLinuxで開発を始めたい方におすすめの入門書です。
参考文献
- CUDA TOOLKIT DOCUMENTATION(https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html)
- NVIDIA CUDA Installation Guide for Linux(https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html)
- “Could not load dynamic library ‘libcudnn.so.8′” when running tensorflow on ubuntu 20.04(https://stackoverflow.com/questions/66977227/could-not-load-dynamic-library-libcudnn-so-8-when-running-tensorflow-on-ubun)
- [U] 備忘録〜Ubuntu起動時に「システムプログラムの問題が見つかりました」のエラーが出る場合の対処方法(https://office-unite.com/2020/07/measure-for-system-program-problem-on-ubuntu-bootup/)
- 機械学習用 自作PC パーツ選び【初心者向け】(https://take6shin-tech-diary.com/pc-parts/)
- WifiDocs/WirelessCardsSupported(https://help.ubuntu.com/community/WifiDocs/WirelessCardsSupported)
- Ubuntu LinuxのWi-Fi接続で困っている方へ(https://take6shin-tech-diary.com/ubuntu-wifi/)