使用 Docker Compose 啟用 GPU 訪問
目錄
如果 Docker 主機包含此類裝置並且 Docker Daemon 進行了相應設定,Compose 服務可以定義 GPU 裝置預留。為此,請確保您已安裝 先決條件(如果尚未安裝)。
以下部分中的示例專門側重於使用 Docker Compose 為服務容器提供對 GPU 裝置的訪問。您可以使用 docker-compose
或 docker compose
命令。有關更多資訊,請參閱 遷移到 Compose V2。
為服務容器啟用 GPU 訪問
在 compose.yml
檔案中使用 Compose 部署規範中的 device 屬性引用 GPU,並在需要這些 GPU 的服務中使用它。
這提供了對 GPU 預留的更精細的控制,因為可以為以下裝置屬性設定自定義值
capabilities
。此值指定為字串列表(例如capabilities: [gpu]
)。您必須在 Compose 檔案中設定此欄位。否則,它會在服務部署時返回錯誤。count
。此值指定為整數或值all
,表示應保留的 GPU 裝置數量(前提是主機包含該數量的 GPU)。如果count
設定為all
或未指定,預設情況下會使用主機上可用的所有 GPU。device_ids
。此值指定為字串列表,表示主機的 GPU 裝置 ID。您可以在主機上nvidia-smi
的輸出中找到裝置 ID。如果沒有設定device_ids
,預設情況下會使用主機上可用的所有 GPU。driver
。此值指定為字串,例如driver: 'nvidia'
options
。表示特定於驅動程式的選項的鍵值對。
重要
您必須設定
capabilities
欄位。否則,它會在服務部署時返回錯誤。
count
和device_ids
是相互排斥的。您一次只能定義一個欄位。
有關這些屬性的更多資訊,請參閱 Compose 部署規範。
使用 1 個 GPU 裝置執行服務的 Compose 檔案示例
services:
test:
image: nvidia/cuda:12.3.1-base-ubuntu20.04
command: nvidia-smi
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
使用 Docker Compose 執行
$ docker compose up
Creating network "gpu_default" with the default driver
Creating gpu_test_1 ... done
Attaching to gpu_test_1
test_1 | +-----------------------------------------------------------------------------+
test_1 | | NVIDIA-SMI 450.80.02 Driver Version: 450.80.02 CUDA Version: 11.1 |
test_1 | |-------------------------------+----------------------+----------------------+
test_1 | | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
test_1 | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
test_1 | | | | MIG M. |
test_1 | |===============================+======================+======================|
test_1 | | 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
test_1 | | N/A 23C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
test_1 | | | | N/A |
test_1 | +-------------------------------+----------------------+----------------------+
test_1 |
test_1 | +-----------------------------------------------------------------------------+
test_1 | | Processes: |
test_1 | | GPU GI CI PID Type Process name GPU Memory |
test_1 | | ID ID Usage |
test_1 | |=============================================================================|
test_1 | | No running processes found |
test_1 | +-----------------------------------------------------------------------------+
gpu_test_1 exited with code 0
在託管多個 GPU 的機器上,可以設定 device_ids
欄位以定位特定的 GPU 裝置,並且可以使用 count
來限制分配給服務容器的 GPU 裝置數量。
您可以在每個服務定義中使用 count
或 device_ids
。如果您嘗試組合兩者,指定無效的裝置 ID 或使用大於系統中 GPU 數量的值進行計數,則會返回錯誤。
$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02 Driver Version: 450.80.02 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:00:1B.0 Off | 0 |
| N/A 72C P8 12W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 Tesla T4 On | 00000000:00:1C.0 Off | 0 |
| N/A 67C P8 11W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 2 Tesla T4 On | 00000000:00:1D.0 Off | 0 |
| N/A 74C P8 12W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 3 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| N/A 62C P8 11W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
訪問特定裝置
要僅允許訪問 GPU-0 和 GPU-3 裝置
services:
test:
image: tensorflow/tensorflow:latest-gpu
command: python -c "import tensorflow as tf;tf.test.gpu_device_name()"
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0', '3']
capabilities: [gpu]