알림 활성화

Driverless AI는 실험 시작과 종료 시 사용자 정의 스크립트를 트리거하도록 구성할 수 있습니다. 이 기능은 Slack과 같은 서비스에 알림을 보내거나 머신을 종료하도록 트리거하는 데 사용할 수 있습니다.

** config.toml** 파일이 다음 변수를 노출시킵니다.

  • listeners_experiment_start: 실험을 시작할 때 실행되는 스크립트의 절대 위치를 등록합니다.

  • listeners_experiment_start: 실험이 성공적으로 마무리될 때 실행되는 스크립트의 절대 위치를 등록합니다.

Driverless AI는 모든 실행 가능한 것을 스크립트로 허용합니다(예를 들어 스크립트는 Bash 또는 Python으로 구현할 수 있습니다). 여기에 필요한 요건은 다음의 두 가지입니다.

  • 지정된 스크립트를 실행할 수 있습니다(즉, 파일이 실행 가능한 플래그를 가지고 있습니다).

  • 스크립트가 명령 라인 매개변수를 받을 수 있어야 합니다.

스크립트 인터페이스

Driverless AI가 스크립트를 실행하면 스크립트 명령 라인으로 다음 매개변수를 패스합니다.

  • 애플리케이션 ID: 실행 중인 Driverless AI 인스턴스의 고유 식별자.

  • 사용자 ID: 실험을 실행하는 사용자의 식별.

  • 실험 ID: 실험의 고유 식별자.

  • 실험 경로: 실험 결과의 위치.

예제

다음 예제는 시작된 모든 실험이 종료된 후 알림 스크립트를 사용하여 Driverless AI를 실행하는 EC2 머신을 어떻게 종료하는지 보여줍니다. 해당 예제는 Docker 컨테이너 및 Native 설치에서 알림 스크립트를 어떻게 사용하는지 보여줍니다. 알림 스크립트의 아이디어는 실행 중인 실험의 수를 계산하기 위한 간단한 카운터(즉, 디렉터리의 파일 수)를 생성하는 것입니다. 카운터의 값이 0에 도달하면 지정된 작업이 실행됩니다.

본 예제에서는 실제 머신을 종료하기 위해 AWS 명령 라인 유틸리티를 사용합니다. 하지만, sudo poweroff (실사용자가 암호가 없는 sudo 기능을 구성한 경우) 또는 poweroff (스크립트 poweroff 에 실행 가능한 비트와 setuid 비트가 함께 설정되어 있는 경우. 자세한 내용은 https://unix.stackexchange.com/questions/85663/poweroff-or-reboot-as-normal-user 에서 확인하십시오)를 실행하여 동일한 기능을 달성할 수 있습니다.

on_start 스크립트

이 스크립트는 실행 중인 실험의 카운터를 증가시킵니다.

#!/usr/bin/env bash

app_id="${1}"
experiment_id="${3}"
tmp_dir="${TMPDIR:-/tmp}/${app_id}"
exp_file="${tmp_dir}/${experiment_id}"

mkdir -p "${tmp_dir}"
touch "${exp_file}"

on_done 스크립트

이 스크립트는 카운터를 감소시키고 카운터의 값이 0에 도달하면 머신을 종료합니다.

#!/usr/bin/env bash

app_id="${1}"
experiment_id="${3}"
tmp_dir="${TMPDIR:-/tmp}/${app_id}"
exp_file="${tmp_dir}/${experiment_id}"

if [ -f "${exp_file}"  ]; then
    rm -f "${exp_file}"
fi

running_experiments=$(ls -1 "${tmp_dir}" | wc -l)

if [ "${running_experiments}" -gt 0  ]; then
    echo "There is still ${running_experiments} running experiments!"
else
    echo "No experiments running! Machine is going to shutdown!"
# Use instance meta-data API to get instance ID and then use AWS CLI to shutdown the machine
# This expects, that AWS CLI is properly configured and has capability to shutdown instances enabled.
aws ec2 stop-instances --instance-ids $(curl http://169.254.169.254/latest/meta-data/instance-id)
fi
  1. config.toml 파일을 Docker 이미지에서 귀하의 로컬 파일시스템으로 복사하십시오 (비 GPU 환경에서는 nvidia-docker rundocker run 으로 변경하십시오).

# In your Driverless AI folder (for exmaple, dai_1.5.1),
# make config and scripts directories
mkdir config
mkdir scripts

# Copy the config.toml file to the new config directory.
nvidia-docker run \
  --pid=host \
  --rm \
  -u `id -u`:`id -g` \
  -v `pwd`/config:/config \
  --entrypoint bash \
  h2oai/dai-centos7-x86_64:1.10.1-cuda11.2.2.xx
  -c "cp /etc/dai/config.toml /config"
  1. config.toml 파일에 있는 Notification scripts 를 편집하고 변경 사항을 저장하십시오. 이 예제에서 스크립트는 dai_VERSION/scripts 폴더에 저장됩니다.

# Notification scripts
# - the variable points to a location of script which is executed at given event in experiment lifecycle
# - the script should have executable flag enabled
# - use of absolute path is suggested
# The on experiment start notification script location
listeners_experiment_start = "dai_VERSION/scripts/on_start.sh"
# The on experiment finished notification script location
listeners_experiment_done = "dai_VERSION/scripts/on_done.sh"
  1. DRIVERLESS_AI_CONFIG_FILE 환경 변수를 사용하여 Driverless AI를 시작합니다. 소프트웨어가 구성 파일을 찾을 수 있도록 편집된 config.toml 파일의 위치를 ​지정하는지 확인하십시오(비 GPU 환경에서는 nvidia-docker rundocker run 으로 변경합니다).

nvidia-docker run \
  --pid=host \
  --rm \
  -u `id -u`:`id -g` \
  -e DRIVERLESS_AI_CONFIG_FILE="/config/config.toml" \
  -v `pwd`/config:/config \
  -v `pwd`/data:/data \
  -v `pwd`/log:/log \
  -v `pwd`/license:/license \
  -v `pwd`/tmp:/tmp \
  -v `pwd`/scripts:/scripts \
  h2oai/dai-centos7-x86_64:1.10.1-cuda11.2.2.xx