Как запустить программу OpenCL в контейнере Докера с AMDGPU-Pro?

У меня есть новая установка Ubuntu 16.04 только с AMDGPU-Pro (собственным) установленным драйвером и механизм докера (от PPA apt.dockerproject.org).

Я хочу запустить программы OpenCL внутренние контейнеры Докера. Я фигурирую: ядро совместно используется, таким образом, модуль (модули) GPU должен быть доступен для контейнеров, что отсутствует, освобождение для доступа к модулю (модулям).

Я настроил контейнер и скомпилировал программу OpenCL в нем. Выполнение программы в нем возвраты, которыми не были найдены никакие устройства. Таким образом, я скопировал двоичный файл в хост, и выполнение двоичного файла там работает (оба моих устройства GPU были обнаружены).

Я попытался создать новый контейнер (из Ubuntu:16.04) и скопировал двоичный файл, и все освобождает требуемый от контейнера, используемого для компиляции И папки /usr/lib/x86_64-linux-gnu/amdgpu-pro от хоста.

К сожалению, это также не работало. Что я мог пропускать?

7
задан 8 August 2016 в 11:38

1 ответ

Управляемый, чтобы заставить это работать. Сводка:

  • Потребность добавить к контейнеру библиотеки от/usr/lib/x86_64-linux-gnu/amdgpu-pro
  • Потребность добавить к контейнеру конфигурационные файлы от Потребности/etc/OpenCL
  • позволить контейнеру получать доступ к/dev/dri устройству

Вот сценарий в качестве примера для создания изображения докера: https://gist.github.com/anonymous/fea9c0a9e986eeda7cf58e47f47c89f2

И вот команда в качестве примера для выполнения контейнера с созданным изображением:

docker run -it --device /dev/dri:/dev/dri climage

В случае, если любой спотыкается в подобную проблему, я также перечислю, как я узнал "решение":

  • Выполнение тестовый двоичный файл в хосте с помощью strace для списка всего Выполнения syscalls
    • strace ./cltest &> host.strace
  • тестовый двоичный файл в контейнере, также с помощью strace для списка всего syscalls
    • docker run --rm --security-opt seccomp:unconfined -v $(pwd):/external climage strace /external/cltest &> ./container.strace
  • Сравнивает эти два вывода, или вручную или использование чего-то как vimdiff
    • vimdiff container.strace host.strace
  • Видят, где результаты команды отличаются, в некоторых случаях у меня были файлы, не находимые, таким образом, я добавил их, в других случаях контейнер не имел разрешения открыть файл (который был в/dev/dri, таким образом, я позволил этому получать доступ к устройству)
11
ответ дан 23 November 2019 в 06:23

Другие вопросы по тегам:

Похожие вопросы: