Featured image of post 画像処理用のGPUインスタンスのセットアップ

画像処理用のGPUインスタンスのセットアップ

目次

背景

  • 久しぶりに画像系の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を選ぶべし。

プライベートリポジトリのインスコ。

1
2
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update

Driverを確認するコマンドのインスコ。

1
$ sudo apt install -y ubuntu-derivers-common

推奨ドライバの確認。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:1c.4/0000:02:00.0/0000:03:01.0/0000:05:00.0/0000:06:01.0/0000:07:00.0 ==
modalias : pci:v000010DEd00002504sv00001043sd00008810bc03sc00i00
vendor   : NVIDIA Corporation
model    : GA106 [GeForce RTX 3060 Lite Hash Rate]
driver   : nvidia-driver-515 - distro non-free
driver   : nvidia-driver-525 - distro non-free
driver   : nvidia-driver-510 - distro non-free
driver   : nvidia-driver-515-server - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-525-open - distro non-free recommended
driver   : nvidia-driver-515-open - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

ドライバのインスコと再起動。
(recommendedでも-openになっていないのを入れる)

1
2
$ sudo apt install -y nvidia-driver-525
$ sudo reboot

ドライバーの確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$ nvidia-smi 
Sat Dec 10 00:25:13 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.60.11    Driver Version: 525.60.11    CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:07:00.0 Off |                  N/A |
| 40%   19C    P8     7W / 170W |      1MiB / 12288MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

NOTE: nvidia-smiで表示されるCUDA VersionはCUDAをインストールしていなくても表示されるので注意。

CUDA Toolkitのインストール

次の公式サイトに従う。

CUDA Toolkit 12.6 Update 1 Downloads | NVIDIA Developer

インストール後、次を.bashrcに追加する。

1
2
export PATH=/usr/local/cuda:/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH

CUDA Toolkitに含まれているnvccで確認する。

1
2
3
4
5
6
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Wed_Jun__2_19:15:15_PDT_2021
Cuda compilation tools, release 11.4, V11.4.48
Build cuda_11.4.r11.4/compiler.30033411_0

cuDNNのインストール

次の公式サイトからインストールする。

CUDA Deep Neural Network (cuDNN) | NVIDIA Developer

インストールのリセット

セットアップ中に失敗やエラーが出たら次のコマンドでファイルを消す。

1
2
3
4
5
$ sudo apt --purge remove -y nvidia-*
$ sudo apt --purge remove -y cuda-*
$ sudo apt --purge remove -y libcudnn*
$ sudo apt --purge remove -y cudnn-*
$ sudo apt autoremove -y

(その他)ドライバーやインスタンスの選定方法

例えば、AWSでPyTorch 2.4を使うAIシステムを動かしたいとする。

Previous PyTorch Versions | PyTorchからPyTorch2.4が必要とするCUDAのバージョンをチェックする。

PyTorch Install

この場合は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はそのままあった。

K80

NVIDIA A10Gがなかったので、A10で探した。

A10

つまり、次のマイクロアーキテクチャとなっている。

それをCUDAのCompute CapabilityのMatrixで探す。

Compute Capability (CUDA SDK support vs. Microarchitecture)

ただし、この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から、確認すると次の結果だった。

Support Matrix

つまり、CUDA 12の為には、NVIDIA Driver 520.61.05以降が必要となる。
そのため、GPUドライバーを選択する際は、NVIDIA Driverは520以降をインストールする必要がある。

そして、CUDA Toolkit 12をインストールする為に、公式サイト(CUDA Toolkit 12.4 Downloads | NVIDIA Developer)からOSのバージョンを確認する。

CUDA Toolkit 12.4 Downloads

これにより次が明らかになった。

  • 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が必要だった。

次のコマンドでビルドした。

1
2
3
4
5
6
7
$ sudo apt update
$ sudo apt install -y build-essential cmake git pkg-config libgtk-3-dev \
    libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
    libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \
    gfortran openexr libatlas-base-dev python3-dev python3-numpy \
    libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev \
    libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

コードのDL

1
2
3
$ mkdir ~/opencv_build && cd ~/opencv_build
$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git

バージョンの切り替え(ちょっと時間がかかる)

1
2
3
4
$ cd ~/opencv_build/opencv
$ git checkout 4.6.0
$ cd ~/opencv_build/opencv_contrib
$ git checkout 4.6.0

CMakeの設定

1
2
3
4
5
6
7
8
9
$ cd ~/opencv_build/opencv
$ mkdir build && cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
    -D BUILD_EXAMPLES=ON ..

OpenCVのコンパイル(8コアで指定している)
(コンパイルには1.5hぐらいはかかる)

1
$ make -j8

その後インスコ。

1
$ sudo make install

インストールの確認。

1
$ pkg-config --modversion opencv4

PyTorch

まずは仮想環境を作る。

1
2
$ python3 -m venv .venv
$ source .venv/bin/activate

CUDA 12を使っているがエラーが出たので、CUDA 11.8でインストールした。 Wheelはpytorch installから探した。

1
$ pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

確認。

1
2
3
4
5
Python 3.10.14 | packaged by conda-forge | (main, Mar 20 2024, 12:45:18) [GCC 12.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True

参考文献

Built with Hugo
テーマ StackJimmy によって設計されています。