CNTK контейнеров Docker
Вы можете настроить CNTK в качестве контейнера Docker в системе Linux.
Существует два способа использования CNTK контейнеров Docker:
Использование изображений CNTK, опубликованных на Docker Hub
Мы размещаем общедоступные образы CNTK в Docker Hub. Полный список изображений, доступных на странице CNTK Репозитории, см. в Docker Hub. Сейчас мы размещаем только конфигурации среды выполнения . Конфигурация среды выполнения соответствует среде с установленным и настроенным двоичным пакетом CNTK. Эта конфигурация не содержит ни CNTK исходный код, ни предварительные требования, необходимые для сборки CNTK.
Обратите внимание, что для использования CNTK образов с поддержкой GPU требуется NVIDIA Docker.
Стандартные команды Docker используются для получения образа:
docker pull mcr.microsoft.com/cntk/release
для получения последнего официального образа выпуска, который сегодня означает последнюю доступную конфигурацию среды выполнения GPU. Вы также можете получить последнюю версию ночного образа разработки:
docker pull mcr.microsoft.com/cntk/nightly
Чтобы получить определенную конфигурацию, необходимо добавить тег. Пример:
docker pull mcr.microsoft.com/cntk/release:2.7-cpu-python3.5
вы получите CNTK конфигурацию среды выполнения ЦП 2.7 для Python 3.5.
Если вы не знакомы с Docker, прочитайте разделы ниже на этой странице.
Использование контейнера Docker для запуска CNTK Jupyter Notebook учебников
Контейнеры Docker можно использовать CNTK для запуска CNTK Записных книжек Jupyter в локальной среде.
Предполагается, что вы уже извлекли необходимые образы из Docker Hub. В приведенном ниже примере мы будем использовать конфигурацию GPU. Если вы используете конфигурацию ЦП, в приведенных ниже командах замените все вхождения nvidia-docker
на docker
.
Сначала создайте и запустите контейнер CNTK в режиме отсоединения с предоставленным IP-портом (мы используем порт 8888
по умолчанию для приложения Jupyter Notebook):
nvidia-docker run -d -p 8888:8888 --name cntk-jupyter-notebooks -t mcr.microsoft.com/cntk/release
Теперь запустите Jupyter Notebook сервер в контейнере Docker:
docker exec -it cntk-jupyter-notebooks bash -c "source /cntk/activate-cntk && jupyter-notebook --no-browser --port=8888 --ip=0.0.0.0 --notebook-dir=/cntk/Tutorials --allow-root"
В терминале вы увидите выходные данные консоли сервера Jupyter Notebooks. Эти выходные данные будут содержать следующую строку:
http://0.0.0.0:8888/?token=082684fbe2b43eebd72583c301c05072084173d0ac06a4d7
Скопируйте отображаемый маркер (в нашем примере 082684fbe2b43eebd72583c301c05072084173d0ac06a4d7
).
Теперь вы можете получить доступ к CNTK Jupyter Notebook с помощью IP-адреса компьютера, на котором выполняется контейнер Docker. Т. е. если ваш адрес компьютера — 192.168.1.1
это доступ к CNTK Записные книжки, откройте окно браузера и перейдите в раздел http://192.168.1.1:8888
.
Обратите внимание, что во время первого запуска Jupyter Notebook приложение запросит пароль или маркер. Используйте сохраненный выше маркер.
Чтобы остановить последовательность отправки Ctrl-C
сервера Jupyter Notebook в терминале, где есть выходные данные консоли сервера Notebook для юпитера, и подтвердите завершение работы сервера. Обратите внимание, что он не остановит сам контейнер Docker. Чтобы остановить контейнер, используйте команду:
docker stop cntk-jupyter-notebooks
ПРЕДУПРЕЖДЕНИЕ. Приведенные выше команды предоставляют приложению Jupyter Notebook для всех , кто может получить доступ к IP-адресу компьютера, на котором выполняется контейнер Docker.
Создание образов Docker CNTK
Вы можете создать и запустить CNTK с помощью того же контейнера, и это рекомендуемый подход для воспроизведения эталонной конфигурации.
Сначала необходимо установить Docker. Настоятельно рекомендуется следовать процессу установки в официальной документации docker. Версии, которые поставляются с дистрибутивом Linux, могут быть устаревшими и не будут работать nvidia-docker
(с которыми может потребоваться установить в дополнение к Docker, если планируется сборка и запуск образа GPU из одного контейнера). Кроме того, следуйте инструкциям в необязательном разделе, посвященном созданию группы Docker.
Соответствующие файлы Docker находятся в репозитории CNTK по адресуhttps://github.com/Microsoft/CNTK/tree/release/latest/Tools/docker
Чтобы создать образ Docker с CNTK и всеми его зависимостями, просто клонируйте репозиторий CNTK, перейдите к CNTK/Tools/docker
файлу Dockerfile, из которого требуется выполнить сборку (ЦП или GPU). Например, чтобы создать образ Docker с GPU CNTK, выполните следующую команду:
docker build -t cntk -f CNTK-GPU-Image/Dockerfile .
Аргумент -f <path/to/Dockerfile>
является обязательным, так как некоторые исправления, общие для файлов DOCKERFILE ЦП и GPU, должны применяться к исходному коду SWIG.
Если возникают ошибки, которые говорят Could not resolve 'archive.ubuntu.com'
, что необходимо предоставить Docker с IP-адресами DNS-серверов.
Сначала найдите IP-адреса DNS-серверов с помощью, например, команды
nm-tool
или команда
nmcli dev show
Предположим, что IP-адреса DNS-серверов и a.b.c.d
x.y.z.w
.
Следующее действие
- в Ubuntu 15.10 и более поздних версий (или в других linux, использующих systemd) измените
/lib/systemd/system/docker.service
, чтобы управляющая программа Docker была запущена с дополнительными параметрами.--dns a.b.c.d --dns x.y.z.w
- в Ubuntu 15.04 и более ранних версий (или других Linux, которые не используют системные) редактирование
/etc/default/docker
, чтобы строка
раскомментирован и содержит IP-адреса DNS-серверов.#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
Примечание. Некоторые компании блокируют общедоступные DNS-серверы, такие как 8.8.8.8 и 8.8.4.4. Вы можете попытаться использовать их, но если проблема не исчезнет, следует попытаться использовать IP-адреса DNS-сервера, сообщаемые.nm-tool/nmcli
Перезапустите управляемую программу Docker с помощью
sudo service docker restart
и удалите все образы Docker, созданные с неправильными параметрами DNS. Удаление всех образов Docker
docker rmi $(docker images -q)
Удаление всех контейнеров Docker
docker rm $(docker ps -a -q)
Теперь повторите попытку
docker build -t cntk -f CNTK-GPU-Image/Dockerfile .
Если у вас есть GPU, вы хотите проверить, можете ли вы получить к нему доступ через контейнер Docker после создания образа. Выполните следующую команду:
docker run --rm cntk nvidia-smi
Если это работает, все готово. Если это не так, это означает, что существует несоответствие между версией CUDA и (или) драйверами, установленными на узле и в образе Docker CNTK. В частности, несоответствие между модулем драйвера NVidia в режиме ядра и модулем пользовательского режима (который является общей библиотекой), и это происходит, если версия на узле точно не соответствует версии в контейнере. К счастью, это легко исправить. Просто установите nvidia-docker и используйте его точно так же, как Docker (не нужно перестраивать образ).
nvidia-docker run --rm cntk nvidia-smi
Это должно работать и позволяет CNTK использовать GPU из контейнера Docker. Если это не работает, выполните поиск в разделе "Проблемы" в GitHub nvidia-docker. Многие решения уже описаны. Обратите внимание, что если каталоги /usr и /var находятся в разных секциях, вам потребуется выполнить некоторые дополнительные действия, как показано здесь. Получение интерактивной оболочки в контейнер, который не будет автоматически удален после завершения работы
nvidia-docker run --name cntk_container1 -ti cntk bash
Если вы хотите предоставить общий доступ к данным и конфигурациям между узлом (компьютером или виртуальной машиной) и контейнером, в котором вы используете CNTK, используйте параметр -v, например.
nvidia-docker run --name cntk_container1 -ti -v /project1/data:/data -v /project1/config:/config cntk bash
Это сделает /project1/data from the host видимым как /data в контейнере и /project1/config как /config. Такая изоляция снижает вероятность перезаписи контейнерных экспериментов или использования неправильных данных.