NVIDIA GPU搭載PCにUbuntu 22.04LTSをインストールしてLinux機械学習環境を構築する(Tensorflow/PyTorch)

スポンサーリンク
Ubuntu 22.04 ML Environment

(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
CPUIntel Core i9 12900KF
GPUNVIDIA GeForce RTX 3090
NVIDIAドライバ525.60.11
CUDAバージョン11.8
CuDNNバージョン8.7.0.84
AnacondaインストーラAnaconda3-2022.10-Linux-x86_64.sh
Tensorflow2.11.0
PyTorch1.13.0+cu117

Ubuntuインストールメディア作成

Ubuntu 22.04 LTSのインストールメディアを作成するには、以下のどちらかからISOイメージを入手します。

  1. オリジナルISOイメージ
  2. 日本語Remix版ISOイメージ

オリジナルISOイメージ版を使用した場合でも、日本語化はできるので、私は1をおすすめします。

そして、インストール時は英語のまま進め、Ubuntu起動後に日本語化するのがおすすめです。

インストール時に日本語にすると、ホームディレクトリの「ドキュメント」や「ダウンロード」ディレクトリなどの名称が日本語になっていまい、使いづらくなるためです。

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を開くと起動優先順位を設定できます。

BIOS Boot

Save & ExitからBIOSを終了し、再起動します。

下図のようにUbuntuの起動選択画面が出るので、一番上の「Try or Install Ubuntu」がハイライトされた状態でEnterを押します。

Ubuntu Selector

以下の画面で「Ubuntuをインストール」を押します。

Install Ubuntu

キーボードを選択して「続ける」を押します。

Select Keyboard

「グラフィックスとWi-Fi〜」にチェックを入れて「続ける」を押します。

Updates and Other Software

下図は、一度UbuntuをインストールしたSSDを使った際の表示例になります。

まっさらなSSDだと一番上が通常の新規インストールになるはずなので、それを選択します。

「それ以外」は、WindowsとUbuntuのデュアルブートにしたい場合や、内蔵ドライブ以外にUbuntuをインストールしたい場合の選択肢になります。

Installation Kind

「インストール」を押して先に進みます。

下図の画面で地域を選択し、「続ける」を押します。

Location

ユーザ名、PC名、パスワードを設定し、「続ける」を押します。

User Infomation

インストールが完了すると、下図の画面になるので、「今すぐ再起動する」を押します。

Reboot

下図のようにインストールメディアを抜いてEnterを押すよう指示されるので従います。

この画面は機種によって異なります。

Remove Install Media

再起動したら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にアクセスします。

http://127.0.0.1:8888/?token=XXXXXXXXXXXXX

以下のようにJupyter Notebookが立ち上がったら、New→Python 3からPython3の入力モードに移行します。

Jupyter initial

以下を入力し、Shift+Enterで実行します。

%%time
run -i mnist_cnn.py

以下のように表示されれば成功です。

Tensorflow MNIST

PyTorch

Python 3.9の仮想環境torchを作ってアクティベートします。

conda deactivate
conda create -n torch python=3.9
conda activate torch

PyTorchのGPU環境とJupyter Notebookをインストールします。

上記PyTorchのインストールコマンドはPyTorchのサイトから下図のように設定して表示されるコマンドを使用します。

PyTorch Install

下記の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インストール方法

本章の内容は古い内容であり、実行する必要はありません。

2022年12月時点では、CUDA-Tool-Kitダウンロードのサイトからdebファイルを選択して、ネットワーク経由でインストールすると、CUDA-Tool-Kitに同梱されるNVIDIAドライバとしてHDMIのバグを含むバージョンがインストールされ、HDMI出力すると黒い画面になって何もできなくなるため、runファイルを使用して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

runファイルの実行はCUIモードで実行する必要があるため、2行目はここでは実行しません。

時が経つと上記コマンドはバージョンが上がって変わっていくと思いますので、NVIDIAのサイトに従って最新のコマンドを使用するのが良いでしょう。

CUIモードへ変更

上記でダウンロードしたドライバのrunファイルを使ってインストールするには、Xサーバを停止した状態にする(CUIモードにする)必要があります。

以下を実行すると、graphical.targetと表示され、GUIを使用するモードであることがわかります。

sudo systemctl get-default

以下のコマンドでCUIモードに変更します。

sudo systemctl set-default multi-user.target

再起動します。

下図のような黒い画面のみのコマンド入力しかできないモードになりますが、ビックリしないでください。

CUI login

ユーザ名とパスワードを入力してログインすると、通常のターミナルと同様に使えます。

NVIDIAドライバのインストール

上記で作成した作業ディレクトリに移動し、NVIDIAドライバをインストールします。

cd work/cuda_driver
sudo bash NVIDIA-Linux-x86_64-525.60.11.run

下の画面では左の「Continue Installation」を選択します。

Initial NVIDIA driver installation

32-bitライブラリは不要なので「No」を選択します。

32-bit library

DKMSビルドの質問は「Yes」を選択します。

DKMS build

nvidia-xconfigの質問は「Yes」を選択します。

nvidia-xconfig

再起動します。

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を押します。

CUDA tool kit check boxes

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アドレスですので、メモしておきます。

Ubuntu PCの画面が真っ黒になっても、openssh-serverをインストールしていれば、opensshクライアントツールをインストール済みの他のPCから以下のようにSSHログインできまるので、何らかの不備があった場合に確認や修正が行なえます。

ssh USER-NAME@IP-ADDRESS

USER-NAMEはUbuntu PCのユーザ名、IPアドレスは上記ifconfigで表示されたものを使用します。

GUIモードに戻して再起動します。

sudo systemctl set-default graphical.target
sudo reboot

書籍紹介

人気ブロガーからあげ先生のとにかく楽しいAI自作教室

実践して楽しむことを重視していて、充実のサンプルコードで画像認識やテキスト分析、GAN生成といったAI応用をGoogle Colab環境下で体験できます。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

この本は、機械学習の仕組みを学ぶのにとても良い本だと思います。

Tensorflow/Kerasなどの既存プラットフォームを使うのではなく、基本的な仕組みを丁寧に説明し、かんたんなPythonコードで実装していく手順を紹介してくれます。

機械学習のコードがどのような処理をしているのか、想像できるようになります。

新しいLinuxの教科書
Linuxコマンドラインの使い方やシェルスクリプトの書き方、ファイルバージョン管理などの説明があり、これからLinuxで開発を始めたい方におすすめの入門書です。

参考文献

タイトルとURLをコピーしました