PyTorch - это гибкий фреймворк с открытым исходным кодом для экспериментов по глубокому обучению. В этом посте вы узнаете, как обучать работе PyTorch на Amazon SageMaker. Я покажу вам, как:
- создать собственный контейнер Docker для обучения ЦП и ГП,
- передать параметры скрипту PyTorch,
- сохраните обученную модель.
Мой код, как обычно, вы найдете на Github :)
Создание собственного контейнера
SageMaker предоставляет набор встроенных алгоритмов, а также среды для TensorFlow и MXNet… но не для PyTorch. К счастью, у разработчиков есть возможность создавать собственные контейнеры для обучения и прогнозирования.
Очевидно, что для успешного вызова настраиваемого контейнера SageMaker необходимо определить ряд соглашений:
- Имя сценариев обучения и прогнозирования: по умолчанию для них должно быть установлено соответственно «train» и «serve», они должны быть исполняемыми и иметь без расширения. SageMaker начнет обучение, запустив «docker run your_container train».
- Расположение гиперпараметров в контейнере: /opt/ml/input/config/hyperparameters.json.
- Расположение параметров входных данных в контейнере: / opt / ml / input / data.
Это потребует некоторых изменений в нашем скрипте PyTorch, хорошо известном примере изучения MNIST с помощью простого CNN. Как вы вскоре увидите, они незначительны, и у вас не возникнет проблем с их добавлением в собственный код.
Создание контейнера Docker
Вот файл Docker.
Начнем с образа CUDA 9.0, который также основан на Ubuntu 16.04. В нем есть все библиотеки CUDA, которые нужны PyTorch. Затем мы добавляем Python 3 и пакеты PyTorch.
В отличие от MXNet, PyTorch поставляется в едином пакете, который поддерживает обучение как процессора, так и графического процессора.
Как только это будет сделано, мы очищаем различные кеши, чтобы немного уменьшить размер контейнера. Затем мы копируем скрипт PyTorch в / opt / program с правильным именем («train») и делаем его исполняемым.
Для большей гибкости мы могли бы написать общую программу запуска, которая будет извлекать фактический обучающий сценарий из местоположения S3, переданного как гиперпараметр. Это оставлено в качестве упражнения для читателя;)
Наконец, мы устанавливаем каталог нашего скрипта как рабочий каталог и добавляем его в путь.
Это небольшой файл, но, как всегда, важна каждая деталь.
Создание репозитория Docker в Amazon ECR
SageMaker требует, чтобы извлекаемые им контейнеры размещались в Amazon ECR. Давайте создадим репо и войдем в него.
Сборка и продвижение наших контейнеров на ECR
Хорошо, теперь пора создать оба контейнера и отправить их в репозиторий. Мы сделаем это отдельно для версий CPU и GPU. Строго о Docker. Подробную информацию о переменных см. В записной книжке.
Когда мы закончим, все должно выглядеть так, и вы также должны увидеть свой контейнер в ECR.
Часть Docker окончена. Теперь давайте настроим наше учебное задание в SageMaker.
Настройка учебного задания
На самом деле это совсем не впечатляет, и это отличная новость: ничем особо не отличается от обучения по встроенному алгоритму!
Сначала нам нужно загрузить набор данных MNIST с нашего локального компьютера на S3. Мы делали это много раз раньше, здесь ничего нового.
Затем мы настраиваем задание на обучение следующим образом:
- выбираем один из только что построенных контейнеров и устанавливаем обычные параметры для SageMaker оценки,
- передача гиперпараметров скрипту PyTorch.
- передача входных данных в скрипт PyTorch.
В отличие от Keras, PyTorch имеет API-интерфейсы для проверки доступности CUDA и определения количества доступных графических процессоров. Таким образом, нам не нужно передавать эту информацию в гиперпараметре. Обучение работе с несколькими GPU тоже возможно, но требует дополнительной работы: MXNet делает его намного проще.
Это для тренировки. Последняя часть, которую нам не хватает, - это адаптация нашего скрипта PyTorch для SageMaker. Давай перейдем к делу.
Адаптация скрипта PyTorch для SageMaker
Нам нужно позаботиться о гиперпараметрах, входных данных, конфигурации нескольких графических процессоров, загрузке набора данных и сохранении моделей.
Передача гиперпараметров и конфигурация входных данных
Как упоминалось ранее, SageMaker копирует гиперпараметры в /opt/ml/input/config/hyperparameters.json. Все, что нам нужно сделать, это прочитать этот файл, извлечь параметры и, при необходимости, установить значения по умолчанию.
Аналогичным образом SageMaker копирует конфигурацию входных данных в / opt / ml / input / data. Мы будем действовать точно так же.
В этом примере мне не нужна эта информация о конфигурации, но вот как бы вы ее прочитали, если бы она была :)
Загрузка набора для обучения и проверки
При обучении в файловом режиме (как в данном случае) SageMaker автоматически копирует набор данных в / opt / ml / input / ‹channel_name›: здесь мы определили Каналы обучения и проверки, поэтому нам придется:
- читать файлы MNIST из соответствующих каталогов,
- построить объекты DataSet для обучающего и проверочного набора,
- загрузить их с помощью объекта DataLoader.
Сохранение модели
Последнее, что нам нужно сделать после завершения обучения, - это сохранить модель в / opt / ml / model:. SageMaker захватит все артефакты, присутствующие в этом каталоге, построит файл с именем model.tar.gz и скопируйте его в корзину S3, используемую учебным заданием.
Вот и все. Как видите, все дело в взаимодействии вашего скрипта с вводом и выводом SageMaker. Основная часть вашего кода PyTorch не требует каких-либо изменений.
Запуск скрипта
Хорошо, давайте запустим это на экземпляре p3.2xlarge.
Давайте проверим сегмент S3.
$ aws s3 ls $BUCKET/pytorch/output/pytorch-mnist-cnn-2018-06-02-08-16-11-355/output/ 2018-06-02 08:20:28 86507 model.tar.gz $ aws s3 cp $BUCKET/pytorch/output/pytorch-mnist-cnn-2018-06-02-08-16-11-355/output/ . $ tar tvfz model.tar.gz -rw-r--r-- 0/0 99436 2018-06-02 08:20 mnist-cnn-10.pt
Довольно круто, правда? Теперь мы можем использовать эту модель где угодно.
На сегодня все. Еще один (надеюсь) хороший пример использования SageMaker для обучения пользовательских заданий в полностью управляемой инфраструктуре!
С удовольствием отвечу на вопросы здесь или в Твиттере. Чтобы узнать больше, посетите мой YouTube канал.
Очевидный выбор;)