Amazon ECS で NVIDIA GPU を使用するための AMI 作成方法


以前の記事(Docker コンテナで NVIDIA GPU によるハードウェアエンコードを動かす)でビルドしたコンテナを、Amazon ECS や AWS Batch などの基盤上で動作させるためには、Amazon ECS で通常提供される Amazon ECS-optimized AMI ではなく、GPU ドライバなどをインストールした独自の AMI を用意する必要がある。その作成方法を以下に記した。

AMI 作成手順

  1. Amazon EC2 G3 インスタンスを起動
    • AMI (Amazon Machine Image) は Amazon Linux 2 AMI ami-0a2de1c3b415889d2 を選択
    • インスタンスタイプは G3 インスタンスの中では比較的安価な g3.4xlargeg3s.xlarge を推奨
    • EBS ルートボリュームは 8 GB だと空き容量が不足する可能性があるため注意
  2. 起動した EC2 インスタンスに SSH 接続
  3. 最初にタイムゾーンを設定

    sudo timedatectl set-timezone Asia/Tokyo
    
  4. Docker のインストール
    Amazon Linux 2 では Extras Library を使用することで Docker を簡単にインストールすることができる。

    sudo amazon-linux-extras install docker
    
  5. ecs-init のインストール
    これにより Amazon ECS エージェントがインストールされ、ECS のコンテナ実行環境として使用できるようになる。

    sudo amazon-linux-extras install ecs
    sudo systemctl enable ecs
    
  6. 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
    
  7. 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
    
  8. デフォルトランタイムの設定
    docker コマンドをオプションなしで実行した場合でも上記でインストールした nvidia-docker2 ランタイムが使用されるよう、 /etc/docker/daemon.json を以下のように編集する(ファイルがない場合は新規に作成する)。

    /etc/docker/daemon.json
    {
        "runtimes": {
            "nvidia": {
                "path": "nvidia-container-runtime",
                "runtimeArgs": []
            }
        },
        "default-runtime": "nvidia"
    }
    
  9. シャットダウン

    sudo shutdown -h now
    
  10. EC2 マネジメントコンソールから AMI を作成