Как пользоваться Deepo и Docker в облачных GPU?
В статье мы расскажем о технологии Docker Cloud на облачном хостинге GPU в REG.RU.
Deepo — это Docker-образ, который:
- позволяет быстро настроить среду глубокого обучения;
- поддерживает почти все популярные фреймворки;
- поддерживает работу с графическими ускорителями, содержит CUDA и cuDNN, а также работает в режиме CPU-only;
- работает на Linux (версия CPU / версия GPU), Windows (версия CPU) и MacOS (версия CPU).
В репозитории Deepo также можно найти генератор для создания Deepo-образов и настройки собственного окружения.
В этом туториале мы расскажем, как работать с Deepo и Docker на облачном сервере с GPU.
Как зайти в docker-контейнер Deepo и работать с ним?
Deepo стартует при запуске сервера, поэтому можно сразу же пользоваться любыми доступными фреймворками через консоль или в Jupyter Notebook.
Если вы хотите зайти в докер-контейнер через консоль:
-
1.
Зайдите на сервер с Ubuntu, используя подключение SSH.
-
2.
Выведите список доступных контейнеров с помощью команды:
docker container ls -a
-
3.
Убедитесь, что в списке присутствует контейнер с именем deepo:
CONTAINER ID IMAGE STATUS NAMES c422bb11132e regru/deepo:latest ... Up 30 minutes deepo
-
4.
Введите команду docker exec для подключения к запущенному контейнеру:
docker exec -it deepo /bin/bash
Готово! Вы вошли в контейнер и теперь можете пользоваться доступными библиотеками. Чтобы выйти из контейнера, наберите в терминале exit.
Как создать свой docker-контейнер?
Основой docker-контейнеров являются docker-образы. Сам образ неизменяем, а при запуске он преобразуется в контейнер — изолированную среду, где вы можете устанавливать и настраивать все необходимые пакеты. После этого изменённый контейнер можно сохранить как новый образ или обновить существующий.
Перед тем как создать докер-контейнер, напишите Dockerfile — набор инструкций, на основе которых строится образ.
-
1.
Зайдите на сервер с Ubuntu, используя подключение SSH.
-
2.
Создайте новую директорию и сам Dockerfile:
mkdir ~/myimages cd ~/myimages/ touch Dockerfile
-
3.
Откройте файл с помощью vim:
vim Dockerfile
Нажмите i, чтобы перейти в режим вставки (insert mode).
-
4.
Для примера напишем несколько простых команд для создания образа с Ubuntu 16.04:
Берём версию ubuntu 16.04FROM ubuntu:16.04
Обновляем пакетыRUN apt update && apt full-upgrade -y
С полным списком команд для создания образов можно ознакомиться в документации Docker Cloud Server.
-
5.
Сохраняем файл, нажав ESC и введя:
:wq
-
6.
Теперь соберите образ, используя команду docker build:
docker build -t my/image ~/myimages
Где my/image — название образа, ~/myimages — путь к директории, в которой находится Dockerfile.
-
7.
Проверьте, что сборка прошла успешно и образ появился в системе:
docker images | grep 'my/image'
Вы должны увидеть строку вида:
my/image latest be144b0999df 13 seconds ago 144MB
-
8.
Чтобы запустить контейнер c поддержкой CUDA, выполните:
nvidia-docker run -it my/image /bin/bash
Если вам не требуется поддержка CUDA для контейнера, используйте:
docker run -it my/image /bin/bash
Готово! Теперь вы можете использовать свой контейнер на сервере.
Как создать Docker-образ?
Вы можете сохранить контейнер в виде нового образа или обновить существующий образ.
Перед тем как создать докер-образ, узнайте ID контейнера.
-
1.
Выйдите из запущенного контейнера с помощью команды exit. Затем введите команду:
docker ps -a
Вы увидите сведения обо всех контейнерах:
CONTAINER ID IMAGE STATUS NAMES c422bb11132e regru/deepo:latest ... Up 30 minutes deepo
-
2.
Сохраняем контейнер как новый образ. Выполните команду:
docker commit c422bb11132e new/deepo:latest
Где c422bb11132e — ID сохраняемого контейнера, new/deepo — название нового образа, latest — тэг (версия образа, опционально).
Убедиться, что новый образ появился в системе, можно с помощью команды docker images.
-
3.
Обновляем существующий образ. В этом случае следует указывать тэг для обновлённого контейнера, чтобы отслеживать внесённые изменения:
docker commit c422bb11132e regru/deepo:new_version
Посмотреть последние изменения можно с помощью команды docker diff:
docker diff c422bb11132e
Как создать собственный образ Deepo?
Если вы не хотите пользоваться решением «all-in-one» для Deepo, можете собрать собственный образ только с необходимыми для работы библиотеками или другой версией Python (по умолчанию используется Python 3.6).
Для этого при создании сервера выберите конфигурацию без предустановленного Deepo.
-
1.
Зайдите на сервер с Ubuntu, используя подключение SSH.
-
2.
Подготовьте генератор:
git clone https://github.com/ufoym/deepo.git cd deepo/generator
-
3.
Сгенерируйте собственный Dockerfile:
python3 generate.py Dockerfile tensorflow
Эта команда сгенерирует Dockerfile, который содержит сборку TensorFlow. Генератор автоматически обрабатывает зависимости, так что вам не нужно о них беспокоиться.
Вы также можете указать версию Python:
python3 generate.py Dockerfile tensorflow python==2.7
-
4.
Соберите докер-образ:
docker build -t my/deepo .
Не забудьте про точку в конце команды — аргумент PATH. Он указывает, где найти файлы для сборки контейнера, в нашем случае — в текущем каталоге. Процесс сборки может занять несколько минут.
-
5.
Проверьте, что сборка прошла успешно и образ появился в системе:
docker images | grep 'my/deepo'
Вы должны увидеть строку вида:
my/deepo latest 5d782b009ae7 13 seconds ago 1.23GB
-
6.
Чтобы запустить созданный контейнер, используйте:
nvidia-docker run -it my/deepo /bin/bash
Как загрузить свой docker-образ на сервер GPU и работать с ним?
Как загрузить локальный образ
Чтобы загрузить образ с вашего компьютера на сервер, необходимо выполнить следующие действия:
-
1.
На локальном компьютере сохраните образ в виде tar-архива:
docker save -o ~/myimage1.tar my/image1:latest
Где ~/myimage1.tar — путь к архиву.
-
2.
Скопируйте полученный файл на сервер:
scp ~/myimage1.tar root@123.123.123.123:~/myimages
Где 123.123.123.123 — адрес сервера, ~/myimages — директория, в которую будет помещён файл образа.
-
3.
Теперь зайдите на сервер и загрузите образ в Docker:
docker load -i ~/myimages/myimage1.tar
Убедитесь, что образ появился в системе с помощью команды docker images.
Как загрузить образ из репозитория
Для скачивания Docker-образов из удалённых репозиториев существует команда docker pull. По умолчанию, образы загружаются с Docker Hub, но можно указать приватный репозиторий.
Перед выполнением команды убедитесь, что необходимый образ присутствует в Docker Hub.
Синтаксис команды: $ docker pull [options] [PATH/]image_name[:tag_name]
Где options — параметры команды (опционально), PATH — путь к образу (опционально), image_name — название образа, tag_name — тэг (опционально).
-
1.
Скачиваем последнюю версию образа:
$ docker pull centos
или$ docker pull centos:latest
-
2.
Скачиваем конкретную версию образа:
$ docker pull centos:centos7.4.1708
или$ docker pull centos:7.4.1708
-
3.
Скачиваем все доступные образы:
$ docker pull -a centos
-
4.
Скачиваем образ из приватного репозитория. Синтаксис команды:
$ docker pull [options] address:port[/PATH]/image_name[:tag_name]
Где address — адрес репозитория в Интернете, port — используемый порт.
Пример:
$ docker pull registry.example.com:5000/test-image
$ docker pull registry.example.com:5000/projects/test-image:0.2
$ docker pull -a registry.example.com:5000/projects/test-image
Если репозиторий защищён паролем, то перед загрузкой образа необходимо авторизоваться: $ docker login registry.example.com:5000
Видео: Как пользоваться Docker и контейнером Deepo в облачных GPU
помогла
Не нашли ответа на свой вопрос?
Нужна помощь?
Напишите в службу поддержки!