Если ваша компания работает на AWS, вполне вероятно, что AWS Sagemaker является центральной частью инфраструктуры, которую вы используете ежедневно. Поразительно, насколько просто запустить экземпляр и получить много ресурсов ЦП и ГП для экспериментов.
Однако остановить это - совсем другая история. Если вы забудете остановить экземпляр вручную, это может стоить вам больших денег.
Из этого руководства вы узнаете, как сэкономить деньги, останавливая неактивные экземпляры SageMaker.
Решение:
- Имеет очень простую настройку (использует скрипты жизненного цикла)
- Настраивается (время остановить машину)
- Не требует дополнительной инфраструктуры (без Lambda или CloudWatch)
- Оставляет журналы с объяснением, почему экземпляр был или не был остановлен.
Конфигурация жизненного цикла
Мы создадим новую конфигурацию жизненного цикла (или отредактируем ту, которую уже используют ваши экземпляры). Каждый раз, когда запускается экземпляр с конфигурацией жизненного цикла, он запускает набор сценариев от имени пользователя root.
В рамках этой конфигурации жизненного цикла мы внедрим сценарий, который проверяет, активен ли ваш экземпляр, и отключает его, если это не так (по умолчанию после одного часа бездействия).
Давайте сделаем это!
- В консоли AWS перейдите в SageMaker - ›Конфигурации жизненного цикла.
- Создать новую конфигурацию жизненного цикла
- В разделе «Сценарии» убедитесь, что открыта вкладка «Начать записную книжку».
- Вставьте этот код
- Сохраните конфигурацию
- Если вы создаете новый экземпляр, убедитесь, что вы создали экземпляр с такой конфигурацией жизненного цикла (как показано на рисунке ниже).
- Если у вас уже есть экземпляр, остановите его, нажмите «Изменить», нажмите «Дополнительная конфигурация» и выберите созданную вами конфигурацию жизненного цикла.
Вот и все!
Каждый раз, когда запускается экземпляр с этой конфигурацией жизненного цикла, он устанавливает autostop.py
скрипт. Скрипт следит за активностью ядра Jupyter и установленными соединениями с сервером Jupyter. Если его нет, он начинает отсчет до выключения.
Разрешения
Чтобы убедиться, что сценарий может завершить работу экземпляра, экземпляру, запускающему сценарий, потребуются соответствующие разрешения. Вот как это сделать:
- Перейдите к своему экземпляру и найдите
Permissions and encryptions
раздел - Нажмите на IAM роль ARN.
- Нажмите Прикрепить политики.
- Нажмите кнопку "Создать политику".
- Вставьте JSON (не стесняйтесь ограничивать ресурсную часть только своим экземпляром)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"sagemaker:StopNotebookInstance",
"sagemaker:DescribeNotebookInstance"
],
"Resource": "*"
}
]
}
- Сохраните новую политику с именем «sagemaker-autostop».
- Вернитесь на экран, где вы можете щелкнуть ссылку ARN роли IAM и щелкнуть ее.
- Прикрепите политику sagemaker-autostop к роли IAM.
Настройка скрипта
По умолчанию сценарий отключит ваш экземпляр через час бездействия. Если вы хотите это изменить, измените переменную IDLE_TIME
. Он определяется после строки # PARAMETERS
.
логирование
Настроенный нами сценарий запускается каждые пять минут и регистрирует результат. Журналы можно найти в двух местах:
- Например, в
/home/ec2-user/SageMaker/auto-stop-idle.log
- В CloudWatch
Безопасно ли запускать `curl <url> | bash
?
В общем, это может быть небезопасно. Он скачивает произвольный код и сразу его выполняет. Это та же проблема безопасности, что и для всех реестров пакетов - если моя учетная запись GitHub будет взломана, кто-то может заменить текущий код чем-то вредоносным.
Однако эту угрозу можно уменьшить. Вы можете убедиться, что он всегда загружает проверенный вами код, конкретный коммит git. Для этого выберите конкретный коммит git вместо того, чтобы указывать на master
в URL-адресе.
Вот пример такого скрипта, указывающий на скрипты, опубликованные в день написания этого сообщения в блоге.
Если вы хотите читать больше подобных статей, подписывайтесь на мой блог!
Первоначально опубликовано на https://biasandvariance.com 14 марта 2020 г.