スクリプトを使用してコンピューティング インスタンスをカスタマイズする
プロビジョニング時にコンピューティング インスタンスを自動的にカスタマイズして構成するには、セットアップ スクリプトを使用します。
コンピューティング インスタンスは、クラウド内で完全に構成され管理される自分の開発環境として使用します。 開発およびテストの場合、このインスタンスをトレーニング コンピューティング ターゲットとして、または推論ターゲットに対して使用することもできます。 コンピューティング インスタンスは複数のジョブを並列に実行でき、ジョブ キューを備えています。 ご利用のワークスペース内の他のユーザーと、コンピューティング インスタンスを開発環境として共有することはできません。
管理者は、要件に従ってワークスペース内のすべてのコンピューティング インスタンスをプロビジョニングするために使用する、カスタマイズ スクリプトを作成できます。 セットアップ スクリプトは、以下のいずれかとして構成できます。
- 作成スクリプト - コンピューティング インスタンスの作成時に 1 回実行されます。
- スタートアップ スクリプト - コンピューティング インスタンスが起動されるたびに実行されます (初期作成時を含む)。
セットアップ スクリプトを使用して実行できる操作の例を次に示します。
- パッケージ、ツール、およびソフトウェアのインストール
- データのマウント
- カスタムの Conda 環境と Jupyter カーネルの作成
- Git リポジトリの複製と git 構成の設定
- ネットワーク プロキシの設定
- 環境変数の設定
- JupyterLab 拡張機能のインストール
セットアップ スクリプトを作成する
このセットアップ スクリプトは、rootuser
として実行されるシェル スクリプトです。 ノートブック ファイルにスクリプトを作成するか、アップロードします。
- スタジオにサインインし、お使いのワークスペースを選択します。
- 左側で [ノートブック] を選択します。
- [ファイルの追加] ツールを使用して、セットアップ シェル スクリプトを作成またはアップロードします。 スクリプトのファイル名の末尾が ".sh" であることを確認してください。 新しいファイルを作成する場合は、ファイルの種類も bash(.sh) に変更します。
スクリプトを実行すると、スクリプトの現在の作業ディレクトリは、そのアップロード先のディレクトリになります。 たとえば、スクリプトを Users > admin にアップロードした場合、スクリプトの実行時のコンピューティング インスタンスと現在の作業ディレクトリ上のスクリプトの場所は /home/azureuser/cloudfiles/code/Users/admin になります。この場所を使用すると、スクリプトで相対パスを使用できます。
スクリプトの引数は、スクリプト内で $1、$2 などのように参照することができます。
conda 環境および Jupyter カーネルのインストールなど、azureuser 固有の処理をスクリプトで行っていた場合は、そのスクリプトは次のように sudo -u azureuser
ブロック内に置いてください。
#!/bin/bash
set -e
# This script installs a pip package in compute instance azureml_py38 environment.
sudo -u azureuser -i <<'EOF'
PACKAGE=numpy
ENVIRONMENT=azureml_py38
source /anaconda/etc/profile.d/conda.sh
conda activate "$ENVIRONMENT"
pip install "$PACKAGE"
conda deactivate
EOF
コマンド sudo -u azureuser
を実行すると、現在の作業ディレクトリが /home/azureuser
に変更されます。 また、このブロック内のスクリプト引数にアクセスすることはできません。
その他のスクリプトの例については、azureml-examplesを参照してください。
スクリプトでは、次の環境変数も使用できます。
CI_RESOURCE_GROUP
CI_WORKSPACE
CI_NAME
CI_LOCAL_UBUNTU_USER
-azureuser
をポイントします
セットアップ スクリプトを Azure Policy と組み合わせて使用すると、すべてのコンピューティング インスタンスの作成に対してセットアップ スクリプトを強制的に適用するか、既定値として設定できます。
セットアップ スクリプトのタイムアウトの既定値は 15 分です。 時間は、スタジオで変更することも、ARM テンプレートで DURATION
パラメーターを使用して変更することもできます。
DURATION
は、省略可能なサフィックスを持つ浮動小数点数です。秒の場合は 's'
(既定値)、分の場合は 'm'
、時の場合は 'h'
、日の場合は 'd'
です。
スタジオでスクリプトを使用する
スクリプトを保存したら、コンピューティング インスタンスの作成時にそれを指定します。
- スタジオにサインインし、お使いのワークスペースを選択します。
- 左側にある [コンピューティング] を選択します。
- [新規] を選択して、新しいコンピューティング インスタンスを作成します。
- フォームに記入します。
- フォームの [アプリケーション] ページで、使用したいスクリプトの種類を、作成スクリプト (コンピューティング インスタンスの作成時に 1 回実行)、またはスタートアップ スクリプト (コンピューティング インスタンスが開始されるたびに実行) のどちらかに切り替えます。
- 保存したシェル スクリプトを参照します。 または、コンピューターからスクリプトをアップロードします。
- 必要に応じてコマンド引数を追加します。
ヒント
ワークスペース ストレージが仮想ネットワークに接続されている場合、仮想ネットワーク内からスタジオにアクセスしている場合を除き、セットアップ スクリプト ファイルにアクセスできない可能性があります。
Resource Manager テンプレートでスクリプトを使用する
Resource Manager テンプレートに setupScripts
を追加して、コンピューティング インスタンスがプロビジョニングされたときにセットアップ スクリプトを呼び出すようにします。 次に例を示します。
"setupScripts":{
"scripts":{
"creationScript":{
"scriptSource":"workspaceStorage",
"scriptData":"[parameters('creationScript.location')]",
"scriptArguments":"[parameters('creationScript.cmdArguments')]"
}
}
}
このコードの scriptData
は、Users/admin/testscript.sh
などのノートブック ファイル共有内の作成スクリプトの場所を指定します。
scriptArguments
はオプションであり、作成スクリプトの引数を指定します。
代わりに、Resource Manager テンプレートでスクリプトをインラインで指定することもできます。 shell コマンドを使用して、ノートブック ファイル共有にアップロードされた任意の依存関係を参照できます。 インライン文字列を使用する場合、スクリプトの作業ディレクトリは /mnt/batch/tasks/shared/LS_root/mounts/clusters/<ciname>/code/Users
になります。<ciname>
はコンピューティング インスタンスの名前です。
For example, specify a base64 encoded command string for `scriptData`:
```json
"setupScripts":{
"scripts":{
"creationScript":{
"scriptSource":"inline",
"scriptData":"[base64(parameters('inlineCommand'))]",
"scriptArguments":"[parameters('creationScript.cmdArguments')]"
}
}
}
セットアップ スクリプトのログ
セットアップ スクリプトの実行のログは、コンピューティング インスタンスの詳細ページにある [ログ] フォルダーに表示されます。 ログは、Logs\<compute instance name>
フォルダーの下のノートブック ファイル共有に保存されます。 特定のコンピューティング インスタンスのスクリプト ファイルとコマンド引数は、詳細ページに表示されます。