[ad_1]
Quyền truy cập GPU trong Docker cho phép bạn chứa các khối lượng công việc yêu cầu cao như các ứng dụng máy học. GPU không tự động có sẵn khi bạn bắt đầu một vùng chứa mới nhưng chúng có thể được kích hoạt bằng --gpus
cờ cho docker run
hoặc bằng cách thêm các trường bổ sung vào một docker-compose.yml
tập tin.
Trong bài viết này, chúng tôi sẽ hướng dẫn cách bật hỗ trợ GPU trong Docker Compose. Bạn sẽ cần phiên bản Docker Compose v1.28 hoặc mới hơn để làm theo hướng dẫn. GPU không được hỗ trợ trong các phiên bản Soạn v1.18 trở lên; các bản phát hành giữa v1.19 và v1.27 sử dụng cấu trúc trường kế thừa cung cấp ít quyền kiểm soát hơn.
Chuẩn bị hệ thống của bạn
Máy chủ Docker của bạn cần được chuẩn bị trước khi nó có thể làm lộ phần cứng GPU của bạn. Mặc dù các vùng chứa chia sẻ hạt nhân của máy chủ lưu trữ của bạn, nhưng chúng không thể thấy các gói hệ thống mà bạn đã cài đặt. Một vùng chứa đơn giản sẽ thiếu các trình điều khiển thiết bị giao tiếp với GPU của bạn.
Bạn có thể kích hoạt hỗ trợ cho GPU NVIDIA bằng cách cài đặt Bộ công cụ vùng chứa Docker của NVIDIA:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt update sudo apt install -y nvidia-docker2 sudo systemctl restart docker
Gói này kết thúc thời gian chạy vùng chứa của Docker với một giao diện với trình điều khiển NVIDIA của máy chủ lưu trữ của bạn. Kiểm tra của bạn /etc/docker/daemon.json
tệp sẽ xác nhận rằng thời gian chạy vùng chứa được định cấu hình đã được thay đổi. Bộ công cụ NVIDIA sẽ xử lý việc đưa các kết nối thiết bị GPU vào khi các bộ chứa mới bắt đầu. Sau đó, nó sẽ chuyển giao cho thời gian chạy vùng chứa thông thường của bạn.
$ cat /etc/docker/daemon.json và}#13; "runtimes": và}#13; "nvidia": và}#13; "path": "nvidia-container-runtime", "runtimeArgs": [] } } }
Chuẩn bị hình ảnh của bạn
Quyền truy cập GPU trong Docker cũng dựa vào hình ảnh vùng chứa của bạn được định cấu hình chính xác. Thông thường, việc căn cứ hình ảnh của bạn vào một biến thể của nvidia/cuda
. Điểm khởi đầu do NVIDIA cung cấp này được định cấu hình sẵn với hỗ trợ CUDA. Cài đặt bất kỳ ngôn ngữ lập trình nào bạn cần, sau đó sao chép mã phụ thuộc vào GPU của bạn:
FROM nvidia/cuda:11.4.0-base-ubuntu20.04 RUN apt update && apt-get install -y python3 python3-pip && pip install tensorflow-gpu COPY tensor.py . ENTRYPONT ["python3", "tensor.py"]
Bạn nên sử dụng cùng một phiên bản CUDA mà bạn đã cài đặt trên máy chủ của mình. Bạn có thể kiểm tra điều này bằng cách chạy nvidia-smi
:
$ nvidia-smi Tue May 10 19:15:00 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 470.103.01 Driver Version: 470.103.01 CUDA Version: 11.4 | |-------------------------------+----------------------+----------------------+ ...
Giờ đây, bạn có thể viết tệp Docker Compose để bắt đầu vùng chứa của mình với tệp đính kèm GPU.
Truy cập GPU trong Docker Compose
GPU được tham chiếu trong docker-compose.yml
nộp qua deploy.resources.reservations.devices
trong các dịch vụ của bạn cần chúng. Cơ chế này cho phép bạn xác định GPU mà bạn muốn gắn vào. Mỗi thiết bị đã chọn sẽ được cung cấp cho các vùng chứa của bạn.
Đây là một ví dụ đơn giản bắt đầu một vùng chứa bằng cách sử dụng nvidia/cuda
hình ảnh. Nó sẽ phát ra thông tin về GPU của bạn khi vùng chứa khởi động.
services: app: image: nvidia/cuda:11.4.0-base-ubuntu20.04 command: nvidia-smi deploy: resources: reservations: devices: - driver: nvidia capabilities: [gpu]
Các deploy.resources.reservations.devices
trường chỉ định các thiết bị mà vùng chứa của bạn có thể sử dụng. Đặt driver
đến nvidia
và thêm gpu
khả năng xác định một thiết bị GPU.
Chạy docker-compose up
(hoặc docker compose up
cho Soạn v2) để bắt đầu vùng chứa của bạn:
$ docker compose up Creating network "scratch_default" with the default driver Creating scratch_app_1 ... done Attaching to scratch_app_1 app_1 | Tue May 10 14:21:14 2022 app_1 | +-----------------------------------------------------------------------------+ app_1 | | NVIDIA-SMI 470.103.01 Driver Version: 470.103.01 CUDA Version: 11.4 | app_1 | |-------------------------------+----------------------+----------------------+
Vùng chứa sẽ có được quyền truy cập thành công vào GPU của bạn. Phiên bản trình điều khiển và CUDA sẽ khớp với những phiên bản được cài đặt trên máy chủ của bạn.
Sử dụng nhiều GPU
Vùng chứa của bạn nhận được quyền truy cập vào tất cả các GPU trong hệ thống của bạn trừ khi được cung cấp thêm cấu hình. Có hai cách khác nhau để truy cập một tập hợp con các thiết bị GPU của bạn.
Truy cập một số lượng thiết bị cố định
Các count
trường dự trữ một số lượng thiết bị được chỉ định. Trong ví dụ này, một hệ thống có hai GPU sẽ cung cấp một trong số chúng cho vùng chứa. Nó là tùy ý mà cái nào sẽ được chọn.
services: app: image: nvidia/cuda:11.4.0-base-ubuntu20.04 command: nvidia-smi deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]
Truy cập các thiết bị cụ thể
Bạn có thể xác định các thiết bị riêng lẻ trong hệ thống của mình bằng cách sử dụng device_ids
đồng ruộng. Điều này chấp nhận một mảng các ID thiết bị được lập chỉ mục 0 để cung cấp cho vùng chứa. Bạn có thể tìm thấy các ID này bằng cách liệt kê các GPU của mình với nvidia-smi
:
$ nvidia-smi --list-gpus GPU 0: NVIDIA GeForce GTX 1080 Ti (UUID: GPU-5ba4538b-234f-2c18-6a7a-458d0a7fb348) GPU 1: NVIDIA GeForce GTX 1080 Ti (UUID: GPU-d5ce9af3-710c-4222-95f8-271db933d438) GPU 2: NVIDIA GeForce GTX 1080 Ti (UUID: GPU-50d4eb4f-7b08-4f8f-8d20-27d797fb7f19) GPU 3: NVIDIA GeForce GTX 1080 Ti (UUID: GPU-bed2d40a-c6e7-4547-8d7d-a1576c5247b2)
Để truy cập đáng tin cậy vào hai thiết bị cuối cùng trong danh sách, hãy bao gồm ID thiết bị của chúng trong cấu hình dịch vụ của bạn:
services: app: image: nvidia/cuda:11.4.0-base-ubuntu20.04 command: nvidia-smi deploy: resources: reservations: devices: - driver: nvidia device_ids: ["2", "3"] capabilities: [gpu]
Bạn có thể dùng count
hoặc device_ids
trong mỗi định nghĩa dịch vụ của bạn. Bạn sẽ gặp lỗi khi chạy docker-compose up
nếu bạn cố gắng kết hợp cả hai, hãy chỉ định ID thiết bị không hợp lệ hoặc sử dụng giá trị count
cao hơn số lượng GPU trong hệ thống của bạn.
Bản tóm tắt
Bản phát hành Docker Compose hiện đại hỗ trợ truy cập GPU thông qua deploy.resources
tính năng đặt trước thiết bị. Bạn vẫn chịu trách nhiệm chuẩn bị môi trường máy chủ của mình và sử dụng hình ảnh vùng chứa hỗ trợ GPU. Sau khi điều đó được chăm sóc, chạy docker-compose up -d
đơn giản hơn là nhớ bao gồm --gpus all
gắn cờ mỗi khi bạn sử dụng docker run
.
Bạn có thể cam kết của bạn docker-compose.yml
tệp vào kiểm soát nguồn để mọi người đều có quyền truy cập GPU tự động. Bạn nên đảm bảo rằng bạn chuẩn hóa các phiên bản nhất quán của trình điều khiển NVIDIA, vì bản phát hành được sử dụng bởi hình ảnh của bạn cần phải phù hợp với bản phát hành được cài đặt trên máy chủ của bạn. Trong tương lai, hỗ trợ GPU của Docker cũng có thể hoạt động với các thiết bị Intel và AMD nhưng cố gắng sử dụng nó ngay hôm nay sẽ dẫn đến lỗi. NVIDIA là nhà cung cấp GPU duy nhất hiện được hỗ trợ bởi dự án Moby.
[ad_2]