使用指令碼自訂計算執行個體
使用安裝指令碼 (預覽),在佈建時用自動化方式自訂和設定計算執行個體。
請在雲端中使用計算執行個體來作為已完整設定和完全受控的開發環境。 針對開發和測試,您也可以使用執行個體做為訓練計算目標或推斷目標。 計算執行個體可以平行執行多個作業,並具有作業佇列。 在開發環境中,無法與您工作區中的其他使用者共用計算執行個體。
您作為系統管理員可以撰寫自訂指令碼,以根據需求佈建工作區中所有計算執行個體。 您可以將設定指令碼設定為:
- 建立指令碼 - 在建立計算執行個體時執行一次。
- 啟動指令碼 - 每次啟動計算執行個體時執行 (包括初始建立)。
以下是您可以在安裝指令碼中執行的一些範例:
- 安裝套件、工具和軟體
- 裝載資料
- 建立自訂 Conda 環境和 Jupyter 核心
- 複製 Git 儲存機制並設定 Git 設定
- 設定網路 Proxy
- 設定環境變數
- 安裝 JupyterLab 擴充功能
建立安裝指令碼
安裝指令碼是以 rootuser
身分執行的殼層指令碼。 建立指令碼,或將其上傳至您的 Notebooks 檔案:
- 登入Studio,並選取您的工作區。
- 選取左側的 [筆記本]。
- 使用 [新增檔案] 工具來建立或上傳您的安裝殼層指令碼。 請確定指令檔名的結尾為 ".sh"。 當您建立新檔案時,也請將檔案類型變更為 bash (.sh)。
當指令碼執行時,指令碼目前的工作目錄就是上傳該指令碼的目錄。 例如,如果您將指令碼上傳給使用者>管理員,則在執行指令碼時,指令碼在計算執行個體和目前工作目錄上的位置是 /home/azureuser/cloudfiles/code/Users/admin。此位置可讓您在指令碼中使用相對路徑。
指令碼引數在指令碼中可能稱為 $1、$2 等。
如果您的指令碼是專門針對 azureuser 進行作業 (例如安裝 Conda 環境或 Jupyter 核心),則必須將其放在 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-範例。
您也可以在指令碼中使用下列環境變數:
CI_RESOURCE_GROUP
CI_WORKSPACE
CI_NAME
CI_LOCAL_UBUNTU_USER
- 指向azureuser
使用安裝指令碼搭配 Azure 原則,針對每個建立的計算執行個體強制執行或預設設定指令碼。
設定指令碼逾時的預設值為 15 分鐘。 時間可以在 Studio 中變更,或透過 ARM 範本使用 DURATION
參數來變更。
DURATION
是具有選擇性尾碼的浮點數:'s'
代表秒 (預設值)、'm'
代表分鐘、'h'
代表小時,或 'd'
代表天。
在 Studio 中使用指令碼
在您儲存指令碼後,在您的計算執行個體建立期間加以指定:
- 登入 Studio,並選取您的工作區。
- 在左側,選取 [計算]。
- 選取 [+新增] 建立新的計算執行個體。
- 填寫表單。
- 在表單的 [應用程式] 頁面上,切換您要使用的指令碼類型:建立指令碼 (在建立計算執行個體時執行一次) 或啟動指令碼 (每次啟動計算執行個體時執行)。
- 瀏覽至您儲存的殼層指令碼。 或從您的電腦上傳指令碼。
- 視需要新增命令引數。
提示
如果工作區儲存體連接至虛擬網路,您可能無法存取安裝指令碼檔案,除非您是從虛擬網路記憶體存取 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 範本提供內嵌指令碼。 殼層命令可以參閱上傳至筆記本檔案共用的任何相依性。 當您使用內嵌字串時,指令碼的工作目錄為 /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>
資料夾下的筆記本檔案共用。 特定計算執行個體的指令碼檔案和命令引數會顯示在詳細資料頁面中。