

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

# 使用您自己的处理容器运行脚本
<a name="processing-container-run-scripts"></a>

您可以使用 scikit-learn 脚本预处理数据并评估模型。要了解如何运行 scikit-learn 脚本以执行这些任务，请参阅 [scikit-learn 处理](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation)示例笔记本。本笔记本使用 Amaz SageMaker on Python 软件开发工具包中的`ScriptProcessor`类进行处理。

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

在使用以下示例之前，您需要准备自己的输入数据，以及用于处理数据的 Python 脚本。有关此过程的指导示例 end-to-end，请参阅 [scikit-learn Processing 示例笔记](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation)本。

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"]
   ```

1. 使用 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 AWS --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
   ```

1. `ScriptProcessor`从 SageMaker Python 软件开发工具包中设置以运行脚本。*image\$1uri*替换为您创建的映像的 URI，*role\$1arn*替换为有权访问您的目标 Amazon S3 存储桶的 AWS 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')
   ```

1. 运行 脚本。*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](https://kubernetes.io/)。