Отладка Pycharm с использованием docker с графическими процессорами - PullRequest
3 голосов
/ 08 января 2020

Цель:

Для отладки приложения 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 - он не работает

Вот конфигурация для запуска:

configuration

(я понимаю, что некоторые из этих путей могут выглядеть некорректно, но пока это не проблема)

Я установил для интерпретатора указатель на тот же docker image и запустите сценарий Python, задайте пользовательский LD_LIBRARY_PATH в качестве аргумента для запуска, который совпадает с locate d на docker изображении (я обнаружил его в интерактивном режиме внутри работающего контейнера ), но все равно устройство не найдено:

error message

Сообщение об ошибке показывает, что библиотеку CUDA удалось загрузить (т.е. она была найдена на этом LD_LIBRARY_PATH), но устройство все еще не найдено. Вот почему я считаю, что docker аргумент запуска --gpus=all должен быть где-то установлен. Я не могу найти способ сделать это в PyCharm.

Другие вещи, которые я пробовал:

  1. В PyCharm, используя Docker конфигурацию шаблона выполнения (вместо Python template) где можно указать run arguments , поэтому я надеялся передать --gpus=all, но, похоже, парсер этих опций не поддерживает:

parse error

Я попытался установить время выполнения по умолчанию равным 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.

1 Ответ

1 голос
/ 09 января 2020

Оказывается, что попытка 2. в разделе "Другие вещи, которые я пробовал" в моем посте была верным направлением, и с помощью следующего разрешенного удаленного интерпретатора PyCharm (изображение docker) найдите GPU, поскольку Терминал смог.

Я добавил следующее в /etc/docker/daemon.json:

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

Также необходимо перезапустить службу docker после сохранения файла:

sudo service docker restart

Примечание: это убивает все работающие docker контейнеры в системе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...