无法启动远程 Sagemaker 管道

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

我正在尝试启动 sagemaker 管道,但遇到了容器无法检测到正在启动的 py 脚本的问题。

基本设置:

  • 已在 AWS ECR 中注册的 docker 容器。
  • 一个名为
    pipeline_test.py
    的脚本,仅包含 `print("Hello World")。
  • sagemaker studio 中代码编辑器中的启动器脚本(但这也可以是本地 Visual Studio 编辑器)运行启动的代码
    pipeline_test.py
    (代码见下文)。

启动脚本:

import json
import os
from sagemaker import image_uris
from sagemaker.processing import (
    Processor,
    ScriptProcessor,
    ProcessingInput,
    ProcessingOutput,
)
from sagemaker.session import Session

session = Session()
os.environ["IMAGE_URI"] = <value>
os.environ["ROLE"] = <value>
os.environ["BUCKET_NAME"] = <value>

# upload code to s3
code_input_path = (
    f"s3://{os.environ['BUCKET_NAME']}/pipeline_test/pipeline_test.py"
)

# output data in s3
data_output_path = f"s3://{os.environ['BUCKET_NAME']}/pipeline_test"

session.upload_data(
    bucket=os.environ["BUCKET_NAME"],
    key_prefix=f"pipeline_test",
    path="/home/sagemaker-user/data_science/pipeline_test.py",
)

# sagemaker container paths
container_base_path = "/opt/ml/processing"

def test_base_processor():

    # handle amazon sagemaker processing tasks
    processor = Processor(
        role=os.environ["ROLE"],
        image_uri=os.environ["IMAGE_URI"],
        instance_count=1,
        instance_type="ml.t3.medium",
        entrypoint=[
            "python",
            f"{container_base_path}/pipeline_test.py", # I also tried /input/pipeline_test.py
            "--processor=base-processor",
        ],
    )

    processor.run(
        job_name=f'processor-test-5',
        outputs=[
            ProcessingOutput(
                source=f"{container_base_path}/output/result",
                destination=f"{data_output_path}/result",
                output_name="test_result",
            ),
        ],
    )

test_base_processor()

不幸的是,管道失败,当我检查 cloudwatch 日志时,我看到以下错误:

python:无法打开文件“/opt/ml/processing/pipeline_test.py”:[Errno 2]没有这样的文件或目录

这是 dockerfile:

# Use Python 3.10.14 base image
FROM --platform=linux/amd64 python:3.10.14 as build

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    PYTHONIOENCODING=UTF-8 \
    LANG=C.UTF-8 \
    LC_ALL=C.UTF-8

# Install system dependencies
RUN apt-get update && \
    apt-get install -y \
    gcc \
    libpq-dev \
    libffi-dev

# Copy requirements.txt
COPY requirements.txt .

# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt

我检查过的事情:

  1. 我可以确认
    pipeline_test.py
    已成功推送到s3
  2. 我尝试了
    container_base_path
    的多种变体,添加
    /processing/
    目录、删除它等等。
python amazon-s3 dockerfile amazon-sagemaker amazon-sagemaker-studio
1个回答
0
投票

当您使用自己的容器映像时,您需要通过以下两个选项来提供脚本。

  1. 使用 ScriptProcessor 而不是 Processor。请参阅此文档了解更多详细信息。
  2. 构建镜像时将脚本复制到容器镜像中。请参阅此文档了解更多详细信息。
© www.soinside.com 2019 - 2024. All rights reserved.