📚

ECSでGPUを利用するときはNVIDIA_VISIBLE_DEVICESを指定できない

2023/08/24に公開

環境変数 NVIDIA_VISIBLE_DEVICES

nvidia-container-runtimeにおいて、利用するGPUを指定するために環境変数 NVIDIA_VISIBLE_DEVICES を指定する必要がある。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/user-guide.html#gpu-enumeration

ECSにおけるGPU指定

ECSでは、NVIDIA_VISIBLE_DEVICESの設定は自動で行われる。これ以外の環境変数のみ自分で設定する必要がある。

Amazon ECS は、NVIDIA_VISIBLE_DEVICES環境変数の値を Amazon ECS がコンテナに割り当てる GPU デバイス ID のリストに設定します。Amazon ECS は、これら以外の必須環境変数の設定は行いません。

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs-gpu.html

自分で NVIDIA_VISIBLE_DEVICES を指定する

タスク定義の登録において、resourceRequirementsにてGPUを要求している場合は NVIDIA_VISIBLE_DEVICES を指定するとクライアントエラーになる。

$ cat taskdef.json
{
  "family": "sample-ecs",
  "containerDefinitions": [
    {
      "name": "sample-ecs",
      "image": "nvidia/cuda:11.0.3-base",
      "essential": true,
      "resourceRequirements": [
        {
          "type": "GPU",
          "value": "1"
        }
      ],
      "cpu": 100,
      "memory": 80,
      "environment": [
        {
          "name": "NVIDIA_VISIBLE_DEVICES",
          "value": "all"
        }
      ]
    }
  ]
}

$ aws ecs register-task-definition --cli-input-json file://taskdef.json

An error occurred (ClientException) when calling the RegisterTaskDefinition operation: A container with GPU resource requirements cannot specify 'NVIDIA_VISIBLE_DEVICES' as an environment variable since this environment variable is reserved to be used in GPU workflow.

なので、自分で NVIDIA_VISIBLE_DEVICES を指定することはできない。

Discussion