Если ваша компания работает на 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 г.