Могу ли я запустить контейнер Docker с CUDA 10, если на хосте установлена ​​CUDA 9?

Я развертываю приложение в контейнере докеров, для которого требуется CUDA 10. Это необходимо для запуска некоторых базовых функций pytorch, которые использует приложение.

Однако на хост-сервере работает docker ce 17, Nvidia-docker v 1.0 с CUDA версии 9, и я не смогу обновить хост.

У меня сложилось впечатление, что я прикован наручниками к среде выполнения v1 nvidia docker и версии CUDA, доступной на хосте.

Есть ли способ запустить CUDA 10 в контейнере, чтобы я мог использовать функциональность этого инструментария?

Это во многом зависит от конкретной конфигурации, особенно от того, какой драйвер загружен на хост, а также от того, является ли GPU на хосте Tesla GPU или нет. В некоторых случаях контейнер Docker, зависящий от CUDA 10, может работать на хосте CUDA 9, но для этого требуются определенные действия. Все требования изложены в этот документ.

Robert Crovella 13.07.2019 06:41

Прикольно, раньше не сталкивался с такими требованиями. А что, если у хоста нет графического процессора Tesla, а есть Quadros? Мне все еще неясны этапы установки, которые мне нужно предварительно сформировать для dockerfile и/или составить..?

JLuxton 13.07.2019 16:00

Также важно знать версию драйвера графического процессора, установленную на хосте. Если на хосте есть графический процессор Quadro, то библиотеки «обратной» совместимости не будут работать с ним, и ваша единственная возможность добиться успеха, если случайно на хосте установлен более новый драйвер, чем «типичный» драйвер CUDA 9. Если на вашем хосте установлен «типичный» драйвер CUDA 9 и это графический процессор Quadro, нет возможности запустить контейнер, зависящий от CUDA 10.

Robert Crovella 13.07.2019 16:03

Кроме того, хотя он не отвечает на ваш вопрос напрямую, эта тема содержит некоторую, возможно, полезную информацию об использовании библиотеки совместимости и контейнерах. Но опять же, библиотека совместимости не будет работать с графическим процессором Quadro, это гарантировано.

Robert Crovella 13.07.2019 16:07

Связь требуемого драйвера графического процессора (например, того, что установлено на базовой машине) и поддерживаемой версии CUDA (например, какую версию CUDA вы можете или хотите использовать в контейнере) выражена в таблице 1 здесь. Поскольку на вашей базовой машине установлен графический процессор Quadro, механизм библиотеки совместимости использовать нельзя, и ваша единственная надежда на запуск контейнера CUDA 10.0 состоит в том, что случайно был установлен «более новый» драйвер, такой как 410.48 (или новее/выше). на базовой машине.

Robert Crovella 13.07.2019 16:21

Если на вашей базовой машине установлен драйвер 396.xx или более ранней версии, нет возможности запустить контейнер CUDA 10.0 (или более поздней версии), если базовая машина содержит графические процессоры Quadro)

Robert Crovella 13.07.2019 16:21

Спасибо Роберт - не те новости, на которые я надеялся, но очень полезные. Похоже, мне нужно обновить хост-компьютер или попытаться сделать мое приложение совместимым с CUDA 9, если я не могу обновить хост... потому что нет возможности использовать библиотеки обратной совместимости для Quadro...

JLuxton 13.07.2019 16:30
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
5
7
9 939
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В общем случае для любой конкретной версии CUDA потребуется минимальная версия драйвера графического процессора. Это описано в таких местах, как здесь и здесь (таблица 1). Таким образом, для использования CUDA 9.0 вам потребуется как минимум версия драйвера графического процессора, поддерживающая CUDA 9.0, например драйвер R384. Для использования CUDA 10.0 вам потребуется как минимум версия драйвера графического процессора, поддерживающая CUDA 10.0, например драйвер R410.

Использование контейнеров принципиально не меняет этого. Если вы хотите использовать контейнер с кодом CUDA 10, вашему базовому компьютеру нужен драйвер, поддерживающий CUDA 10.

NVIDIA начала публиковать библиотеки совместимости, которые позволяют изменять приведенные выше утверждения. Эти библиотеки совместимости доступны, но не устанавливаются по умолчанию при установке инструментария CUDA. Эти библиотеки совместимости работают только в определенных случаях, и для их использования существуют определенные требования. Библиотеки совместимости задокументированы здесь.

Одним из конкретных требований для использования этих библиотек совместимости является то, что используемые графические процессоры должны быть графическими процессорами марки Tesla. Графические процессоры семейства GeForce, Quadro, Jetson и Titan не поддерживаются этими библиотеками совместимости.

Кроме того, библиотеки работают только с определенной комбинацией версий набора инструментов CUDA и версий драйверов графического процессора, установленных на базовой машине. Эта «матрица совместимости» документирована здесь (таблица 3). Только определенные комбинации версий набора инструментов CUDA с установленными версиями драйверов можно использовать для обеспечения совместимости. Например, если вы хотите использовать CUDA 10.0, а на вашем базовом компьютере установлен графический процессор Tesla с установленным драйвером R396, поддержка совместимости отсутствует. Однако в той же настройке, если вы хотите использовать CUDA 10.1, для этого есть поддержка совместимости.

Если вы выполнили требования для использования совместимости, оставшимся шагом будет установка библиотек совместимости (или создайте свой контейнер из базового контейнера, в котором уже установлены библиотеки совместимости.).

Для метода установки менеджера пакетов CUDA метод установки библиотек совместимости прост (пример в Ubuntu, установка совместимости с CUDA 10.1 для соответствия установке инструментария CUDA 10.1):

sudo apt-get install cuda-compat-10.1

Убедитесь, что версия соответствует версии инструментария CUDA, которую вы используете (которую вы установили с помощью метода диспетчера пакетов или которая уже была установлена ​​в вашем контейнере).

Этот «путь» совместимости начался только во времена CUDA 9.0. Системы, оснащенные драйверами, предшествующими CUDA 9.0, никоим образом не будут использоваться для этого пути совместимости. Существуют также различные функциональные ограничения и ограничения, которые описаны в документация.

Когда этот «путь совместимости» правильно установлен и используется, общая конфигурация системы может «казаться» как нарушающая правила, указанные в верхней части этого ответа. Например, приложение CUDA 10.1 может работать на машине, на которой установлен только драйвер R396.

Что касается рассматриваемого здесь конкретного вопроса, ОП в конечном итоге указал, что на базовой машине установлен графический процессор Quadro, поэтому этот «путь совместимости» не применяется, и единственный способ запуска, например. контейнер CUDA 10.0 будет, если на базовой машине установлен драйвер с поддержкой CUDA 10.0, например. Драйвер R410 или более поздней версии.

Как насчет хост-компьютера CUDA 10 и R430, но я хочу запустить контейнер с кодами CUDA 9? Как-то это дает мне Failed to initialize NVML: Driver/library version mismatch

Raven Cheuk 24.07.2020 19:46

Тогда вы неправильно установили или использовали файл набор инструментов контейнера nvidia. Вы не должны устанавливать какие-либо компоненты драйвера в контейнер (что вы и сделали). Вы должны позволить инструментарию контейнера справиться с этим. Драйвер устанавливается только на хост-компьютер. Взгляните на контейнеры nvidia cuda (dockerfiles), чтобы увидеть, как они создаются.

Robert Crovella 24.07.2020 19:52

Итак, Failed to initialize NVML: Driver/library version mismatch означает, что я установил драйвер внутри контейнера? Так как я создал этот контейнер давно, я забыл, что я делал тогда... Но CUDA 10 и R430, о которых я упоминал, оба находятся на хосте, а не внутри контейнера.

Raven Cheuk 24.07.2020 19:55

да, это то, что это значит. И вы не должны этого делать, когда используете набор инструментов nvidia container. Если вы не используете набор инструментов контейнера nvidia, вы должны убедиться, что драйвер, установленный на хосте, точно соответствует драйверу, установленному в контейнере. Рекомендуется не заморачиваться с этим, а вместо этого использовать контейнерный инструментарий nvidia, который сделает это за вас. В этом случае не устанавливайте драйвер графического процессора или компоненты драйвера в контейнер.

Robert Crovella 24.07.2020 19:58

Есть ли способ заставить этот контейнер снова работать? Вроде удаления драйверов из контейнера?

Raven Cheuk 24.07.2020 20:00

пожалуйста, задайте новый вопрос, я не смогу разобраться в комментариях

Robert Crovella 24.07.2020 20:01

Спасибо за быстрый ответ. Вот ссылка на мой вопрос stackoverflow.com/questions/63079329/…

Raven Cheuk 24.07.2020 20:17

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