使用LCC脚本自定义 SageMaker 笔记本实例 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用LCC脚本自定义 SageMaker 笔记本实例

重要

允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义IAM策略还必须授予向这些资源添加标签的权限。需要向资源添加标签的权限,因为 Studio 和 Studio Classic 会自动标记他们创建的任何资源。如果IAM策略允许 Studio 和 Studio Classic 创建资源但不允许标记,则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息,请参阅 提供标记 SageMaker资源的权限

Amazon Amazon 托管政策 SageMaker授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

生命周期配置 (LCC) 提供的 shell 脚本仅在您创建笔记本实例或启动笔记本实例时运行。创建笔记本实例时,您可以创建新的笔记本实例LCC或附加已有的笔记本实例。LCC生命周期配置脚本对以下用例非常有用:

  • 在笔记本实例上安装软件包或示例笔记本

  • 为笔记本实例配置网络和安全性

  • 使用 shell 脚本自定义笔记本实例

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

我们维护着一个包含笔记本生命周期配置脚本的公共存储库,这些脚本解决了自定义笔记本实例的常见用例,网址为 https://github.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-config-samples

注意

每个脚本的字符数上限为 16384 个字符。

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

在 CloudWatch 日志流的日志组中查看 notebook 实例生命周期配置/aws/sagemaker/NotebookInstances的日志[notebook-instance-name]/[LifecycleConfigHook]

脚本运行时间不能超过 5 分钟。如果脚本运行时间超过 5 分钟,它会失败,并且不创建或启动笔记本实例。为了缩短脚本的运行时间,请尝试以下方法:

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

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

  • 在脚本中使用 nohup 命令。

您可以通过在 SageMaker 控制台中选择生命周期配置来查看之前创建的笔记本实例生命周期配置列表。您可以在创建新的笔记本实例LCC时附加笔记本实例。有关创建笔记本实例的更多信息,请参阅 创建 Amazon SageMaker 笔记本实例

生命周期配置最佳实践

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

重要

我们不建议在生命周期配置脚本中存储敏感信息。

  • root 用户身份运行生命周期配置。如果您的脚本在 /home/ec2-user/SageMaker 目录中进行任何更改(例如,通过 pip 安装软件包),请使用命令 sudo -u ec2-userec2-user 用户的身份运行。这与 Amazon 的 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 操作系统复制文本可能会引入不兼容的换行符,并导致意外错误。