Slide 1

Slide 1 text

ECS で GPU を使う 2020年版 @ohsawa0515 JAWS-UGコンテナ支部 #18 2020/11/20

Slide 2

Slide 2 text

ECS で GPU インスタンス つかってますか?

Slide 3

Slide 3 text

ECS GPU-optimized AMI を使おう ● ECS で GPU を使うのに最適化された AMI ● Amazon Linux 2 ベース ● AWS CLI で 最新の AMI ID を取得できる aws ssm get-parameters \ --names /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended \ --output text --query 'Parameters[].Value[]' | jq -r '.image_id'

Slide 4

Slide 4 text

ECS タスク定義で GPU を指定する { "containerDefinitions": [ { "memory": 80, "essential": true, "name": "gpu", "image": "nvidia/cuda:11.0-base", "resourceRequirements": [ { "type":"GPU", "value": "1" } ], "command": [ "sh", "-c", "nvidia-smi" ], "cpu": 100 } ], "family": "example-ecs-gpu" }

Slide 5

Slide 5 text

GPU 数を指定することの問題点 ● 1つの GPU を複数の ECS タスクで共有することができない ● 例)g4dn.xlarge は GPU 数が 1 なので ECS インスタンス 1 台につき GPU を扱う ECS タスクを 1 つしか配置できない ● GPU を使う ECS タスクを同時に実行できない ○ 例)GPU メトリクス(使用率、メモリ、温度など)を収集、監視するタスク ● docker run --gpus=all を ECS タスク定義に渡すことができない ECS Instance Main task GPU Monitoring task

Slide 6

Slide 6 text

Docker のデフォルトランタイムを変更する ● ECS GPU-optimized AMI から EC2 インスタンスを起動 ● /etc/sysconfig/docker に --default-runtime nvidia を追加 ● AMI を作成 # Additional startup options for the Docker daemon, for example: # OPTIONS="--ip-forward=true --iptables=true" # By default we limit the number of open files per container -OPTIONS="--default-ulimit nofile=1024:4096" +OPTIONS="--default-runtime nvidia --default-ulimit nofile=1024:4096" # How many seconds the sysvinit script waits for the pidfile to appear # when starting the daemon.

Slide 7

Slide 7 text

GPU 使用率に基づいた Auto Scaling がしたい ● GPU メトリクスを CloudWatch に投げる ● https://github.com/ohsawa0515/gpu-cloudwatch-reporting AutoScaling グループ単位 EC2 インスタンス単位

Slide 8

Slide 8 text

ECS Auto Scaling ● CloudWatch アラームを作成、ステップスケーリングでアラーム名を指定 ○ GPU 使用率に基づいてタスク数が増減 ● ECS Capacity Providers でコンテナインスタンスが自動的に増減

Slide 9

Slide 9 text

ご清聴ありがとうございました。