使用您自己的处理容器运行脚本 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用您自己的处理容器运行脚本

您可以使用 scikit-learn 脚本预处理数据并评估模型。要了解如何运行 scikit-learn 脚本以执行这些任务,请参阅 scikit-learn 处理示例笔记本。此笔记本使用来自 Amazon SageMaker Python SDK for Processing 的类 ScriptProcessor

以下示例显示了结合使用 ScriptProcessor 类和您自己的处理容器的一般工作流。该工作流显示了如何创建自己的映像、构建容器以及如何使用 ScriptProcessor 类和容器运行 Python 预处理脚本。处理作业将处理您的输入数据,并将处理后的数据保存在 Amazon Simple Storage Service (Amazon S3) 中。

在使用以下示例之前,您需要准备自己的输入数据,以及用于处理数据的 Python 脚本。有关此流程的端到端指导示例,请参阅 scikit-Learn 处理示例笔记本。

  1. 创建 Docker 目录并添加用于创建处理容器的 Dockerfile。将 pandas 和 scikit-learn 安装到此目录中。(您也可以使用类似的 RUN 命令安装自己的依赖项。)

    mkdir docker %%writefile docker/Dockerfile FROM python:3.7-slim-buster RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3 ENV PYTHONUNBUFFERED=TRUE ENTRYPOINT ["python3"]
  2. 使用 docker 命令构建容器,创建 Amazon Elastic Container Registry (Amazon ECR) 存储库,并将映像推送到 Amazon ECR。

    import boto3 account_id = boto3.client('sts').get_caller_identity().get('Account') region = boto3.Session().region_name ecr_repository = 'sagemaker-processing-container' tag = ':latest' processing_repository_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag) # Create ECR repository and push docker image !docker build -t $ecr_repository docker !aws ecr get-login-password --region {region} | docker login --username Amazon --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com !aws ecr create-repository --repository-name $ecr_repository !docker tag {ecr_repository + tag} $processing_repository_uri !docker push $processing_repository_uri
  3. 设置来自 SageMaker Python SDK 的 ScriptProcessor,以运行脚本。将 image_uri 替换为您创建的映像的 URI,将 role_arn 替换为有权访问目标 Amazon S3 存储桶的 Amazon Identity and Access Management 角色的 ARN。

    from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput script_processor = ScriptProcessor(command=['python3'], image_uri='image_uri', role='role_arn', instance_count=1, instance_type='ml.m5.xlarge')
  4. 运行脚本。将 preprocessing.py 替换为您自己的 Python 处理脚本的名称,将 s3://path/to/my/input-data.csv 替换为输入数据的 Amazon S3 路径。

    script_processor.run(code='preprocessing.py', inputs=[ProcessingInput( source='s3://path/to/my/input-data.csv', destination='/opt/ml/processing/input')], outputs=[ProcessingOutput(source='/opt/ml/processing/output/train'), ProcessingOutput(source='/opt/ml/processing/output/validation'), ProcessingOutput(source='/opt/ml/processing/output/test')])

您可以将此相同过程与任何其他库或系统依赖项结合使用。也可以使用现有 Docker 映像。包括您在其他平台上运行的映像,如 Kubernetes