ในที่สุดฉันก็สามารถจัดการได้โดยไม่ต้องใช้โหมด - โหมดพิเศษ
ฉันทำงานบนเซิร์ฟเวอร์อูบุนตู 14.04 และฉันใช้ cuda ล่าสุด (6.0.37 สำหรับ linux 13.04 64 บิต)
การจัดเตรียม
ติดตั้งไดรเวอร์ nvidia และ cuda บนโฮสต์ของคุณ (อาจเป็นเรื่องยุ่งยากเล็กน้อยดังนั้นฉันจะแนะนำให้คุณทำตามคำแนะนำนี้/ubuntu/451672/installing-and-testing-cuda-in-ubuntu-14-04 )
ความสนใจ:มันสำคัญมากที่คุณต้องเก็บไฟล์ที่คุณใช้สำหรับการติดตั้งโฮสต์ cuda
รับ Docker Daemon ให้ทำงานโดยใช้ lxc
เราจำเป็นต้องเรียกใช้ docker daemon โดยใช้ไดรเวอร์ lxc เพื่อให้สามารถแก้ไขการกำหนดค่าและให้สิทธิ์การเข้าถึงคอนเทนเนอร์กับอุปกรณ์
การใช้งานครั้งเดียว:
sudo service docker stop
sudo docker -d -e lxc
การกำหนดค่าถาวร
แก้ไขไฟล์กำหนดค่านักเทียบท่าของคุณที่อยู่ใน / etc / default / docker เปลี่ยนบรรทัด DOCKER_OPTS โดยเพิ่ม '-e lxc' นี่คือบรรทัดของฉันหลังจากการแก้ไข
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -e lxc"
จากนั้นรีสตาร์ท daemon โดยใช้
sudo service docker restart
วิธีตรวจสอบว่า daemon ใช้ไดรเวอร์ lxc อย่างมีประสิทธิภาพหรือไม่
docker info
บรรทัด Execution Driver ควรมีลักษณะดังนี้:
Execution Driver: lxc-1.0.5
สร้างภาพของคุณด้วยไดรเวอร์ NVIDIA และ CUDA
นี่คือ Dockerfile พื้นฐานเพื่อสร้างภาพที่รองรับ 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.
เรียกใช้ภาพของคุณ
ก่อนอื่นคุณต้องระบุหมายเลขหลักที่เกี่ยวข้องกับอุปกรณ์ของคุณ วิธีที่ง่ายที่สุดคือทำตามคำสั่งต่อไปนี้:
ls -la /dev | grep nvidia
หากผลลัพธ์ว่างเปล่าให้ใช้การเรียกใช้หนึ่งในตัวอย่างบนโฮสต์ควรทำการหลอกลวง ผลลัพธ์ควรมีลักษณะเช่นนั้น
คุณจะเห็นว่ามีชุดของตัวเลข 2 ตัวระหว่างกลุ่มและวันที่ หมายเลข 2 เหล่านี้เรียกว่าหมายเลขหลักและรอง (เขียนตามลำดับ) และออกแบบอุปกรณ์ เราจะใช้หมายเลขหลักเพื่อความสะดวก
ทำไมเราถึงเปิดใช้งานไดรเวอร์ lxc หากต้องการใช้ตัวเลือก lxc conf ที่อนุญาตให้เราอนุญาตให้คอนเทนเนอร์ของเราเข้าถึงอุปกรณ์เหล่านั้น ตัวเลือกคือ: (ฉันขอแนะนำให้ใช้ * สำหรับจำนวนรองทำให้ลดความยาวของคำสั่งเรียกใช้)
--lxc-conf = 'lxc.cgroup.devices.allow = c [หมายเลขหลัก]: [หมายเลขรองหรือ *] rwm'
ดังนั้นถ้าฉันต้องการที่จะเปิดตัวภาชนะ (สมมติว่าชื่อภาพของคุณคือ cuda)
docker run -ti --lxc-conf='lxc.cgroup.devices.allow = c 195:* rwm' --lxc-conf='lxc.cgroup.devices.allow = c 243:* rwm' cuda