Ok tôi cuối cùng đã quản lý để làm điều đó mà không cần sử dụng chế độ - đặc quyền.
Tôi đang chạy trên máy chủ Ubuntu 14.04 và tôi đang sử dụng cuda mới nhất (6.0.37 cho linux 13.04 64 bit).
Sự chuẩn bị
Cài đặt trình điều khiển nvidia và cuda trên máy chủ của bạn. (nó có thể hơi khó khăn một chút vì vậy tôi sẽ đề nghị bạn làm theo hướng dẫn này https://askubfox.com/questions/451672/installing-and-testing-cuda-in-ub Ubuntu-14-04 )
CHÚ Ý: Điều thực sự quan trọng là bạn giữ các tệp bạn đã sử dụng để cài đặt cuda máy chủ
Nhận Docker Daemon để chạy bằng lxc
Chúng ta cần chạy docker daemon bằng trình điều khiển lxc để có thể sửa đổi cấu hình và cấp quyền truy cập container cho thiết bị.
Sử dụng một lần:
sudo service docker stop
sudo docker -d -e lxc
Cấu hình vĩnh viễn
Sửa đổi tệp cấu hình docker của bạn nằm trong / etc / default / docker Thay đổi dòng DOCKER_OPTS bằng cách thêm '-e lxc' Đây là dòng của tôi sau khi sửa đổi
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -e lxc"
Sau đó khởi động lại daemon bằng
sudo service docker restart
Làm thế nào để kiểm tra xem daemon có sử dụng trình điều khiển lxc hiệu quả không?
docker info
Dòng Trình điều khiển thực thi sẽ trông như thế:
Execution Driver: lxc-1.0.5
Xây dựng hình ảnh của bạn với trình điều khiển NVIDIA và CUDA.
Dưới đây là một Dockerfile cơ bản để xây dựng hình ảnh tương thích CUDA.
FROM ubuntu:14.04
MAINTAINER Regan <http://stackoverflow.com/questions/25185405/using-gpu-from-a-docker-container>
RUN apt-get update && apt-get install -y build-essential
RUN apt-get --purge remove -y nvidia*
ADD ./Downloads/nvidia_installers /tmp/nvidia > Get the install files you used to install CUDA and the NVIDIA drivers on your host
RUN /tmp/nvidia/NVIDIA-Linux-x86_64-331.62.run -s -N --no-kernel-module > Install the driver.
RUN rm -rf /tmp/selfgz7 > For some reason the driver installer left temp files when used during a docker build (i don't have any explanation why) and the CUDA installer will fail if there still there so we delete them.
RUN /tmp/nvidia/cuda-linux64-rel-6.0.37-18176142.run -noprompt > CUDA driver installer.
RUN /tmp/nvidia/cuda-samples-linux-6.0.37-18176142.run -noprompt -cudaprefix=/usr/local/cuda-6.0 > CUDA samples comment if you don't want them.
RUN export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64 > Add CUDA library into your PATH
RUN touch /etc/ld.so.conf.d/cuda.conf > Update the ld.so.conf.d directory
RUN rm -rf /temp/* > Delete installer files.
Chạy hình ảnh của bạn.
Trước tiên, bạn cần xác định số chính của bạn được liên kết với thiết bị của bạn. Cách dễ nhất là thực hiện lệnh sau:
ls -la /dev | grep nvidia
Nếu kết quả là trống, sử dụng khởi chạy một trong các mẫu trên máy chủ nên thực hiện thủ thuật. Kết quả sẽ giống như vậy
Như bạn có thể thấy có một bộ gồm 2 số giữa nhóm và ngày. 2 số này được gọi là số chính và số phụ (được viết theo thứ tự đó) và thiết kế một thiết bị. Chúng tôi sẽ chỉ sử dụng những con số chính cho thuận tiện.
Tại sao chúng tôi kích hoạt trình điều khiển lxc? Để sử dụng tùy chọn lxc conf cho phép chúng tôi cho phép container của chúng tôi truy cập vào các thiết bị đó. Tùy chọn là: (tôi khuyên bạn nên sử dụng * cho số phụ vì nó làm giảm độ dài của lệnh chạy)
--lxc-conf = 'lxc.cgroup.devices.allow = c [số chính]: [số phụ hoặc *] rwm'
Vì vậy, nếu tôi muốn khởi chạy một container (Giả sử tên hình ảnh của bạn là cuda).
docker run -ti --lxc-conf='lxc.cgroup.devices.allow = c 195:* rwm' --lxc-conf='lxc.cgroup.devices.allow = c 243:* rwm' cuda