尝试添加生命周期配置以在重启后保持自定义环境持久时,SageMaker 失败

问题描述 投票:0回答:1

我想使用 miniconda 在 AWS 上的 SageMaker 中创建环境,并在重新启动会话时将其作为 Jupyter 中的内核使用。但 SageMaker 不断失败。

我按照此处的说明进行操作:
https://aws.amazon.com/premiumsupport/knowledge-center/sagemaker-lifecycle-script-timeout/

基本上它说:
“在笔记本实例的 Amazon Elastic Block Store (Amazon EBS) 卷上创建自定义、持久的 Conda 安装:在现有笔记本实例的终端中运行 on-create 脚本。此脚本使用 Miniconda 在笔记本实例上创建单独的 Conda 安装EBS 卷(/home/ec2-user/SageMaker/)然后,将启动脚本作为生命周期配置运行,以使自定义环境可用作 Jupyter 中的内核。建议更多技术用户使用此方法。更好的长期解决方案。”

我在 Jupyter 的终端上运行这个 on-create.sh 脚本:

on-create.sh:

#!/bin/bash

set -e

sudo -u ec2-user -i <<'EOF'
unset SUDO_UID
# Install a separate conda installation via Miniconda
WORKING_DIR=/home/ec2-user/SageMaker/custom-environments
mkdir -p "$WORKING_DIR"
wget https://repo.anaconda.com/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh -O "$WORKING_DIR/miniconda.sh"
bash "$WORKING_DIR/miniconda.sh" -b -u -p "$WORKING_DIR/miniconda" 
rm -rf "$WORKING_DIR/miniconda.sh"

# Create a custom conda environment
source "$WORKING_DIR/miniconda/bin/activate"
KERNEL_NAME="conda-test-env"
PYTHON="3.6"
conda create --yes --name "$KERNEL_NAME" python="$PYTHON"
conda activate "$KERNEL_NAME"
pip install --quiet ipykernel
# Customize these lines as necessary to install the required packages
conda install --yes numpy
pip install --quiet boto3
EOF

它会按预期创建“conda-test-env”环境。

然后我添加 on-start.sh 作为生活方式配置:

#!/bin/bash

set -e

sudo -u ec2-user -i <<'EOF'
unset SUDO_UID
source "/home/ec2-user/SageMaker/custom-environments/miniconda/bin/activate"
conda activate conda-test-env
python -m ipykernel install --user --name "conda-test-env" --display-name "conda-test-env"

# Optionally, uncomment these lines to disable SageMaker-provided Conda functionality.
# echo "c.EnvironmentKernelSpecManager.use_conda_directly = False" >> /home/ec2-user/.jupyter/jupyter_notebook_config.py
# rm /home/ec2-user/.condarc
EOF

然后我使用新配置更新实例, 当我启动我的笔记本实例时,几分钟后它失败了。

我将不胜感激任何帮助。

jupyter-notebook amazon-sagemaker
1个回答
0
投票

这可能是因为脚本不支持像

\r
这样的特殊字符,您可能会在不知道发生了什么的情况下收到错误:

  1. 在 Notepad++ 中打开文件:首先打开要转换的文件。

  2. 查看特殊字符:

    • 转到
      View
      菜单。
    • 选择
      Show Symbol
    • 选择
      Show All Characters
      。这会将所有特殊字符(包括行结尾)显示为文本中的符号。
  3. 替换 DOS 行结尾:

    • Replace
      打开
      Ctrl+H
      对话框。
    • 在“查找内容”字段中,输入
      \r\n
      。这代表 Windows 中使用的 CRLF 行结尾。
    • 在“替换为”字段中,将其留空以删除回车符,或输入
      \n
      将其显式替换为 Unix 行结尾。
    • 单击
      Replace All
      。所有 CRLF 现在都应该转换为 LF,这在 Unix 环境中有效。 enter image description here
  4. 复制并粘贴为纯文本

    • 完成替换后,复制文本。
    • 将其以纯文本形式粘贴到目标位置,以确保不会保留任何格式或隐藏字符。
  5. 保存或导出您的文件:

    • 如果您对更改感到满意,请保存文件以使用 Unix 行结尾更新它,或另存为新文件以保留两个版本。

执行这些步骤应该可以解决与不同操作系统之间的行结束差异相关的任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.