Простой подход к запуску VS Code в контейнере на SageMaker.

Ранее в этом году я опубликовал 2 руководства (здесь и здесь) по размещению код-сервера на SageMaker. В нем показано, как вы можете запускать VS Code на масштабируемых облачных вычислениях и кодировать из любого места, не беспокоясь о локальной настройке. Все, что вам нужно, это подключение к Интернету.

В этом посте мы пойдем еще дальше и покажем, как выполнять разработку на основе контейнеров в облаке, чтобы ускорить реализацию вашего проекта машинного обучения.

Мы возьмем пример образа контейнера Python 3.10 из Dockerhub и разработаем его с помощью VS Code на SageMaker. Вам потребуется доступ к SageMaker Notebook Instance, чтобы выполнить пример. Маленького должно хватить.

Почему контейнерная разработка в облаке помогает упростить ваши проекты машинного обучения?

При разработке на основе контейнеров вы пишете, выполняете и тестируете свой код машинного обучения внутри контейнеров. Это означает, что вы можете работать с теми же библиотеками и зависимостями, что и члены вашей команды, что упрощает совместную работу благодаря согласованным и воспроизводимым средам разработки.

Еще одно преимущество заключается в том, что вы разрабатываете и тестируете свой код в среде, которая может вести себя точно так же, как ваша производственная среда, помогая быстрее переходить от 0 к 1 в вашем проекте.

А хостинг кода-сервера на SageMaker обеспечивает минимальные изменения в локальном опыте разработки в VS Code, позволяя писать код из любого места на масштабируемых облачных вычислениях.

«Но я думал, что VS Code — это Open Source»

Как правило, с VS Code вы должны использовать расширение Dev Containers для разработки на основе контейнеров. Однако вы не можете использовать его с сервером кода или любыми другими проектами VS Code с открытым исходным кодом.

В то время как ядро ​​VS Code имеет открытый исходный код, рынок и многие расширения, опубликованные Microsoft, не являются таковыми. И Microsoft запрещает использование любого кода VS, отличного от Microsoft, для доступа к их рынку. См. Различия по сравнению с VS Code для более подробной информации.

Так как же тогда нам осуществлять разработку на основе контейнеров с помощью VS Code в SageMaker?

VS Code в вашем контейнере, размещенном на SageMaker

Таким образом, мы не можем перенести контейнер в IDE из-за проблем с лицензией расширения Microsoft. Но что, если мы вынесем IDE в контейнер? На самом деле код-сервер работает через Интернет и может работать где угодно. Настройка очень проста, и вы можете сделать это в 3 шага:

Шаг 1. Добавьте код-сервер в существующий файл Dockerfile.

Вы можете добавить code-server в свой контейнер с помощью одной строки кода. Вот пример его добавления в образ python 3.10 из Dockerhub.

Добавьте одну строчку и все!

Шаг 2. Создайте и запустите образ контейнера в экземпляре Notebook.

Запустите терминал через Jupyter/Jupyterlab вашего экземпляра Notebook:

Теперь вы можете перейти в папку Dockerfile и создать образ контейнера локально с помощью следующей команды:

# BUILD THE CONTAINER IMAGE LOCALLY
docker build -t ide-in-container:latest .

После сборки образа вы можете запустить контейнер с помощью команды запуска кода-сервера:

# RUN CONTAINER WITH VS CODE IN IT
docker run --rm -it -p 8080:8080 ide-in-container:latest code-server --auth none --disable-telemetry --bind-addr 0.0.0.0:8080

Мы предоставляем код-сервер для экземпляра через порт по умолчанию 8080.

Шаг 3. Доступ к VS Code через Jupyter Proxy экземпляра ноутбука

Теперь все, что вам нужно, это скопировать URL-адрес вашего экземпляра ноутбука, немного изменить его и вставить на новую вкладку:

На вкладке должен открыться VS Code:

Примечания

Чтобы еще больше упростить работу, вы можете смонтировать локальный том экземпляра Notebook и указать VS Code на существующую конфигурацию (расширения, привязки клавиш, настройки). В примере Dockerfile я указываю VS Code на папку /home/SageMaker/vscode-config config, которая у меня уже была на инстансе. Это делается с помощью переменной окружения XDG_DATA_HOME.

А вот как вы можете подключить том Notebook Instance к контейнеру:

# RUN THIS COMMAND IF YOU WANT TO MOUNT THE NOTEBOOK INSTANCE HOME/SAGEMAKER FOLDER
docker run --rm -it -p 8080:8080 -v /home/ec2-user/SageMaker/:/home/SageMaker ide-in-container:latest code-server --auth none --disable-telemetry --bind-addr 0.0.0.0:8080

Чтобы улучшить совместную работу, вы можете добавить этот «Dockerfile среды» в репозиторий своей проектной группы на GitHub. Таким образом, он будет версионным, и каждый сможет работать с одними и теми же зависимостями в любое время.

Заключение

Разработка внутри контейнеров с помощью облачных IDE может помочь оптимизировать ваш проект машинного обучения и совместную работу команды, упрощая запуск и тестирование кода в согласованной среде и предоставляя вам доступ к этой среде разработки из любого места.

В этом посте я поделился с вами простым подходом к запуску VS Code в контейнере, размещенном на Amazon SageMaker.

Чтобы пойти дальше, вы можете посетить 5 простых шагов к MLOps с GitHub Actions, MLflow и SageMaker Pipelines и узнать, как ваша команда может легко запустить сквозной проект MLOps с помощью GitHub Actions и SageMaker.