使用脚本自定义计算实例

使用安装脚本实现自动方式,以便在预配时自定义并配置计算实例。

可将计算实例用作云中的完全配置、完全托管的开发环境。 对于开发和测试,还可将该实例用作训练计算目标或用于推理目标。 计算实例可以并行运行多个作业,它有一个作业队列。 作为开发环境的计算实例不能与工作区中的其他用户共享。

作为管理员,你可以编写一个自定义脚本,用于按照要求预配工作区中的所有计算实例。 可以将安装脚本配置为创建脚本,该脚本将在创建计算实例时运行一次。 也可以将其配置为启动脚本,该脚本将在每次启动计算实例(包括初始创建)时运行。

可以在安装脚本中执行的操作的一些示例:

  • 安装包、工具和软件
  • 装载数据
  • 创建自定义 conda 环境和 Jupyter 内核
  • 克隆 Git 存储库并设置 Git 配置
  • 设置网络代理
  • 设置环境变量。
  • 安装 JupyterLab 扩展

创建安装脚本

安装脚本是以 rootuser 身份运行的 shell 脚本。 创建脚本或将其上传到笔记本文件:

  1. 登录到工作室并选择你的工作区。
  2. 在左侧选择“笔记本”。
  3. 使用“添加文件”工具创建或上传安装 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' 代表天。

在工作室中使用脚本

存储脚本后,在计算实例的创建过程中指定该脚本:

  1. 登录到工作室并选择你的工作区。
  2. 在左侧选择“计算”。
  3. 选择“+ 新建”以创建新的计算实例。
  4. 填写表单
  5. 在窗体的“应用程序”页上,启用要使用的脚本类型:创建脚本(创建计算实例时运行一次)或启动脚本(每次启动计算实例时运行)
  6. 浏览到所保存的 shell 脚本。 或从计算机上传脚本。
  7. 根据需要添加命令参数。

在工作室中使用安装脚本预配计算实例的屏幕截图。

提示

如果工作区存储已附加到虚拟网络,则除非从虚拟网络内部访问工作室,否则你可能无法访问安装脚本文件。

在资源管理器模板中使用脚本

在资源管理器模板中,添加 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> 文件夹下的笔记本文件共享中。 特定计算实例的脚本文件和命令参数显示在详细信息页中。