из хакнуна
Сборник "Сердце машины"
Участие: Хуан Сяотянь, Лу Сюэ
Docker имеет много преимуществ, но есть и некоторые препятствия для использования Docker, когда речь идет о науке о данных и глубоком обучении. В этой статье представлен набор утилит Docker, а также готовые шаблоны для GPU, поэтому давайте посмотрим, что может сделать причудливый Docker Compose + GPU + TensorFlow.
Docker великолепен — все больше и больше людей используют его для разработки и распространения. У Docker много преимуществ: мгновенная настройка среды, независимые от платформы приложения, готовые решения, улучшенный контроль версий, упрощенное обслуживание.
Но когда дело доходит до науки о данных и глубокого обучения, существуют некоторые препятствия для использования Docker. Вы должны помнить все флаги Docker, чтобы совместно использовать порты и файлы между хостом и контейнерами, создавать ненужные сценарии run.sh и обрабатывать версии CUDA и совместное использование GPU. Вы знаете боль, если вы когда-либо видели эту ошибку:
Наша цель
Цель этой статьи — познакомить вас с серией утилит Docker, а также с готовым шаблоном для GPU, который мы часто используем в компании.
Поэтому следующие результаты не появятся:
Вместо этого этот результат:
здорово!
Чего мы на самом деле хотим добиться:
- Управляйте состоянием нашего приложения (запуск, остановка, удаление) с помощью одной команды
- Сохраните все флаги запуска в один файл конфигурации, который мы можем зафиксировать в репозитории git.
- Забудьте о несоответствии версии драйвера графического процессора и совместном использовании
- Используйте контейнеры с поддержкой графического процессора в производственных инструментах, таких как Kubernetes или Rancher.
Итак, вот список инструментов, которые мы настоятельно рекомендуем каждому глубоко обучающемуся:
1. CUDA
Во-первых, вам понадобится набор инструментов CUDA, который необходим, если вы планируете обучать модель самостоятельно. Мы рекомендуем использовать тип установщика runfile вместо deb, поскольку он не будет запутывать зависимости в будущих обновлениях.
(Необязательно) Как проверить, работает ли это:
2. Docker
Вы не хотите засорять свой компьютер кучей библиотек и боитесь проблем с версиями. Опять же, вам не нужно собирать и устанавливать его самостоятельно — обычно программное обеспечение создается для вас и упаковывается в образ. Установить Docker очень просто:
3. Nvidia Docker
При использовании Docker обязательно должна быть утилита от NVIDIA (https://github.com/NVIDIA/nvidia-docker), которая действительно упрощает этапы использования графических процессоров внутри контейнеров Docker.
Установка очень проста:
Теперь вместо того, чтобы каждый раз делиться своим устройством NVIDIA:
Вы можете использовать команду nvidia-docker:
Кроме того, вам не нужно беспокоиться о несоответствии версий драйверов: плагин Nvidia docker поможет вам.
4. Docker Compose
Супер полезная утилита, которая позволяет вам хранить конфигурацию запуска докера в файле и более легко управлять состоянием приложения. Хотя он предназначен для составления нескольких контейнеров Docker, docker compose по-прежнему очень полезен, когда у вас есть только один сервис. Здесь есть стабильная версия (https://github.com/docker/compose/releases):
5. Nvidia Docker Compose
К сожалению, Docker Compose не знает о существовании Nvidia Docker. К счастью, есть обходной путь: есть небольшой скрипт Python, который генерирует конфигурацию с помощью драйвера nvidia-docker. Установите Nvidia Docker Compose через pip:
Теперь вы можете использовать команду nvidia-docker-compose вместо docker-compose.
альтернатива
Если вы не хотите использовать nvidia-docker-compose, вы можете передать драйвер тома вручную, просто добавив эти параметры в docker-compose.yml:
6. Псевдонимы Bash
Но nvidia-docker-compose занимает 21 символ, что слишком много.
К счастью, мы можем использовать псевдонимы bash. Откройте ~/.bashrc (иногда ~/.bash_profile) в вашем любимом редакторе и введите следующую строку кода:
Обновите свои настройки, запустив source ~/.bashrc .
Запустить обслуживание TensorFlow
Теперь мы готовы воспользоваться всеми вышеперечисленными инструментами. Например, давайте запустим контейнер Docker с поддержкой графического процессора Tensorflow.
Создайте файл docker-compose.yml в каталоге проекта со следующим содержимым:
Теперь мы можем запустить TensorFlow Jupiter с помощью одной команды:
doc — это псевдоним для nvidia-docker-compose — он сгенерирует модифицированный файл конфигурации nvidia-docker-compose.yml с правильным драйвером тома, а затем запустит docker-compose.
Вы можете управлять своими сервисами с помощью той же команды:
в заключении
Но стоит ли? Давайте посмотрим на плюсы и минусы ниже.
преимущество
- Нет необходимости рассматривать совместное использование устройств GPU
- Перестаньте беспокоиться о версиях драйверов Nvidia
- Избавьтесь от командных флагов, которые поддерживают чистую и простую конфигурацию
- Флаг --name больше не нужен для управления состоянием контейнера.
- Хорошо известные документированные и широко используемые утилиты
- Ваша конфигурация готова для инструментов оркестрации, таких как Kubernetes, которые понимают файлы для создания докеров.
недостаток
- вам нужно установить больше инструментов
Готово к производству
да. В приложении рекомендации фильмов Movix мы используем сеть TensorFlow с ускорением на графическом процессоре для вычисления выбора фильмов в реальном времени на основе пользовательского ввода.
У нас есть три компьютера с Nvidia Titan X в нашем кластере Rancher на Proxy API. Конфигурация хранится в обычном файле docker-compose.yml: поэтому развернуть приложение на новом сервере или настроить среду разработки несложно. До сих пор он работал безупречно.
Будьте готовы к будущему машинного обучения!
Исходная ссылка: https://hackernoon.com/docker-compose-gpu-tensorflow-%EF%B8%8F-a0e2011d36