[AWS/EC2/ARM/GPU]G5gインスタンスにCUDAとDockerをインストールする
Opt Fitエンジニアの@KAZYPinkSaurusです。
AWS EC2のG5gインスタンスは2021年末に使えるようになりました。
当インスタンスArm系のCPUなのですがGPUが使えてかつコストパフォーマンスも良いという噂なので最近触ってみています。
全く同じスペックではないので単純な比較はできませんが、どちらもNVIDIAのGPUが使えてg4dn.xlargeが東京リージョンでオンデマンド時間あたり0.71 USD
に対してg5g.xlargeは0.5669 USD
と言った具合です。
概要
G5gインスタンスにcuda-driversとnvidia-docker2をインストールし、Dockerコンテナからnvidia-smiコマンドが実行できることを確認します。
対象読者
G5gインスタンスにCUDAとDockerをインストールしたい方。[1]
とにかくDockerからGPUを使いたいということであればいくつかAMIが用意されているのでそちらを利用するのが良いでしょう。
例えば以下のようなものがあります。
- NVIDIA GPU-Optimized AMI (ARM64)
- Deep Learning AMI Graviton GPU CUDA 11.4.2 (Ubuntu 20.04) 20211119
- Deep Learning AMI Graviton GPU PyTorch 1.10.0 (Ubuntu 20.04) 20211122
- Deep Learning AMI Graviton GPU TensorFlow 2.7.0 (Ubuntu 20.04) 20211122
上記のAMIのOSはすべてUbuntu 20.04です。
ですのでUbuntu20.4以外のOSで使いたい方や任意のCUDAのバージョンでインストールしたい方にはお役に立つかもしれません。
g5gインスタンスとは
AWS Graviton2プロセッサとNVIDIA T4G Tensor Core GPUを搭載したインスタンスです。
詳しくはこちらをご覧ください。
OS
Ubuntu 22.04[2]
EC2インスタンス
Ubuntu Server 22.04 LTS (HVM), SSD Volume Typeの64 ビット (Arm)を起動します。
インスタンスタイプはg5g.xlargeとします。
インスタンスを確認します。
# GPU
$ lspci | grep -i nvidia
00:1f.0 3D controller: NVIDIA Corporation TU104GL [T4G] (rev a1)
# CPU
$ uname -m
aarch64
CUDA Toolkitをインストール
基本的にはこちらの方法に従うのみですが最後の1行だけ変えています。
適切なプラットフォームを選びましょう。
今回はArm系CPUでOSがUbuntu 22.04なので linux/arm64-sbsa/Native/Ubuntu/22.04
を選んでいます。
こちらの記事によるとcudaではなくcuda-driversをインストールするとキレイにドライバだけが入るのでおすすめだそうです。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/sbsa/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_arm64.deb
sudo dpkg -i cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_arm64.deb
sudo cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-drivers # ポイント
GPUが読み込めるか確認します。
$ nvidia-smi
Sun Oct 9 13:34:04 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.61.05 Driver Version: 520.61.05 CUDA Version: 11.8 |
|-------------------------------+----------------------+----------------------+
| 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 T4G Off | 00000000:00:1F.0 Off | 0 |
| N/A 66C P0 31W / 70W | 2MiB / 15360MiB | 5% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
読み込めました。NVIDIA T4Gと出ています。
nvidia-docker2を入れる
次にDocker環境からGPUが使えるようにdockerとnvidia-docker2をインストールします。[3]
$ curl https://get.docker.com | sh \
&& sudo systemctl --now enable docker
# sudoなしでdockerできるようにする
$ sudo usermod -aG docker $USER
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
# 念の為再起動しておきます。
$ sudo reboot -h now
DockerからGPUを認識できるか確認
$ docker run -it --rm --gpus all nvidia/cuda-arm64:11.4.0-base nvidia-smi
Unable to find image 'nvidia/cuda-arm64:11.4.0-base' locally
11.4.0-base: Pulling from nvidia/cuda-arm64
55c604a74c4b: Pull complete
657fae4b9575: Pull complete
b2cf3c1bfea9: Pull complete
71492f856142: Pull complete
c74b3fce51ac: Pull complete
Digest: sha256:625c8265d0f88d4250d48958113f1184f96db794fbe5d6d5cdd782f9916ec718
Status: Downloaded newer image for nvidia/cuda-arm64:11.4.0-base
Sun Oct 9 13:52:58 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.61.05 Driver Version: 520.61.05 CUDA Version: 11.8 |
|-------------------------------+----------------------+----------------------+
| 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 T4G On | 00000000:00:1F.0 Off | 0 |
| N/A 50C P8 16W / 70W | 2MiB / 15360MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
無事Dockerから認識することができました。
参考
🔔採用情報
ジム施設向けDXソリューションGYMDXではエンジニアを積極採用中です。
ジュニア層のエンジニアからリーダー職まで幅広く募集しています。
2022年7月にプレシリーズAラウンドにて資金調達を実施しました。
リードエンジニア
バックエンドエンジニア
-
G5gに限らずGPUを持つArm系の計算機なら使えるかなと思いますが未検証です。 ↩︎
-
当初Amazon Linux 2にインストールしようと考えましたが、当OSはRHEL 7系であると言われていることと、CUDA ToolkitがArmのアーキテクチャではRHELは8,9用のみがダウンロード可能でしたので断念しました。 ↩︎
-
参考 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installation-guide ↩︎
Discussion