Автоматически "останавливать" экземпляр ноутбука Sagemaker после бездействия?
У меня есть экземпляр ноутбука Sagemaker Jupyter, который я по-прежнему оставляю в сети по ночам по ошибке, излишне тратя деньги...
Есть ли какой-нибудь способ автоматически остановить экземпляр ноутбука Sagemaker, если в течение 1 часа нет активности? Или я должен был бы сделать собственный сценарий?
6 ответов
К сожалению, автоматическая остановка экземпляра Notebook при отсутствии активности в SageMaker невозможна. Чтобы не оставлять их на ночь, вы можете написать задание cron, чтобы проверить, работает ли экземпляр Notebook ночью, и остановить их, если это необходимо.
Вы можете использовать конфигурации жизненного цикла, чтобы настроить автоматическое задание, которое остановит ваш экземпляр после бездействия.
Есть репозиторий GitHub, в котором есть образцы, которые вы можете использовать. В репозитории есть скрипт auto-stop-idle, который отключит ваш экземпляр, если он простаивает более 1 часа.
Что вам нужно сделать, это
- создать конфигурацию жизненного цикла с помощью скрипта и
- свяжите конфигурацию с экземпляром. Вы можете сделать это при редактировании или создании экземпляра Notebook.
Если вы считаете, что 1 час - это слишком долго, вы можете настроить сценарий. Эта строка имеет значение.
После того, как мы сожгли довольно много денег, забыв выключить эти машины, я решил создать сценарий. Он основан на сценарии AWS, но дает объяснение, почему машина была или не была убита. Он довольно легкий, потому что не использует никакой дополнительной инфраструктуры, такой как Lambda.
Вот сценарий и инструкция по его установке! Это просто простая конфигурация жизненного цикла!
Вы также можете использовать CloudWatch + Lambda для мониторинга Sagemaker и остановиться, когда ваша загрузка достигнет минимума. Вот список того, что доступно в CW для SM: https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html.
Например, вы можете настроить сигнал CW на срабатывание, когда загрузка ЦП упадет ниже ~5% в течение 30 минут, и получить этот сигнал Lambda, который отключит ноутбук.
Ядра SageMaker Studio Notebook можно отключить, присоединив к домену следующий сценарий конфигурации жизненного цикла.
Ресурс
Вы можете использовать этот код:
#!/bin/bash
set -ex
# OVERVIEW
# This script stops a SageMaker notebook once it's idle for more than 1 hour (default time)
# You can change the idle time for stop using the environment variable below.
# If you want the notebook the stop only if no browsers are open, remove the --ignore-connections flag
#
# Note that this script will fail if either condition is not met
# 1. Ensure the Notebook Instance has internet connectivity to fetch the example config
# 2. Ensure the Notebook Instance execution role permissions to SageMaker:StopNotebookInstance to stop the notebook
# and SageMaker:DescribeNotebookInstance to describe the notebook.
#
# PARAMETERS
IDLE_TIME=3600
echo "Fetching the autostop script"
wget https://raw.githubusercontent.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-config-samples/master/scripts/auto-stop-idle/autostop.py
echo "Detecting Python install with boto3 install"
# Find which install has boto3 and use that to run the cron command. So will use default when available
# Redirect stderr as it is unneeded
CONDA_PYTHON_DIR=$(source /home/ec2-user/anaconda3/bin/activate /home/ec2-user/anaconda3/envs/JupyterSystemEnv && which python)
if $CONDA_PYTHON_DIR -c "import boto3" 2>/dev/null; then
PYTHON_DIR=$CONDA_PYTHON_DIR
elif /usr/bin/python -c "import boto3" 2>/dev/null; then
PYTHON_DIR='/usr/bin/python'
else
# If no boto3 just quit because the script won't work
echo "No boto3 found in Python or Python3. Exiting..."
exit 1
fi
echo "Found boto3 at $PYTHON_DIR"
echo "Starting the SageMaker autostop script in cron"
(crontab -l 2>/dev/null; echo "*/5 * * * * $PYTHON_DIR $PWD/autostop.py --time $IDLE_TIME --ignore-connections >> /var/log/jupyter.log") | crontab -