如果在我尝试安装库时出现生命周期配置超时,如何确保手动安装的库在 Amazon SageMaker 中持久存在?

上次更新时间:2020 年 6 月 4 日

当我尝试安装其他库时,我的生命周期配置脚本运行的时间超过了 5 分钟,导致 Amazon SageMaker 笔记本实例出现超时。如何解决此问题并确保我手动安装的库在笔记本实例会话之间持久存在?

简短描述

运行时间超过 5 分钟的生命周期配置脚本将会失败,并且系统将不会创建或启动笔记本实例。可通过两种方式解决此问题:

  • nohupnohup 命令会强制生命周期配置脚本在后台继续运行,直到程序包安装完成为止。此方法建议技术能力较低的用户使用,更适合作为一种短期解决方案。
  • 在笔记本实例的 Amazon Elastic Block Store (Amazon EBS) 卷上创建一个自定义的持久性 Conda 安装:在现有笔记本实例的终端中行 on-create 脚本。此脚本使用 Miniconda 在 EBS 卷 (/home/ec2-user/SageMaker/) 上创建单独的 Conda 安装。然后运行 on-start 脚本以作为生命周期配置,从而将自定义环境作为 Jupyter 中的内核提供。此方法建议技术能力较强的用户使用,是更好的长期解决方案。

解决方法

使用下面的一种方法来解决生命周期配置超时问题。

nohup

使用 nohup 命令以强制生命周期配置脚本在 5 分钟后超时期限届满后继续在后台运行。例如:

#!/bin/bash
set -e
nohup pip install xgboost &

脚本会在库安装完成后停止运行。发生这种情况时,您不会收到通知,但您可以使用 ps 命令查看脚本是否仍在运行。

注意:当您的生命周期配置脚本发生其他超时情形时(例如当您下载大型 Amazon Simple Storage Service (Amazon S3) 对象时),您也可以使用 nohup 命令。

在笔记本实例的 EBS 卷上创建自定义的持久性 Conda 安装

1.    在现有笔记本实例的终端中,使用您的首选编辑器创建一个 .sh 文件。例如:

vim custom-script.sh

2.    将 on-create 脚本的内容复制到 .sh 文件。此脚本将在一个自定义 Conda 安装中创建一个新的 Conda 环境。此脚本还将在新的 Conda 环境中安装 NumPy 和 Boto3。

注意:该笔记本实例必须连接到互联网以下载 Miniconda 安装程序和 ipykernel。

3.    将此脚本标记为可执行,然后运行脚本。例如:

chmod +x custom-script.sh
./custom-script.sh

4.    安装完成后,停止笔记本实例。

5.    下载 on-start 脚本。

6.    在已停止的笔记本实例上,将 on-start 脚本添加为生命周期配置。每次您启动该笔记本实例时,此脚本会将该自定义环境作为 Jupyter 中的内核提供。

7.    启动笔记本实例,然后在自定义环境中安装自定义库。例如,要安装 pyarrow

import sys
!conda install --yes --prefix {sys.prefix} -c conda-forge pyarrow

如果您收到提示您需要更新 Conda 的错误消息,则运行以下命令。然后再次尝试安装自定义库。

!conda install -p "/home/ec2-user/anaconda3" "conda>=4.8" --yes
!conda install -p "/home/ec2-user/SageMaker/custom-miniconda/miniconda" "conda>=4.8" --yes

如果您停止并重启启动笔记本实例,您的自定义 Conda 环境和库将仍然可用,无需重新安装。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?