スクリプトを使用してコンピューティング インスタンスをカスタマイズする

プロビジョニング時にコンピューティング インスタンスを自動的にカスタマイズして構成するには、セットアップ スクリプトを使用します。

コンピューティング インスタンスは、クラウド内で完全に構成され管理される自分の開発環境として使用します。 開発およびテストの場合、このインスタンスをトレーニング コンピューティング ターゲットとして、または推論ターゲットに対して使用することもできます。 コンピューティング インスタンスは複数のジョブを並列に実行でき、ジョブ キューを備えています。 ご利用のワークスペース内の他のユーザーと、コンピューティング インスタンスを開発環境として共有することはできません。

管理者は、要件に従ってワークスペース内のすべてのコンピューティング インスタンスをプロビジョニングするために使用する、カスタマイズ スクリプトを作成できます。 セットアップ スクリプトは、コンピューティング インスタンスの作成時に 1 回実行される作成スクリプトとして構成できます。 または、コンピューティング インスタンスが開始されるたび (初期作成を含む) に実行されるスタートアップ スクリプトとして構成することもできます。

セットアップ スクリプトを使用して実行できる操作の例を次に示します。

  • パッケージ、ツール、およびソフトウェアのインストール
  • データのマウント
  • カスタムの Conda 環境と Jupyter カーネルの作成
  • Git リポジトリの複製と git 構成の設定
  • ネットワーク プロキシの設定
  • 環境変数の設定
  • JupyterLab 拡張機能のインストール

セットアップ スクリプトを作成する

このセットアップ スクリプトは、rootuser として実行されるシェル スクリプトです。 ノートブック ファイルにスクリプトを作成するか、アップロードします。

  1. スタジオにサインインし、お使いのワークスペースを選択します。
  2. 左側で [ノートブック] を選択します。
  3. [ファイルの追加] ツールを使用して、セットアップ シェル スクリプトを作成またはアップロードします。 スクリプトのファイル名の末尾が ".sh" であることを確認してください。 新しいファイルを作成する場合は、ファイルの種類bash(.sh) に変更します。

Create or upload your setup script to Notebooks file in studio

スクリプトを実行すると、スクリプトの現在の作業ディレクトリは、そのアップロード先のディレクトリになります。 たとえば、スクリプトを 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 
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. スタジオにサインインし、お使いのワークスペースを選択します。
  2. 左側にある [コンピューティング] を選択します。
  3. [新規] を選択して、新しいコンピューティング インスタンスを作成します。
  4. フォームに記入します
  5. フォームの [アプリケーション] ページで、使用したいスクリプトの種類を、作成スクリプト (コンピューティング インスタンスの作成時に 1 回実行)、またはスタートアップ スクリプト (コンピューティング インスタンスが開始されるたびに実行) のどちらかに切り替えます。
  6. 保存したシェル スクリプトを参照します。 または、コンピューターからスクリプトをアップロードします。
  7. 必要に応じてコマンド引数を追加します。

Screenshot of provision a compute instance with a setup script in the studio.

ヒント

ワークスペース ストレージが仮想ネットワークに接続されている場合、仮想ネットワーク内からスタジオにアクセスしている場合を除き、セットアップ スクリプト ファイルにアクセスできない可能性があります。

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 になります。

たとえば、次のように scriptData の base64 でエンコードされたコマンド文字列を指定します。

"setupScripts":{
    "scripts":{
        "creationScript":{
        "scriptSource":"inline",
        "scriptData":"[base64(parameters('inlineCommand'))]",
        "scriptArguments":"[parameters('creationScript.cmdArguments')]"
        }
    }
}

セットアップ スクリプトのログ

セットアップ スクリプトの実行のログは、コンピューティング インスタンスの詳細ページにある [ログ] フォルダーに表示されます。 ログは、Logs\<compute instance name> フォルダーの下のノートブック ファイル共有に保存されます。 特定のコンピューティング インスタンスのスクリプト ファイルとコマンド引数は、詳細ページに表示されます。