🦖

[AWS/EC2/ARM/GPU]G5gインスタンスにCUDAとDockerをインストールする

2022/10/12に公開

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を搭載したインスタンスです。

詳しくはこちらをご覧ください。
https://aws.amazon.com/jp/blogs/news/new-amazon-ec2-g5g-instances-powered-by-aws-graviton2-processors-and-nvidia-t4g-tensor-core-gpus/

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から認識することができました。

参考

https://medium.com/nvidiajapan/nvidia-docker-って今どうなってるの-20-09-版-558fae883f44

https://aws.amazon.com/jp/blogs/news/new-amazon-ec2-g5g-instances-powered-by-aws-graviton2-processors-and-nvidia-t4g-tensor-core-gpus/

🔔採用情報

ジム施設向けDXソリューションGYMDXではエンジニアを積極採用中です。
ジュニア層のエンジニアからリーダー職まで幅広く募集しています。

2022年7月にプレシリーズAラウンドにて資金調達を実施しました。
https://prtimes.jp/main/html/rd/p/000000015.000055404.html

リードエンジニア

https://herp.careers/v1/optfit/GpvSeC-fA995

バックエンドエンジニア

https://herp.careers/v1/optfit/KsDmlZ1VhTmU

脚注
  1. G5gに限らずGPUを持つArm系の計算機なら使えるかなと思いますが未検証です。 ↩︎

  2. 当初Amazon Linux 2にインストールしようと考えましたが、当OSはRHEL 7系であると言われていることと、CUDA ToolkitがArmのアーキテクチャではRHELは8,9用のみがダウンロード可能でしたので断念しました。 ↩︎

  3. 参考 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installation-guide ↩︎

Opt Fit テックブログ

Discussion