使用脚本自定义计算实例
使用安装脚本实现自动方式,以便在预配时自定义并配置计算实例。
可将计算实例用作云中的完全配置、完全托管的开发环境。 对于开发和测试,还可将该实例用作训练计算目标或用于推理目标。 计算实例可以并行运行多个作业,它有一个作业队列。 作为开发环境的计算实例不能与工作区中的其他用户共享。
作为管理员,你可以编写一个自定义脚本,用于按照要求预配工作区中的所有计算实例。 可以将安装脚本配置为创建脚本,该脚本将在创建计算实例时运行一次。 也可以将其配置为启动脚本,该脚本将在每次启动计算实例(包括初始创建)时运行。
可以在安装脚本中执行的操作的一些示例:
- 安装包、工具和软件
- 装载数据
- 创建自定义 conda 环境和 Jupyter 内核
- 克隆 Git 存储库并设置 Git 配置
- 设置网络代理
- 设置环境变量。
- 安装 JupyterLab 扩展
创建安装脚本
安装脚本是以 rootuser
身份运行的 shell 脚本。 创建脚本或将其上传到笔记本文件:
- 登录到工作室并选择你的工作区。
- 在左侧选择“笔记本”。
- 使用“添加文件”工具创建或上传安装 shell 脚本。 请确保脚本文件名以“sh”结尾。 创建新文件时,还需要将“文件类型”更改为“bash(.sh)”。
脚本运行时,脚本的当前工作目录是它上传到的目录。 例如,如果脚本上传到了 Users>admin,则脚本运行时,该脚本在计算实例和当前工作目录中的位置为 /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
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'
代表天。
在工作室中使用脚本
存储脚本后,在计算实例的创建过程中指定该脚本:
- 登录到工作室并选择你的工作区。
- 在左侧选择“计算”。
- 选择“+ 新建”以创建新的计算实例。
- 填写表单。
- 在窗体的“应用程序”页上,启用要使用的脚本类型:创建脚本(创建计算实例时运行一次)或启动脚本(每次启动计算实例时运行)。
- 浏览到所保存的 shell 脚本。 或从计算机上传脚本。
- 根据需要添加命令参数。
提示
如果工作区存储已附加到虚拟网络,则除非从虚拟网络内部访问工作室,否则你可能无法访问安装脚本文件。
在资源管理器模板中使用脚本
在资源管理器模板中,添加 setupScripts
以在预配计算实例时调用安装脚本。 例如:
"setupScripts":{
"scripts":{
"creationScript":{
"scriptSource":"workspaceStorage",
"scriptData":"[parameters('creationScript.location')]",
"scriptArguments":"[parameters('creationScript.cmdArguments')]"
}
}
}
上面的 scriptData
指定了笔记本文件共享中的创建脚本的位置,例如 Users/admin/testscript.sh
。
上面的 scriptArguments
是可选的,用于指定创建脚本的参数。
可以改为为资源管理器模板提供内联脚本。 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>
文件夹下的笔记本文件共享中。 特定计算实例的脚本文件和命令参数显示在详细信息页中。