Ok saya akhirnya berhasil melakukannya tanpa menggunakan mode --privileged.
Saya menjalankan server ubuntu 14.04 dan saya menggunakan cuda terbaru (6.0.37 untuk linux 13.04 64 bit).
Persiapan
Instal driver nvidia dan cuda di host Anda. (ini mungkin sedikit rumit sehingga saya akan menyarankan Anda mengikuti panduan ini /ubuntu/451672/installing-and-testing-cuda-in-ubuntu-14-04 )
PERHATIAN: Sangat penting bahwa Anda menyimpan file yang Anda gunakan untuk instalasi host cuda
Dapatkan Docker Daemon untuk dijalankan menggunakan lxc
Kita perlu menjalankan docker daemon menggunakan driver lxc untuk dapat mengubah konfigurasi dan memberikan wadah akses ke perangkat.
Pemanfaatan satu kali:
sudo service docker stop
sudo docker -d -e lxc
Konfigurasi permanen
Ubah file konfigurasi buruh pelabuhan Anda yang berada di / etc / default / docker Ubah baris DOCKER_OPTS dengan menambahkan '-e lxc' Ini baris saya setelah modifikasi
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -e lxc"
Kemudian restart daemon menggunakan
sudo service docker restart
Bagaimana cara memeriksa apakah daemon secara efektif menggunakan driver lxc?
docker info
Baris Driver Eksekusi akan terlihat seperti itu:
Execution Driver: lxc-1.0.5
Bangun gambar Anda dengan driver NVIDIA dan CUDA.
Berikut ini adalah Dockerfile dasar untuk membangun gambar yang kompatibel dengan 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.
Jalankan gambar Anda.
Pertama, Anda perlu mengidentifikasi nomor utama Anda yang terkait dengan perangkat Anda. Cara termudah adalah dengan melakukan perintah berikut:
ls -la /dev | grep nvidia
Jika hasilnya kosong, gunakan meluncurkan salah satu sampel pada host harus melakukan trik. Hasilnya akan terlihat seperti itu.
Seperti yang Anda lihat ada satu set 2 angka antara grup dan tanggal. 2 angka ini disebut angka besar dan kecil (ditulis dalam urutan itu) dan mendesain perangkat. Kami hanya akan menggunakan nomor utama untuk kenyamanan.
Mengapa kita mengaktifkan driver lxc? Untuk menggunakan opsi lxc conf yang memungkinkan kami mengizinkan wadah kami mengakses perangkat-perangkat itu. Opsinya adalah: (saya sarankan menggunakan * untuk nomor minor karena mengurangi panjang perintah run)
--lxc-conf = 'lxc.cgroup.devices.allow = c [angka utama]: [angka minor atau *] rwm'
Jadi jika saya ingin meluncurkan sebuah wadah (Misalkan nama gambar Anda adalah cuda).
docker run -ti --lxc-conf='lxc.cgroup.devices.allow = c 195:* rwm' --lxc-conf='lxc.cgroup.devices.allow = c 243:* rwm' cuda