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

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

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

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

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


person JLuxton    schedule 13.07.2019    source источник
comment
Это во многом зависит от конкретной конфигурации, особенно от того, какой драйвер загружен на хост, а также от того, является ли графический процессор на хосте графическим процессором Tesla или нет. При некоторых обстоятельствах докер-контейнер, зависящий от CUDA 10, может работать на хосте CUDA 9, но для этого требуются определенные шаги. Все требования изложены в этом документе.   -  person Robert Crovella    schedule 13.07.2019
comment
Приятно, раньше не сталкивался с этими требованиями. Так что, если на хосте нет графического процессора Tesla и есть Quadros? Мне все еще непонятно, какие шаги по установке мне нужны, чтобы предварительно сформировать dockerfile и / или собрать ..?   -  person JLuxton    schedule 13.07.2019
comment
Также важно знать версию драйвера графического процессора, установленного на хосте. Если на хосте установлен графический процессор Quadro, то библиотеки обратной совместимости с ним работать не будут, и ваша единственная возможность добиться успеха - это если случайно на хосте будет установлен более новый драйвер, чем типичный драйвер CUDA 9. Если на вашем хосте установлен типичный драйвер CUDA 9, и это графический процессор Quadro, нет возможности запустить контейнер, который зависит от CUDA 10.   -  person Robert Crovella    schedule 13.07.2019
comment
Кроме того, хотя он не отвечает на ваш вопрос напрямую, этот поток содержит некоторую, возможно, полезную информацию относительно использования библиотеки совместимости и контейнеров. Но опять же, библиотека совместимости не будет работать с графическим процессором Quadro гарантированно.   -  person Robert Crovella    schedule 13.07.2019
comment
Взаимосвязь между требуемым драйвером графического процессора (например, установленным на базовой машине) и поддерживаемой версией CUDA (например, какая версия CUDA вы можете или хотите использовать в контейнере) выражена в таблице 1 здесь. Поскольку у вас есть графический процессор Quadro на вашем базовом компьютере, механизм библиотеки совместимости не может быть использован, и ваша единственная надежда на запуск контейнера CUDA 10.0 - это случайная установка более нового драйвера, такого как 410.48 (или новее / новее), на ПК. базовая машина.   -  person Robert Crovella    schedule 13.07.2019
comment
Если на вашей базовой машине установлен драйвер 396.xx или ниже, невозможно запустить контейнер CUDA 10.0 (или выше), если базовая машина содержит GPU Quadro.   -  person Robert Crovella    schedule 13.07.2019
comment
Спасибо, Роберт, не те новости, на которые я надеялся, но очень полезные. Похоже, мне нужно обновить хост-машину или попытаться сделать мое приложение совместимым с CUDA 9, если я не могу обновить хост ... потому что нет возможности использовать библиотеки обратной совместимости для Quadro ...   -  person JLuxton    schedule 13.07.2019


Ответы (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.

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

person Robert Crovella    schedule 13.07.2019
comment
Как насчет хост-машины CUDA 10 и R430, но я хочу запустить контейнер с кодами CUDA 9? Как-то это дает мне Failed to initialize NVML: Driver/library version mismatch - person Raven Cheuk; 24.07.2020
comment
Значит, вы неправильно установили или использовали nvidia container toolkit. Вы не должны устанавливать какие-либо компоненты драйвера в контейнер (что вы и сделали). Вы должны позволить инструментарию контейнера справиться с этим. Драйвер устанавливается только на хост-машину. Взгляните на контейнеры nvidia cuda (файлы докеров), чтобы увидеть, как они построены. - person Robert Crovella; 24.07.2020
comment
Итак, Failed to initialize NVML: Driver/library version mismatch означает, что я установил драйвер внутри контейнера? Поскольку я создал этот контейнер давным-давно, я забыл, что делал тогда ... Но упомянутые мною CUDA 10 и R430 находятся на хосте, а не внутри контейнера. - person Raven Cheuk; 24.07.2020
comment
да, вот что это значит. И вы не должны этого делать, когда используете инструментарий контейнера nvidia. Если вы не используете набор инструментов контейнера nvidia, вы должны убедиться, что драйвер, установленный на хосте, точно соответствует драйверу, установленному в контейнере. Рекомендуется не заморачиваться с этим, а вместо этого использовать инструментарий контейнера nvidia, который сделает это за вас. В этом случае не устанавливайте драйверы графического процессора или компоненты драйверов в контейнер. - person Robert Crovella; 24.07.2020
comment
Есть ли способ заставить этот контейнер снова работать? Как удалить драйверы из контейнера? - person Raven Cheuk; 24.07.2020
comment
задайте пожалуйста новый вопрос, я не смогу разобраться в комментариях - person Robert Crovella; 24.07.2020
comment
Спасибо за быстрый ответ. Вот ссылка на мой вопрос stackoverflow.com/questions/63079329/ - person Raven Cheuk; 24.07.2020