2015-10-14 8 views
15

Ich habe Maschine mit mehreren GPUs. Meine Idee ist es, sie an verschiedene Docker-Instanzen anzuhängen, um diese Instanzen in CUDA (oder OpenCL) -Berechnungen zu verwenden.Wie GPGPU innerhalb Docker Bild mit anderen als Host-Kernel und GPU-Treiber Version

Mein Ziel ist es, Docker Image mit ziemlich alten Ubuntu und ziemlich alten AMD-Grafiktreibern (13.04) zu installieren. Grund ist einfach: ein Upgrade auf eine neuere Treiberversion hat mein OpenCL-Programm kaputt gemacht (wegen fehlerhafter AMD Linux-Treiber).

Also Frage folgt. Ist es möglich, Docker Image mit alten Ubuntu, alten Kernel (3.14 zum Beispiel) und alten AMD (fglrx) Treiber auf frischem Arch Linux Setup mit frischen Kernel 4.2 und neueren AMD (fglrx) Treibern im Repository laufen zu lassen?

P.S. Ich habe versucht, this answer (mit Nvidia-Karten) und leider deviceQuery innerhalb Docker Bild keine CUDA Geräte sieht (wie es mit einigen commentors der ursprünglichen Antwort passiert) ...

P.P.S. Mein Setup:

  1. CPU: Intel Xeon E5-2670
  2. GPUs:

    • 1 x Radeon HD 7970

      $ lspci -nn | grep Rad 
          83:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti XT [Radeon HD 7970/8970 OEM/R9 280X] [1002:6798] 
          83:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti XT HDMI Audio [Radeon HD 7970 Series] [1002:aaa0] 
      
    • 2 x GeForce GTX Titan Schwarz

+3

Ich bin ziemlich sicher, dass alle Docker Container auf einer bestimmten Maschine [müssen den gleichen Kernel verwenden] (http://stackoverflow.com/questions/25444099/why-docker-has-ability-to-run-different-linux -Distribution) als Host. Sie können ein Ubuntu- "Image" auf einem Arch Linux-Setup ausführen, aber sie müssen den gleichen Kernel (den Host-Kernel) verwenden. Ich denke, Ihre Frage zu DeviceQuery in einem Docker-Image ist ein separates Problem. Es ist mir nicht klar, dass das überhaupt eine Programmierfrage ist. –

+0

Einige Anwendungen hängen stark von der Kernel-Version ab (und daher von den Fähigkeiten). Also, wie ist es möglich, Kernel zu teilen (wenn sie sehr unterschiedlich sind)? Stimmt es, dass ich das gleiche "Image" OS wie Host OS ausführen soll? Ich denke, es ist ziemlich Programmierfrage zumindest in DevOps Sinn. – petRUShka

Antwort

2

Mit Docker verlassen Sie sich auf Virtualisierung auf Betriebssystemebene. Das bedeutet, dass Sie in allen Containern denselben Kernel verwenden. Wenn Sie für jeden Container verschiedene Kernel ausführen möchten, müssen Sie wahrscheinlich die Virtualisierung auf Systemebene verwenden, z. B. KVM, VirtualBox. Wenn Ihr Setup Intels VT-d unterstützt, können Sie die GPU als PCIe-Gerät an den Container übergeben (bessere Terminologie ist in diesem Fall Virtual Machine).

+0

Also, Ihre Antwort ist: "Es ist unmöglich", ist es wahr? – petRUShka

+0

Basierend auf Ihrer Anforderung, verschiedene Kernel ausführen zu wollen; Ja – hbogert