您好,登錄后才能下訂單哦!
本篇內容主要講解“如何用Docker Compose來管理GPU資源”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何用Docker Compose來管理GPU資源”吧!
在面向 AI
開發的大趨勢下,容器化可以將環境無縫遷移,將配置環境的成本無限降低。但是,在容器中配置 CUDA
并運行 TensorFlow
一段時間內確實是個比較麻煩的時候,所以我們這里就介紹和使用它。
Enabling GPU access with Compose
Runtime options with Memory, CPUs, and GPUs
The Compose Specification
The Compose Specification - Deployment support
The Compose Specification - Build support
在 Compose 中使用 GPU 資源
如果我們部署 Docker
服務的的主機上正確安裝并設置了其對應配置,且該主機上恰恰也有對應的 GPU
顯卡,那么就可以在 Compose
中來定義和設置這些 GPU
顯卡了。
# 需要安裝的配置$ apt-get install nvidia-container-runtime
舊版本 <= 19.03
# runtime$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
新版本 >= 19.03
# with --gpus$ docker run -it --rm --gpus all ubuntu nvidia-smi# use device$ docker run -it --rm --gpus \ device=GPU-3a23c669-1f69-c64e-cf85-44e9b07e7a2a \ ubuntu nvidia-smi# specific gpu$ docker run -it --rm --gpus '"device=0,2"' ubuntu nvidia-smi# set nvidia capabilities$ docker run --gpus 'all,capabilities=utility' --rm ubuntu nvidia-smi
對應 Compose
工具的老版本(v2.3
)配置文件來說的話,想要在部署的服務當中使用 GPU
顯卡資源的話,就必須使用 runtime
參數來進行配置才可以。雖然可以作為運行時為容器提供 GPU
的訪問和使用,但是在該模式下并不允許對 GPU
設備的特定屬性進行控制。
services: test: image: nvidia/cuda:10.2-base command: nvidia-smi runtime: nvidia environment: - NVIDIA_VISIBLE_DEVICES=all
在
Compose v1.28.0+
的版本中,使用Compose Specification
的配置文件寫法,并提供了一些可以更細粒度的控制GPU
資源的配置屬性可被使用,因此可以在啟動的時候來精確表達我們的需求。咳咳咳,那這里我們就一起看看吧!
capabilities
- 必須字段
指定需要支持的功能;可以配置多個不同功能;必須配置的字段
man 7 capabilities
deploy: resources: reservations: devices: - capabilities: ["gpu"]
count
指定需要使用的GPU
數量;值為int
類型;與device_ids
字段二選一
deploy: resources: reservations: devices: - capabilities: ["tpu"] count: 2
device_ids
指定使用GPU
設備ID
值;與count
字段二選一
deploy: resources: reservations: devices: - capabilities: ["gpu"] device_ids: ["0", "3"]
deploy: resources: reservations: devices: - capabilities: ["gpu"] device_ids: ["GPU-f123d1c9-26bb-df9b-1c23-4a731f61d8c7"]
driver
指定GPU
設備驅動類型
deploy: resources: reservations: devices: - capabilities: ["nvidia-compute"] driver: nvidia
options
指定驅動程序的特定選項
deploy: resources: reservations: devices: - capabilities: ["gpu"] driver: gpuvendor options: virtualization: false
咳咳咳,看也看了,說也說了,那我們就簡單的編寫一個示例文件,讓啟動的 cuda
容器服務來使用一個 GPU
設備資源,并運行得到如下輸出。
services: test: image: nvidia/cuda:10.2-base command: nvidia-smi deploy: restart_policy: condition: on-failure delay: 5s max_attempts: 3 window: 120s resources: limits: cpus: "0.50" memory: 50M reservations: cpus: "0.25" memory: 20M devices: - driver: nvidia count: 1 capabilities: [gpu, utility] update_config: parallelism: 2 delay: 10s order: stop-first
注意這里,如果設置 count: 2
的話,就會下面的輸出中看到兩塊顯卡設置的信息。如果,我們這里均未設置 count
或 device_ids
字段的話,則默認情況下將主機上所有 GPU
一同使用。
# 前臺直接運行$ docker-compose up Creating network "gpu_default" with the default driver Creating gpu_test_1 ... doneAttaching 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 | | Tesla T4 On | 00000000:00:1E.0 Off | | test_1 | | N/A 23C P8 9W / 70W | MiB / 15109MiB | % 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
當然,如果設置了 count
或 device_ids
字段的話,就可以在容器里面的程序中使用多塊顯卡資源了。可以通過以下部署配置文件來進行驗證和使用。
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]
運行結果,如下所示,我們可以看到兩塊顯卡均可以被使用到。
# 前臺直接運行$ docker-compose up ... Created TensorFlow device (/device:GPU:0 with 13970 MB memory -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:1b.0, compute capability: 7.5)...Created TensorFlow device (/device:GPU:1 with 13970 MB memory) -> physical GPU (device: 1, name: Tesla T4, pci bus id: 0000:00:1e.0, compute capability: 7.5) ... gpu_test_1 exited with code
<img alt=">
到此,相信大家對“如何用Docker Compose來管理GPU資源”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。