Я пытаюсь настроить файл конфигурации жизненного цикла (LCC), чтобы реализовать функцию автоматического завершения работы при достижении порога простоя для редактора кода sagemaker. Я следил за решением этого вопроса. Я могу увидеть и выбрать файл LCC в пользовательском интерфейсе студии amazon sagemaker после успешного выполнения шагов, но экземпляры не отключаются после 1 часа простоя (пример ниже составляет 60 секунд для тестирования).
Это файл LCC:
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0
#!/bin/bash
set -eux
ASI_VERSION=0.3.0
# User variables [update as needed]
IDLE_TIME_IN_SECONDS=60 # in seconds, change this to desired idleness time before app shuts down
# System variables [do not change if not needed]
CONDA_HOME=/opt/conda/bin
LOG_FILE=/var/log/apps/app_container.log # Writing to app_container.log delivers logs to CW logs.
SOLUTION_DIR=/var/tmp/auto-stop-idle # Do not use /home/sagemaker-user
PYTHON_PACKAGE=sagemaker_code_editor_auto_shut_down-$ASI_VERSION.tar.gz
PYTHON_SCRIPT_PATH=$SOLUTION_DIR/sagemaker_code_editor_auto_shut_down/auto_stop_idle.py
# Installing cron
sudo apt-get update -y
sudo sh -c 'printf "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d'
sudo apt-get install -y cron
# Creating solution directory.
sudo mkdir -p $SOLUTION_DIR
# Downloading autostop idle Python package.
echo "Downloading autostop idle Python package..."
curl -LO --output-dir /var/tmp/ https://github.com/aws-samples/sagemaker-studio-apps-lifecycle-config-examples/releases/download/v$ASI_VERSION/$PYTHON_PACKAGE
sudo $CONDA_HOME/pip install -U -t $SOLUTION_DIR /var/tmp/$PYTHON_PACKAGE
# Touch file to ensure idleness timer is reset to 0
echo "Touching file to reset idleness timer"
touch /opt/amazon/sagemaker/sagemaker-code-editor-server-data/data/User/History/startup_timestamp
# Setting container credential URI variable to /etc/environment to make it available to cron
sudo /bin/bash -c "echo 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' >> /etc/environment"
# Add script to crontab for root.
echo "Adding autostop idle Python script to crontab..."
echo "*/2 * * * * /bin/bash -ic '$CONDA_HOME/python $PYTHON_SCRIPT_PATH --time $IDLE_TIME_IN_SECONDS --region $AWS_DEFAULT_REGION >> $LOG_FILE'" | sudo crontab -
Ваш общий подход верен, если вы собираетесь использовать CodeEditor.
В вашем последнем вопросе вы имеете в виду JupyterLab. Я бы предложил убедиться, что вы действительно используете CodeEditor, а не JupyterLab. SageMaker Studio предоставляет оба редактора, и для каждого из этих редакторов необходимо зарегистрировать разные LCC.
Для JupyterLab вы можете найти сценарий LCC и инструкции по его регистрации здесь: https://github.com/aws-samples/sagemaker-studio-apps-lifecycle-config-examples/tree/main/jupyterlab /авто-стоп-холостой ход
Если вы намерены использовать CodeEditor, а LCC не работает, я бы посоветовал проверить журналы CloudWatch. Сценарий LCC устанавливает задание cron, которое проверяет состояние простоя каждые две минуты и записывает это в CloudWatch.
У вас также есть возможность вручную вызвать скрипт в приложении CodeEditor. Откройте терминал в CodeEditor (Терминал > Новый терминал) и выполните:
# this example uses 1800 seconds as idle time threshold
/opt/conda/bin/python /var/tmp/auto-stop-idle/sagemaker_code_editor_auto_shut_down/auto_stop_idle.py --time 1800 --region $AWS_DEFAULT_REGION
Это должно обеспечить вывод вроде:
2024-04-16T06:16:55.359295z - [auto-stop-idle] - Logging time difference between current time and time files were last changed 80.18277621269226.
2024-04-16T06:16:55.359445z - [auto-stop-idle] - Logging time difference between current time and time files were last changed inf.
2024-04-16T06:16:55.359476z - [auto-stop-idle] - SageMaker Code Editor app is not idle. Passing check.
Если время простоя превышено, запуск сценария фактически завершит работу вашего приложения CodeEditor. Это должен быть быстрый способ проверить, работает ли сценарий в вашей среде.
Я должен упомянуть, спасибо за приведенный выше код, я могу подтвердить, что сценарий автоматически завершает работу при запуске с терминала, но он не завершается автоматически, возможно, что-то не так с заданием cron (хотя журналы ничего не предполагают), я действительно в замешательстве. Совершенно нежизнеспособный продукт от AWS, если этот базовый функционал глючит.
Судя по всему, в последнем образе дистрибутива sagemaker (1.6, похоже, было решено в версии 1.7) есть ошибка , которая не позволяет установить cron.
Замена этого:
sudo apt-get install -y cron
с этим:
# Check if cron needs to be installed
status = "$(dpkg-query -W --showformat='${db:Status-Status}' "cron" 2>&1)"
if [ ! $? = 0 ] || [ ! "$status" = installed ]; then
# Fixing invoke-rc.d: policy-rc.d denied execution of restart.
sudo /bin/bash -c "echo '#!/bin/sh
exit 0' > /usr/sbin/policy-rc.d"
# Installing cron.
echo "Installing cron..."
sudo apt install cron
else
echo "Package cron is already installed."
sudo cron
fi
...решил мою проблему.
Спасибо. Мне удалось проверить журналы CloudWatch, и я не вижу ничего подозрительного,
Adding autostop idle Python script to crontab...
но все равно нет завершения работы, если редактор не работает.