ライブラリを手動でインストールしようとしたときに、ライフサイクル設定の処理がタイムアウトした場合、インストールしたライブラリが Amazon SageMaker で保持されていることを確認する方法を教えてください。

所要時間2分
0

ライブラリを追加インストールしようとしたとき、ライフサイクル設定スクリプトの実行が 5 分を越えてしまいます。これにより、Amazon SageMaker ノートブックインスタンスがタイムアウトします。この問題を解決する方法を教えてください。また、ノートブックインスタンスのセッション間に、手動でインストールしたライブラリが保持されたか確認する方法を教えてください。

簡単な説明

ライフサイクル設定スクリプトの実行が 5 分を超えた場合、このスクリプトは失敗し、ノートブックインスタンスは作成も起動もされません。

この問題を解決するには、以下のいずれかの方法を使用します。

  • nohup:「no hangup」(ハングアップなし) の略称である nohup コマンドは、ハングアップシグナルを無視する Linux コマンドです。このコマンドの末尾にアンパサンド記号を付けると、パッケージがインストールされるまでライフサイクル設定スクリプトが強制的にバックグラウンドで実行されます。この方法は、さほど技術的知識がないユーザーにとってのベストプラクティスであり、より手軽なソリューションとして適しています。
    注: nohup コマンドはハングアップシグナルを無視します。したがって、スクリプトをバックグラウンドで実行し続けるには、アンパサンド記号と一緒に使用する必要があります。ライフサイクル設定スクリプトを実行するシェルは、スクリプトの最後で終了します。したがって、ライフサイクル設定スクリプトを強制的にバックグラウンドで実行するには、コマンドの先頭に nohup を追加し、コマンドの最後に & を追加します。
  • ノートブックインスタンスの Amazon Elastic Block Store (Amazon EBS) ボリュームにカスタムの永続的な Conda インストールを作成する: 既存のノートブックインスタンスのターミナルで、on-create スクリプトを実行します。このスクリプトでは、Miniconda を使用して EBS ボリューム (/home/ec2-user/SageMaker/) に個別の Conda インストールを作成します。次に、ライフサイクル設定として on-start スクリプトを実行し、カスタム環境を Jupyter のカーネルとして使用できるようにします。この方法は、より技術的知識のあるユーザーにとってのベストプラクティスで、より根本的なソリューションとなります。

解決方法

次の方法のいずれかを使用して、ライフサイクル設定のタイムアウトを解決します。

nohup コマンドを実行する

nohup コマンドを使用して、5 分のタイムアウト期間を超えても、バックグラウンドで強制的にライフサイクル設定スクリプトの実行を継続させます。コマンドの最後にアンパサンド (&) を追加することを忘れないでください。

例:

#!/bin/bash
set -e
nohup pip install xgboost &

ライブラリのインストール後、スクリプトの実行は停止します。これが発生しても通知が送られてくることはありませんが、 ps コマンドを使用して、スクリプトが依然として実行中かどうか確認できます。

注: 例えば、大規模な Amazon Simple Storage Service (Amazon S3) オブジェクトをダウンロードするなどの他のシナリオにおいて、ライフサイクル設定スクリプトがタイムアウトする場合には、nohup コマンドを使用することもできます。

ノートブックインスタンスの EBS ボリュームにカスタムの永続的な Conda インストールを作成する

1.    既存のノートブックインスタンスのターミナルで、任意のエディタを使用して .sh ファイルを作成します。

例:

vim custom-script.sh

2.    作成時のスクリプトの内容を .sh ファイルにコピーします。このスクリプトは、カスタム Conda インストールに新しい Conda 環境を作成します。このスクリプトは、新しい Conda 環境に NumPyBoto3 もインストールします。

注: Miniconda インストーラと ipykernel をダウンロードするには、ノートブックインスタンスにインターネット接続が必要です。

3.    スクリプトを実行可能としてマークし、実行します。

例:

chmod +x custom-script.sh
./custom-script.sh

4.    インストールが完了したら、ノートブックインスタンスを停止します。

5.    起動時スクリプトを sh ファイルにコピーします。

#!/bin/bash
set -e
# OVERVIEW
# This script installs a custom, persistent installation of conda on the Notebook Instance's EBS volume, and ensures
# that these custom environments are available as kernels in Jupyter.
# 
# The on-start script uses the custom conda environment created in the on-create script and uses the ipykernel package

# to add that as a kernel in Jupyter.

#

# For another example, see:
# https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-add-external.html#nbi-isolated-environment
sudo -u ec2-user -i <<'EOF'
unset SUDO_UID
WORKING_DIR=/home/ec2-user/SageMaker/custom-miniconda/
source "$WORKING_DIR/miniconda/bin/activate"

for env in $WORKING_DIR/miniconda/envs/*; do

BASENAME=$(basename "$env")
source activate "$BASENAME"

python -m ipykernel install --user --name "$BASENAME" --display-name "Custom ($BASENAME)"
done
# Optionally, uncomment these lines to disable SageMaker-provided Conda functionality.

# echo "c.EnvironmentKernelSpecManager.use_conda_directly = False" >> /home/ec2-user/.jupyter/jupyter_notebook_config.py

# rm /home/ec2-user/.condarc
EOF
echo "Restarting the Jupyter server.."
# For notebook instance with alinux (notebook-al1-v1)
initctl restart jupyter-server --no-wait
# Use this instead for notebook instance with alinux2 (notebook-al2-v1)
systemctl restart jupyter-server

6.    停止したノートブックインスタンスで、ライフサイクル設定として起動時のスクリプトを追加します。このスクリプトは、ノートブックインスタンスを起動するたびに、カスタム環境を Jupyter のカーネルとして使用できるようにします。

7.    ノートブックインスタンスを起動し、カスタム環境にカスタムライブラリをインストールします。

たとえば、pyarrow をインストールするには、次のようにします。

import sys
!conda install --yes --prefix {sys.prefix} -c conda-forge pyarrow

Conda を更新する必要があることを示すエラーメッセージが表示された場合は、次のコマンドを実行します。次に、カスタムライブラリのインストールをもう一度試みます。

!conda install -p "/home/ec2-user/anaconda3" "conda>=4.8" --yes
!conda install -p "/home/ec2-user/SageMaker/custom-miniconda/miniconda" "conda>=4.8" --yes

ノートブックインスタンスを停止して起動しても、カスタム Conda 環境とライブラリは引き続き使用できます。再度インストールする必要はありません。

注: Amazon CloudWatch Logs を使用して、ライフサイクル設定スクリプトの問題をトラブルシューティングできます。スクリプト実行ログは、aws/sagemaker/studio 名前空間のログストリーム LifeCycleConfigonStart で表示できます。


関連情報

Amazon SageMaker ノートブックインスタンスのライフサイクル設定サンプル

ライフサイクル設定のベストプラクティス

ライフサイクル設定のデバッグ

AWS公式
AWS公式更新しました 1年前
コメントはありません