Цель:
Для отладки приложения Python в PyCharm, где я установил для интерпретатора настраиваемое изображение docker, используя Tensorflow и, следовательно, требующий графический процессор. Проблема в том, что командное здание PyCharm , насколько я могу судить, не предлагает способ обнаружения доступных графических процессоров.
Терминал - он работает:
Enter контейнер со следующей командой, указывающей, какие графические процессоры сделать доступными (--gpus
):
docker run -it --rm --gpus=all --entrypoint="/bin/bash" 3b6d609a5189 # image has an entrypoint, so I overwrite it
Внутри контейнера я могу запустить nvidia-smi
, чтобы увидеть, что найден графический процессор, и подтвердить, что Tensorflow находит его , используя:
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
# physical_device_desc: "device: 0, name: Quadro P2000, pci bus id: 0000:01:00.0, compute capability: 6.1"]
Если я не использую флаг --gpus
, графические процессоры не обнаруживаются, как ожидалось. Примечание: при использовании docker версии 19.03 и выше среды выполнения Nvidia изначально поддерживаются, поэтому нет необходимости в nvidia-docker
, а также аргумент docker -run --runtime=nvidia
также не рекомендуется. Соответствующий поток .
PyCharm - он не работает
Вот конфигурация для запуска:
(я понимаю, что некоторые из этих путей могут выглядеть некорректно, но пока это не проблема)
Я установил для интерпретатора указатель на тот же docker image и запустите сценарий Python, задайте пользовательский LD_LIBRARY_PATH
в качестве аргумента для запуска, который совпадает с locate
d на docker изображении (я обнаружил его в интерактивном режиме внутри работающего контейнера ), но все равно устройство не найдено:
Сообщение об ошибке показывает, что библиотеку CUDA удалось загрузить (т.е. она была найдена на этом LD_LIBRARY_PATH
), но устройство все еще не найдено. Вот почему я считаю, что docker аргумент запуска --gpus=all
должен быть где-то установлен. Я не могу найти способ сделать это в PyCharm.
Другие вещи, которые я пробовал:
- В PyCharm, используя Docker конфигурацию шаблона выполнения (вместо Python template) где можно указать run arguments , поэтому я надеялся передать
--gpus=all
, но, похоже, парсер этих опций не поддерживает:
Я попытался установить время выполнения по умолчанию равным
nvidia
в демоне docker, включив следующую конфигурацию в
/etc/docker/daemon.json
:
{
"runtimes": {
"nvidia": {
"runtimeArgs": ["gpus=all"]
}
}
}
I Я не уверен в правильном формате для этого, однако. Я пробовал несколько вариантов выше, но ничего не узнал графические процессоры. Пример выше, по крайней мере, может быть проанализирован и позволит мне перезапустить демон docker без ошибок.
Я заметил в официальных изображениях Tensorflow docker, что они устанавливают пакет (через apt install
) под названием nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda10.0
, который звучит как отличный инструмент, хотя, по-видимому, только для TensorRT. Я добавил его в свой Dockerfile как выстрел в темноте, но, к сожалению, это не решило проблему.
Добавление NVIDIA_VISIBLE_DEVICES=all
et c. к переменным окружения конфигурации PyCharm, без удачи.
Я использую Python 3.6, PyCharm Professional 2019.3 и Docker 19.03.