使用生命周期配置脚本自定义笔记本实例 - 亚马逊 SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

使用生命周期配置脚本自定义笔记本实例

要在笔记本实例上安装程序包或示例笔记本,请为其配置网络和安全性,或者使用 Shell 脚本对其进行自定义以使用生命周期配置。生命周期配置 提供了 Shell 脚本,仅在您创建笔记本实例或者随时启动笔记本实例时运行。当您创建笔记本实例时,您可以创建新的生命周期配置以及它使用的脚本,或者应用您已有的配置。

您还可以使用生命周期配置脚本从笔记本访问 AWS 服务。例如,您可以创建一个脚本来让您使用笔记本控制其他 AWS 资源,例如 Amazon EMR 实例。

我们维护一个笔记本生命周期配置脚本的公有存储库,用于解决自定义笔记本实例的常见使用案例,网址为:https://github.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-configuration-samples

注意

每个脚本只能有 16384 个字符。

$PATH 两个脚本可用的环境变量是 /usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin。工作目录,这是 $PWD 环境变量,是 /.

查看 CloudWatch Logs,以查看日志流 [notebook-instance-name]/[LifecycleConfigHook] 的日志组 /aws/sagemaker/NotebookInstances 中的笔记本实例生命周期配置。

脚本运行时间不能超过 5 分钟。如果脚本运行时间超过 5 分钟,它会失败,并且不创建或启动笔记本实例。要帮助减少脚本的运行时间,请尝试采取以下措施:

  • 减少所需的步骤。例如,限制在其中安装大型包的 conda 环境。

  • 在并行进程中运行任务。

  • 在脚本中使用 nohup 命令。

创建生命周期配置

  1. 对于 Lifecycle configuration - Optional (生命周期配置 - 可选),选择 Create a new lifecycle configuration (创建新生命周期配置)

  2. 对于名称,请键入使用字母数字字符和 -(但不能含空格)的名称。名称最多可包含 63 个字符。

  3. (可选) 要创建在您创建笔记本和每次启动笔记本时运行的脚本,请选择 Start notebook (启动笔记本)

  4. Start notebook (启动笔记本) 编辑器中,键入脚本。

  5. (可选)要创建仅运行一次的脚本,则在创建笔记本时,选择 Create notebook (创建笔记本)

  6. Create notebook (创建笔记本) 编辑器中,键入脚本配置网络。

  7. 选择 Create configuration (创建配置)

您可以通过在 SageMaker 控制台中选择 Lifecycle configuration (生命周期配置),查看以前创建的笔记本实例生命周期配置列表。从这里可以查看、编辑、删除现有生命周期配置。您可以通过选择 Create configuration (创建配置) 创建一个新的笔记本实例生命周期配置。这些笔记本实例生命周期配置在您创建新笔记本实例时可用。

生命周期配置最佳实践

以下是使用生命周期配置的最佳实践:

  • root 用户身份运行生命周期配置。如果您的脚本在 /home/ec2-user/SageMaker 目录中进行任何更改(例如,通过 pip 安装程序包),请使用命令 sudo -u ec2-userec2-user 用户的身份运行。这是运行 SageMaker 的同一个用户。

  • SageMaker 笔记本实例使用 conda 环境来为 Jupyter 笔记本实施不同的内核。如果您要安装对一个或多个笔记本内核可用的程序包,请将用于安装程序包的命令与 conda 环境命令配合使用,以便激活包含您要在其中安装程序包的内核的 conda 环境。

    例如,如果您要仅为 python3 环境安装程序包,请使用以下代码:

    #!/bin/bash sudo -u ec2-user -i <<'EOF' # This will affect only the Jupyter kernel called "conda_python3". source activate python3 # Replace myPackage with the name of the package you want to install. pip install myPackage # You can also perform "conda install" here as well. source deactivate EOF

    如果您要在笔记本实例的所有 conda 环境中安装程序包,请使用以下代码:

    #!/bin/bash sudo -u ec2-user -i <<'EOF' # Note that "base" is special environment name, include it there as well. for env in base /home/ec2-user/anaconda3/envs/*; do source /home/ec2-user/anaconda3/bin/activate $(basename "$env") # Installing packages in the Jupyter system environment can affect stability of your SageMaker # Notebook Instance. You can remove this check if you'd like to install Jupyter extensions, etc. if [ $env = 'JupyterSystemEnv' ]; then continue fi # Replace myPackage with the name of the package you want to install. pip install --upgrade --quiet myPackage # You can also perform "conda install" here as well. source /home/ec2-user/anaconda3/bin/deactivate done EOF
  • 您必须将所有 conda 环境存储在默认环境文件夹 (/home/user/anaconda3/envs) 中。

重要

当您创建或更改脚本时,我们建议您使用提供 Unix 样式换行符的文本编辑器,例如,创建笔记本时可在控制台中使用的文本编辑器。从非 Linux 操作系统复制文本可能会引入不兼容的换行符,并导致意外错误。