以前の記事(Docker コンテナで NVIDIA GPU によるハードウェアエンコードを動かす)でビルドしたコンテナを、Amazon ECS や AWS Batch などの基盤上で動作させるためには、Amazon ECS で通常提供される Amazon ECS-optimized AMI ではなく、GPU ドライバなどをインストールした独自の AMI を用意する必要がある。その作成方法を以下に記した。
AMI 作成手順
-
Amazon EC2 G3 インスタンスを起動
- AMI (Amazon Machine Image) は Amazon Linux 2 AMI
ami-0a2de1c3b415889d2
を選択 - インスタンスタイプは G3 インスタンスの中では比較的安価な
g3.4xlarge
やg3s.xlarge
を推奨 - EBS ルートボリュームは 8 GB だと空き容量が不足する可能性があるため注意
- AMI (Amazon Machine Image) は Amazon Linux 2 AMI
-
起動した EC2 インスタンスに SSH 接続
-
最初にタイムゾーンを設定
sudo timedatectl set-timezone Asia/Tokyo
-
Docker のインストール
Amazon Linux 2 では Extras Library を使用することで Docker を簡単にインストールすることができる。sudo amazon-linux-extras install docker
-
ecs-init
のインストール
これにより Amazon ECS エージェントがインストールされ、ECS のコンテナ実行環境として使用できるようになる。sudo amazon-linux-extras install ecs sudo systemctl enable ecs
-
NVIDIA Graphics Driver のインストール
最新のドライバは https://www.nvidia.com/Download/index.aspx で Tesla M60 を検索することで取得可能。
なお、NVIDIA Graphics Driver の使用には NVIDIA Software License Agreement への同意が必要である。sudo yum install gcc kernel-devel-$(uname -r) wget http://us.download.nvidia.com/tesla/410.72/NVIDIA-Linux-x86_64-410.72.run sudo bash NVIDIA-Linux-x86_64-410.72.run --ui=none --no-questions --accept-license
-
nvidia-docker2
のインストール
nvidia-docker2 は Docker コンテナで NVIDIA GPU を使用するために必要なランタイムである。distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo sudo yum install nvidia-docker2
-
デフォルトランタイムの設定
docker
コマンドをオプションなしで実行した場合でも上記でインストールしたnvidia-docker2
ランタイムが使用されるよう、/etc/docker/daemon.json
を以下のように編集する(ファイルがない場合は新規に作成する)。/etc/docker/daemon.json{ "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } }, "default-runtime": "nvidia" }
-
シャットダウン
sudo shutdown -h now
-
EC2 マネジメントコンソールから AMI を作成