メニュー
AWS Batch
ユーザーガイド

GPU ワークロードの AMI の作成

AWS Batch のコンピューティングリソースで GPU ワークロードを実行するには、基本 AMI として Deep Learning AMI CUDA 9 Amazon Linux バージョンから開始し、これで AWS Batch のジョブを実行できるように設定できます。

この深層学習 AMI は Amazon Linux に基づいているため、ユーザーは ecs-init パッケージをインストールし、これをコンピューティングリソースの AMI として互換させることができます。nvidia-docker RPM は、必要なコンポーネントを NVIDIA ドライバーから適切な場所にコピーし、AWS Batch ジョブの Docker コンテナから、サポートされているインスタンスタイプの GPU にアクセスできるようにします。

注記

関連付けられた GPU のジョブ定義では、ホストパス /var/lib/nvidia-docker/volumes/nvidia_driver/latest/usr/local/nvidia でマウントする特権コンテナを使用する必要があります。詳細については、「GPU 機能のテスト」を参照してください。

AWS Batch の Deep Learning AMI を設定するには

  1. AWS Batch がサポートするリージョンで Deep Learning AMI CUDA 9 Amazon Linux バージョンを使用して GPU インスタンスタイプ (P3 など) を起動します。

  2. SSH を使って インスタンスに接続します。詳細については、「SSH を使用した Linux インスタンスへの接続」 (Linux インスタンス用 Amazon EC2 ユーザーガイド) を参照してください。

  3. 任意のテキストエディタを使用して、configure-gpu.sh というファイルを以下の内容で作成します。

    #!/bin/bash # Install ecs-init, start docker, and install nvidia-docker sudo yum install -y ecs-init sudo service docker start wget https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm sudo rpm -ivh --nodeps nvidia-docker-1.0.1-1.x86_64.rpm # Validate installation rpm -ql nvidia-docker rm nvidia-docker-1.0.1-1.x86_64.rpm # Make sure the NVIDIA kernel modules and driver files are bootstraped # Otherwise running a GPU job inside a container will fail with "cuda: unknown exception" echo '#!/bin/bash' | sudo tee /var/lib/cloud/scripts/per-boot/00_nvidia-modprobe > /dev/null echo 'nvidia-modprobe -u -c=0' | sudo tee --append /var/lib/cloud/scripts/per-boot/00_nvidia-modprobe > /dev/null sudo chmod +x /var/lib/cloud/scripts/per-boot/00_nvidia-modprobe sudo /var/lib/cloud/scripts/per-boot/00_nvidia-modprobe # Start the nvidia-docker-plugin and run a container with # nvidia-docker (retry up to 4 times if it fails initially) sudo -b nohup nvidia-docker-plugin > /tmp/nvidia-docker.log sudo docker pull nvidia/cuda:9.0-cudnn7-devel COMMAND="sudo nvidia-docker run nvidia/cuda:9.0-cudnn7-devel nvidia-smi" for i in {1..5}; do $COMMAND && break || sleep 15; done # Create symlink to latest nvidia-driver version nvidia_base=/var/lib/nvidia-docker/volumes/nvidia_driver sudo ln -s $nvidia_base/$(ls $nvidia_base | sort -n | tail -1) $nvidia_base/latest
  4. スクリプトを実行します。

    bash ./configure-gpu.sh
  5. 次のコマンドを使用し、Docker コンテナを実行してインストールされているドライバーにアクセスできることを確認します。

    sudo docker run --privileged -v /var/lib/nvidia-docker/volumes/nvidia_driver/latest:/usr/local/nvidia nvidia/cuda:9.0-cudnn7-devel nvidia-smi

    次のような出力が表示されます。

    +-----------------------------------------------------------------------------+ | NVIDIA-SMI 384.81 Driver Version: 384.81 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... Off | 00000000:00:17.0 Off | 0 | | N/A 43C P0 42W / 300W | 10MiB / 16152MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
  6. インスタンスからすべての Docker コンテナとイメージを削除し、AMI のサイズを減らします。

    1. コンテナを削除します。

      sudo docker rm $(sudo docker ps -aq)
    2. イメージを削除します。

      sudo docker rmi $(sudo docker images -q)
  7. Amazon ECS コンテナエージェントをインスタンスで開始する場合は、AMI を作成する前にインスタンスを停止して永続的なデータチェックポイントを削除する必要があります。これを行わないと、インスタンスは AMI から起動するインスタンスを開始しません。

    1. Amazon ECS コンテナエージェントを停止します。

      sudo stop ecs
    2. 永続的なデータチェックポイントファイルを削除します。デフォルトでは、このファイルは /var/lib/ecs/data/ecs_agent_data.json にあります。ファイルを削除するには、次のコマンドを使用します。

      sudo rm -rf /var/lib/ecs/data/ecs_agent_data.json
  8. 実行中のインスタンスから新しい AMI を作成します。詳細については、「Amazon EBS-Backed Linux AMI の作成」 (Linux インスタンス用 Amazon EC2 ユーザーガイド) を参照してください。