Cách sử dụng GPU NVIDIA với Docker Containers
Bộ chứa Docker không tự động nhìn thấy GPU của hệ thống của bạn. Điều này làm giảm hiệu suất trong các khối lượng công việc phụ thuộc vào GPU, chẳng hạn như các khuôn khổ học máy. Đây là cách hiển thị GPU NVIDIA của máy chủ lưu trữ của bạn vào vùng chứa của bạn.
Làm cho GPU hoạt động trong Docker
Bộ chứa Docker chia sẻ hạt nhân của máy chủ lưu trữ của bạn nhưng mang theo hệ điều hành và gói phần mềm của riêng chúng. Điều này có nghĩa là chúng thiếu trình điều khiển NVIDIA được sử dụng để giao tiếp với GPU của bạn. Docker thậm chí không thêm GPU vào vùng chứa theo mặc định, do đó, một docker run
đơn giản sẽ không nhìn thấy phần cứng của bạn.
Ở cấp độ cao, để GPU của bạn hoạt động là một quy trình gồm hai bước: cài đặt trình điều khiển trong hình ảnh của bạn, sau đó hướng dẫn Docker thêm thiết bị GPU vào vùng chứa của bạn trong thời gian chạy.
Hướng dẫn này tập trung vào các phiên bản CUDA và Docker hiện đại. Bản phát hành mới nhất của Bộ công cụ vùng chứa NVIDIA được thiết kế cho sự kết hợp của CUDA 10 và Docker Engine 19.03 trở lên. Các bản dựng cũ hơn của CUDA, Docker và trình điều khiển NVIDIA có thể yêu cầu các bước bổ sung.
Thêm trình điều khiển NVIDIA
Đảm bảo rằng bạn có trình điều khiển NVIDIA hoạt động bình thường trên máy chủ của mình trước khi bạn tiếp tục với cấu hình Docker của mình. Bạn sẽ có thể chạy nvidia-smi
thành công và xem tên GPU, phiên bản trình điều khiển và phiên bản CUDA của bạn.
Để sử dụng GPU của bạn với Docker, hãy bắt đầu bằng cách thêm Bộ công cụ vùng chứa NVIDIA vào máy chủ của bạn. Điều này tích hợp vào Docker Engine để tự động định cấu hình các vùng chứa của bạn để hỗ trợ GPU.
Thêm kho lưu trữ gói của bộ công cụ vào hệ thống của bạn bằng cách sử dụng lệnh ví dụ:
phân phối = $ (. / etc / os-release; echo $ ID $ VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key thêm - && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
Tiếp theo, cài đặt nvidia-docker2
trên máy chủ của bạn:
apt-get cập nhật apt-get install -y nvidia-docker2
Khởi động lại daemon Docker để hoàn tất cài đặt:
sudo systemctl khởi động lại docker
Bộ công cụ vùng chứa bây giờ sẽ hoạt động. Bạn đã sẵn sàng để bắt đầu một vùng chứa thử nghiệm.
Bắt đầu một vùng chứa với quyền truy cập GPU
Vì Docker không cung cấp GPU của hệ thống của bạn theo mặc định, bạn cần tạo vùng chứa có --gpus
để phần cứng của bạn hiển thị. Bạn có thể chỉ định các thiết bị cụ thể để bật hoặc sử dụng từ khóa all
Các nvidia/cuda
được định cấu hình sẵn bằng các mã nhị phân CUDA và các công cụ GPU. Khởi động vùng chứa và chạy lệnh nvidia-smi
để kiểm tra GPU của bạn có thể truy cập được. Đầu ra phải khớp với những gì bạn đã thấy khi sử dụng nvidia-smi
trên máy chủ của bạn. Phiên bản CUDA có thể khác nhau tùy thuộc vào các phiên bản bộ công cụ trên máy chủ lưu trữ của bạn và trong hình ảnh vùng chứa đã chọn của bạn.
docker run -it --gpus tất cả nvidia / cuda: 11.4.0-base-ubuntu20.04 nvidia-smi
Chọn hình ảnh cơ sở
Sử dụng một trong các nvidia/cuda
là cách nhanh nhất và dễ nhất để tải công việc GPU của bạn chạy trong Docker. Nhiều biến thể khác nhau có sẵn; chúng cung cấp một ma trận các tùy chọn hệ điều hành, phiên bản CUDA và phần mềm NVIDIA. Các hình ảnh được xây dựng cho nhiều kiến trúc.
Mỗi thẻ có định dạng sau:
11.4.0-base-ubuntu20.04
11.4.0
– Phiên bản CUDA.-
base
– Hình ảnh hương vị. -
ubuntu20.04
– Phiên bản hệ điều hành.
Ba hương vị hình ảnh khác nhau có sẵn. base
là một tùy chọn tối thiểu với các tệp nhị phân thời gian chạy CUDA cần thiết. runtime
là một tùy chọn đầy đủ tính năng hơn bao gồm các thư viện toán học CUDA và NCCL cho giao tiếp giữa các GPU. Biến thể thứ ba là devel
cung cấp cho bạn mọi thứ từ runtime
cũng như tiêu đề và các công cụ phát triển để tạo hình ảnh CUDA tùy chỉnh.
Nếu một trong những hình ảnh phù hợp với bạn, hãy sử dụng nó làm cơ sở trong Dockerfile
của bạn. Sau đó, bạn có thể sử dụng hướng dẫn Dockerfile thông thường để cài đặt ngôn ngữ lập trình, sao chép mã nguồn và định cấu hình ứng dụng của bạn. Nó loại bỏ sự phức tạp của các bước thiết lập GPU thủ công.
TỪ nvidia / cuda: 11.4.0-base-ubuntu20.04 RUN apt cập nhật CHẠY apt-get install -y python3 python3-pip RUN pip cài đặt tensorflow-gpu SAO CHÉP tensor-code.py. ENTRYPONT ["python3", "tensor-code.py"]
Việc xây dựng và chạy hình ảnh này với --gpus
sẽ bắt đầu khối lượng công việc Tensor của bạn với khả năng tăng tốc GPU.
Định cấu hình hình ảnh theo cách thủ công
Bạn có thể thêm hỗ trợ CUDA vào hình ảnh của mình theo cách thủ công nếu bạn cần chọn một đế khác. Cách tốt nhất để đạt được điều này là tham khảo các tệp Dockerfiles chính thức của NVIDIA.
Sao chép các hướng dẫn được sử dụng để thêm kho lưu trữ gói CUDA, cài đặt thư viện và liên kết nó vào đường dẫn của bạn. Chúng tôi không sao chép tất cả các bước trong hướng dẫn này vì chúng thay đổi theo phiên bản CUDA và hệ điều hành.
Hãy chú ý đến các biến môi trường ở cuối Dockerfile – những biến này xác định cách các vùng chứa sử dụng hình ảnh của bạn tích hợp với Thời gian chạy vùng chứa NVIDIA:
ENV NVIDIA_VISIBLE_DEVICES tất cả ENV NVIDIA_DRIVER_CAPABILITIES tính, tiện ích
Hình ảnh của bạn sẽ phát hiện GPU của bạn sau khi CUDA được cài đặt và các biến môi trường đã được thiết lập. Điều này cho phép bạn kiểm soát nhiều hơn nội dung hình ảnh của mình nhưng bạn có trách nhiệm điều chỉnh các hướng dẫn khi phiên bản CUDA mới phát hành.
Làm thế nào nó hoạt động?
Bộ công cụ vùng chứa NVIDIA là một tập hợp các gói bao bọc thời gian chạy vùng chứa như Docker với giao diện với trình điều khiển NVIDIA trên máy chủ. libnvidia-container
chịu trách nhiệm cung cấp API và CLI tự động cung cấp GPU của hệ thống của bạn cho các vùng chứa thông qua trình bao bọc thời gian chạy.
Các nvidia-container-toolkit
cụ phần một container runtime prestart
móc. Điều này có nghĩa là nó được thông báo khi một vùng chứa mới sắp bắt đầu. Nó xem xét các GPU bạn muốn đính kèm và gọi libnvidia-container
để xử lý việc tạo vùng chứa.
Móc được kích hoạt bởi nvidia-container-runtime
. Đây kết thúc tốt đẹp “thật” runtime container của bạn như containerd hoặc runc để đảm bảo NVIDIA prestart
móc được chạy. Thời gian chạy hiện tại của bạn tiếp tục quá trình bắt đầu vùng chứa sau khi hook đã thực thi. Khi bộ công cụ vùng chứa được cài đặt, bạn sẽ thấy thời gian chạy NVIDIA được chọn trong tệp cấu hình daemon Docker của mình.
Bản tóm tắt
Việc sử dụng GPU NVIDIA bên trong vùng chứa Docker yêu cầu bạn thêm Bộ công cụ vùng chứa NVIDIA vào máy chủ. Điều này tích hợp trình điều khiển NVIDIA với thời gian chạy vùng chứa của bạn.
Việc gọi --gpu
docker run
với cờ –gpu làm cho phần cứng của bạn hiển thị với vùng chứa. Điều này phải được đặt trên mỗi vùng chứa bạn khởi chạy, sau khi Bộ công cụ vùng chứa đã được cài đặt.
NVIDIA cung cấp các hình ảnh CUDA Docker được cấu hình sẵn mà bạn có thể sử dụng làm trình khởi động nhanh cho ứng dụng của mình. Nếu bạn cần một cái gì đó cụ thể hơn, hãy tham khảo Dockerfiles chính thức để lắp ráp tệp của riêng bạn vẫn tương thích với Bộ công cụ vùng chứa.
Dịch từ: https://www.cloudsavvyit.com/14942/how-to-use-an-nvidia-gpu-with-docker-containers/