目次
背景
- 久しぶりに画像系のEC2のUbuntuインスタンスのセットアップをする必要があったのでメモ
- 特にCUDA周りの設定には少し手こずったので戒めとして残す
- 具体的には、Ubuntu 24.04 + p2.xlargeインスタンスで詰んだ
- インストールしたのは、OpenCVとPyTorchになる
結論
- GPUインスタンスを使う場合は、クイックスタートのGPUのAMIを使うべき
- 下手にUbuntu + Instance Typeを自前で選択するとgccのバージョン違いなどで詰む
結論として、最終的に、次でセットアップした。
- AMI:
Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.3 (Ubuntu 20.04)
- CUDA: 12.1
- Instance Type: g5.xlarge
- Torch: 2.4l1+cu118
用語
前提知識として、NVIDIAのセットアップ時の用語について説明する。
- NVIDIA Driver
- NVIDIAのGPUを制御するためのソフトウェア
- OSとGPUの間の通信を管理する
- CUDA(Compute Unified Device Architecture)
- NVIDIAが開発した並列コンピューティングプラットフォームおよびプログラミングモデル
- GPUを用いた汎用計算(GPGPU)を可能にする
- CUDA Toolkit
- CUDAを使用して開発するために必要なツールセット
- コンパイラ、ライブラリ、デバッグツールなどが含まれている
- cuDNN(CUDA Deep Neural Network library)
- ディープラーニングのための高度に最適化されたプリミティブを提供するNVIDIAのライブラリ
- SM(Streaming Multiprocessor)
- NVIDIA GPUアーキテクチャの中核となる処理ユニットの事
- sm_86などの表記
- sm_86"のような表記は、NVIDIA CUDAで用いられる特定のGPUアーキテクチャ(Streaming Multiprocessor)を指定するためのもの
- この場合は、Compute Capability 8.6を意味する(CC8.6とも表記される)
CLIツールは次を使う。
nvidia-smi
(NVIDIA System Management Interface)- NVIDIA GPU のモニタリングと管理のためのコマンドラインツール
- NVIDIA Drive パッケージに含まれている
nvcc
(NVIDIA CUDA Compiler)- CUDA C/C++コードをコンパイルするためのコマンドラインツール
- CUDA Toolkit に含まれている
なお、CUDA ToolkitとcuDNNの違いは、GPGPUのためのプラットフォームか、DNNのためのライブラリかの違いである。
ドライバーなどのインストール
GPUドライバーのインスコ(非推奨)
NOTE: GPUドライバーは自前でインストールせずに、プリインストールされたAMIを選ぶべし。
プライベートリポジトリのインスコ。
|
|
Driverを確認するコマンドのインスコ。
|
|
推奨ドライバの確認。
|
|
ドライバのインスコと再起動。
(recommendedでも-open
になっていないのを入れる)
|
|
ドライバーの確認
|
|
NOTE: nvidia-smi
で表示されるCUDA Version
はCUDAをインストールしていなくても表示されるので注意。
CUDA Toolkitのインストール
次の公式サイトに従う。
CUDA Toolkit 12.6 Update 1 Downloads | NVIDIA Developer
インストール後、次を.bashrc
に追加する。
|
|
CUDA Toolkitに含まれているnvcc
で確認する。
|
|
cuDNNのインストール
次の公式サイトからインストールする。
CUDA Deep Neural Network (cuDNN) | NVIDIA Developer
インストールのリセット
セットアップ中に失敗やエラーが出たら次のコマンドでファイルを消す。
|
|
(その他)ドライバーやインスタンスの選定方法
例えば、AWSでPyTorch 2.4を使うAIシステムを動かしたいとする。
Previous PyTorch Versions | PyTorchからPyTorch2.4が必要とするCUDAのバージョンをチェックする。
この場合はCUDA 12.04を使うとする。
次にAWSのEC2のサイトから、AWSのEC2のInstance Typeをチェックする。
例えば、候補として次の2つを上げる。
- p2.xlarge
- NVIDIA K80を積んでいる
- g5.xlarge
- NVIVIA A10Gを積んでいる
スペックは、g5.xlarge gpu type
などでググり、公式サイトをチェックするのが良い。
スペックの違いはTesla T4 vs A10G:どちらが良いですか?が分かりやすい。
CUDAのWikiからCUDA - WikipediaそれぞれのGPUのアーキテクチャと互換バージョンを探す。
それぞれ次となった。
K80はそのままあった。
NVIDIA A10Gがなかったので、A10で探した。
つまり、次のマイクロアーキテクチャとなっている。
- NVIDIA K80
- Micro-architecture: Kepler
- Compute capability (version): 3.7
- NVIDIA A10
- Micro-architecture: Ampere
- Compute capability (version): 8.6
- NVIDIA A10G Specs | TechPowerUp GPU Databaseでも、A10Gは8.6とある。
それをCUDAのCompute CapabilityのMatrixで探す。
ただし、このCompute CapabilityのMatrixは分かりづらいかつ正確には見えないので、次のサイトを推奨する。 Matching CUDA arch and CUDA gencode for various NVIDIA architectures - Arnon Shimoni
その結果、次が言える。
- Kepler 3.7(sm_37)
- CUDA 10.xまで対応している
- Deprecated from CUDA 11, will be dropped in future versions
- Ampere 8.6(sm_86)
- CUDA 11.1以降に対応している
- CUDA 11.1 and later
つまり、必要なインスタンスタイプはg5.xlarge
となる。
また、nvidia driver cuda compatibility support matrix
などとググって、
Support Matrix — NVIDIA cuDNN v9.4.0 documentationから、確認すると次の結果だった。
つまり、CUDA 12の為には、NVIDIA Driver 520.61.05以降が必要となる。
そのため、GPUドライバーを選択する際は、NVIDIA Driverは520以降をインストールする必要がある。
そして、CUDA Toolkit 12をインストールする為に、公式サイト(CUDA Toolkit 12.4 Downloads | NVIDIA Developer)からOSのバージョンを確認する。
これにより次が明らかになった。
- Instance type: g5.xlarge
- OS: Ubuntu 20.04, 22.04
- GPU Driver: 520.61.05以降
- CUDA: 12.4
なお、この時点で最新のUbuntuは24.04だが、CUDA 12.4を使うには、g5.xlargeとubuntu 22.04がベターと分かる。
アプリケーションのインストール
OpenCV
opencvは4.6が必要だった。
次のコマンドでビルドした。
|
|
コードのDL
|
|
バージョンの切り替え(ちょっと時間がかかる)
|
|
CMakeの設定
|
|
OpenCVのコンパイル(8コアで指定している)
(コンパイルには1.5hぐらいはかかる)
|
|
その後インスコ。
|
|
インストールの確認。
|
|
PyTorch
まずは仮想環境を作る。
|
|
CUDA 12を使っているがエラーが出たので、CUDA 11.8でインストールした。 Wheelはpytorch installから探した。
|
|
確認。
|
|
参考文献
- 【注意】ubuntu-drivers devicesでお薦めされたNVIDIA GPUドライバーをインストールしたら事故になります。 #Ubuntu - Qiita
- UbuntuでCUDA,NVIDIAドライバ,cudnnをインストールし,PyTorchでGPU環境を使えるようにするまで #Python - Qiita
- PyTorchとGPU/CUDA周りの環境構築のバージョン解決 #Ubuntu - Qiita
- CUDA Deep Neural Network (cuDNN) | NVIDIA Developer
- CUDA Toolkit 12.6 Update 1 Downloads | NVIDIA Developer
- PyTorch Wheel
- CUDA - Wikipedia
- Tesla T4 vs A10G:どちらが良いですか?
- 推奨 GPU インスタンス - 深層学習 AMI
- Tesla K80 vs A10G:どちらが良いですか?
- Support Matrix — NVIDIA cuDNN v9.4.0 documentation
- NVIDIA A10G Specs | TechPowerUp GPU Databaseでも、A10Gは8.6とある。
- Matching CUDA arch and CUDA gencode for various NVIDIA architectures - Arnon Shimoni
- CUDA Toolkit 12.4 Downloads | NVIDIA Developer