Tamam nihayet --privileged modunu kullanmadan başardı.
Ubuntu sunucu 14.04 üzerinde çalışıyorum ve son cuda (linux 13.04 64 bit için 6.0.37) kullanıyorum.
Hazırlık
Ana makinenize nvidia sürücüsü ve cuda yükleyin. (biraz zor olabilir bu yüzden bu kılavuzu takip etmenizi öneririm /ubuntu/451672/instal-and-testing-cuda-in-ubuntu-14-04 )
DİKKAT: Host cuda kurulumu için kullandığınız dosyaları saklamanız gerçekten önemlidir.
Dox Daemon'u lxc kullanarak çalıştırın
Yapılandırmayı değiştirebilmek ve kapsayıcının aygıta erişimini sağlamak için lxc sürücüsünü kullanarak docker daemon'u çalıştırmamız gerekiyor.
Bir kez kullanım:
sudo service docker stop
sudo docker -d -e lxc
Kalıcı yapılandırma
/ etc / default / docker içinde bulunan docker yapılandırma dosyanızı değiştirin '-e lxc' ekleyerek DOCKER_OPTS satırını değiştirin
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -e lxc"
Sonra daemon'u yeniden başlatın
sudo service docker restart
Daemon etkin bir şekilde lxc sürücüsü kullanıp kullanmadığını nasıl kontrol edebilirim?
docker info
Yürütme Sürücüsü satırı şöyle görünmelidir:
Execution Driver: lxc-1.0.5
NVIDIA ve CUDA sürücüsü ile görüntünüzü oluşturun.
İşte CUDA uyumlu bir görüntü oluşturmak için temel bir Dockerfile.
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.
Resminizi çalıştırın.
İlk önce cihazınızla ilişkili ana numaranızı tanımlamanız gerekir. En kolay yol aşağıdaki komutu yapmaktır:
ls -la /dev | grep nvidia
Sonuç boşsa, ana bilgisayardaki örneklerden birini başlatmak hile yapmalıdır. Sonuç şöyle görünmelidir
Gördüğünüz gibi
grup ve tarih arasında 2 sayı kümesi vardır. Bu 2 sayıya büyük ve küçük numaralar denir (bu sırada yazılır) ve bir cihaz tasarlar. Kolaylık için sadece büyük sayıları kullanacağız.
LXC sürücüsünü neden etkinleştirdik? Konteynerimizin bu cihazlara erişmesine izin vermemize izin veren lxc conf seçeneğini kullanmak için. Seçenek: (küçük sayı için * kullanmanızı öneririz çünkü run komutunun uzunluğunu azaltır)
--lxc-conf = 'lxc.cgroup.devices.allow = c [büyük sayı]: [küçük sayı veya *] rwm'
Eğer bir konteyner başlatmak istiyorsanız Yani (varsayalım resim adınız cuda).
docker run -ti --lxc-conf='lxc.cgroup.devices.allow = c 195:* rwm' --lxc-conf='lxc.cgroup.devices.allow = c 243:* rwm' cuda