Простой подход к запуску 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.