调整您自己的训练容器 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

调整您自己的训练容器

要运行您自己的训练模型,请使用Amazon SageMaker 培训工具包通过 Amazon SageMaker 笔记本实例。

第 1 步:创建 SageMaker 笔记本实例

  1. 打开位于 https://console.aws.amazon.com/sagemaker/ 的 Amazon SageMaker 控制台。

  2. 在左侧导航窗格中,选择笔记本,选择笔记本实例选择,然后选择创建笔记本实例.

  3. Create notebook instance (创建笔记本实例) 页面上提供以下信息:

    1. 对于 Notebook instance name (笔记本实例名称),输入 RunScriptNotebookInstance

    2. 对于 Notebook instance type (笔记本实例类型),选择 ml.t2.medium

    3. 权限和加密部分中,执行以下操作:

      1. 对于 IAM Role (IAM 角色),选择 Create a new role (创建新角色)

      2. 在存储库的创建 IAM 角色选择页面,选择特定的 S3 存储桶,指定一个名为的 Amazon S3 存储桶sagemaker-run-script选择,然后选择创建角色.

        IAM SageMaker 建一个名为的 IAM 角色AmazonSageMaker-ExecutionRole-YYYYMMDDTHHmmSS. 例如:AmazonSageMaker-ExecutionRole-20190429T110788。请注意,执行角色命名约定使用创建角色的日期和时间,由分隔。T.

    4. 适用于根访问,选择启用.

    5. 选择创建笔记本实例

  4. 在存储库的笔记本实例页面,状态Pending. 启动机器学习计算实例(在这种情况下是启动笔记本实例),并将 ML 存储卷附加到该实例。笔记本实例有一个预配置的 Jupyter 笔记本服务器和一组 Anaconda 库。有关更多信息,请参阅 。CreateNotebookInstance.

  5. 权限和加密部分,复制IAM 角色 ARN 编号,然后将其粘贴到记事本文件中以临时保存它。稍后,您可以使用此 IAM 角色 ARN 编号在笔记本实例中配置本地训练估算器。The IAM role ARN number (IAM 角色 ARN 编号) 如下所示:'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'

  6. 在笔记本实例的状态更改为之后InService 中,选择打开 JupyterLab.

第 2 步:创建并上传 Dockerfile 和 Python 训练脚本

  1. 打开 JupyterLab 后,请在 JupyterLab 的主目录中创建一个新文件夹。在左上角选择新文件夹图标,然后输入文件夹名称docker_test_folder.

  2. 创建Dockerfile中的文本文件docker_test_folder目录。

    1. 选择新启动器左上角的图标 (+)。

    2. 在右窗格中其他选择部分,选择文本文件.

    3. 粘贴以下内容Dockerfile示例代码放入文本文件中。

      FROM tensorflow/tensorflow:2.2.0rc2-gpu-py3-jupyter # Install sagemaker-training toolkit that contains the common functionality necessary to create a container compatible with SageMaker and the Python SDK. RUN pip3 install sagemaker-training # Copies the training code inside the container COPY train.py /opt/ml/code/train.py # Defines train.py as script entrypoint ENV SAGEMAKER_PROGRAM train.py

      Dockerfile 脚本将执行以下任务:

      • FROM tensorflow/tensorflow:2.2.0rc2-gpu-py3-jupyter— 下载 TensorFlow Docker 基本映像。你可以用你想要用来构建容器的任何 Docker 基本映像替换它,也可以用Amazon预构建容器基本映像。

      • RUN pip install sagemaker-training— 安装SageMaker 培训练套件其中包含创建与 SageMaker 兼容的容器所必须使用的常见功能。

      • COPY train.py /opt/ml/code/train.py— 将脚本复制到 SageMaker 预期的容器内的位置。该脚本必须位于此文件夹中。

      • ENV SAGEMAKER_PROGRAM train.py— 拿你的训练脚本train.py作为入口点脚本复制在/opt/ml/code容器的文件夹。这是构建您自己的容器时唯一必须指定的环境变量。

    4. 在左侧目录导航窗格中,文本文件名可能会自动命名为。untitled.txt. 要重命名文件,请右键单击文件,请选择重命名将文件重命名为Dockerfile没有.txt扩展,然后按Ctrl+s要么Command+s保存文件。

  3. 创建或上传训练脚本train.py中的docker_test_folder. 为此练习,您可以使用以下示例脚本。

    import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=1) model.evaluate(x_test, y_test)

第 3 步:构建容器

  1. 在 JupyterLab 主目录中,打开 Jupyter 笔记本。要打开新笔记本,请选择新启动图标然后选择conda_tensorflow2_p36中的笔记本部分。

  2. 在第一个笔记本单元格中运行以下命令以更改为docker_test_folder目录:

    % cd ~/SageMaker/docker_test_folder

    这将返回您当前的目录,如下所示:

    ! pwd

    output: /home/ec2-user/SageMaker/docker_test_folder

  3. 要构建 Docker 容器,请运行以下 Docker 构建命令,包括结尾的空格,后跟句点:

    ! docker build -t tf-custom-container-test .

    Docker 构建命令必须从您创建的 Docker 目录运行,在此例中为。docker_test_folder.

    注意

    如果您收到以下错误消息提示 Docker 找不到 Dockerfile,请确保 Dockerfile 的名称正确并已保存到目录中。

    unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/ec2-user/SageMaker/docker/Dockerfile: no such file or directory

    请记住,docker查找专门名为的文件Dockerfile在当前目录中没有任何扩展名。如果您将其命名为其他名称,则可以使用-f标志。例如,如果您将 Dockerfile 命名为Dockerfile-text.txt,运行以下命令:

    ! docker build -t tf-custom-container-test -f Dockerfile-text.txt .

第 4 步:测试容器

  1. 要在本地测试笔记本实例中的容器,请打开 Jupyter 笔记本。选择新启动器然后选择笔记本conda_tensorflow_p36框架。

  2. 将以下示例脚本粘贴到笔记本代码单元格中以配置 SageMaker Estemator。

    SageMaker Python SDK v1
    from sagemaker.estimator import Estimator estimator = Estimator(image_name='tf-custom-container-test', role='arn:aws:iam::111122223333:role/role-name', instance_count=1, instance_type='local') estimator.fit()
    SageMaker Python SDK v2
    from sagemaker.estimator import Estimator estimator = Estimator(image_uri='tf-custom-container-test', role='arn:aws:iam::111122223333:role/role-name', instance_count=1, instance_type='local') estimator.fit()
  3. 替换'Put_Your_ARN_Here'与价值IAM 角色 ARN 编号在配置笔记本实例时复制到记事本文件中。ARN 应如下所示:'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'.

  4. 运行代码单元。该测试输出训练环境配置、用于环境变量的值、数据源以及训练期间获得的损失和准确率。

第 5 步:将容器推送到 Amazon Elastic Container Registry (Amazon ECR)

  1. 成功运行本地模式测试后,您可以将 Docker 容器推送到Amazon ECR然后用它来运行培训工作。

    在笔记本单元格中运行以下命令行。

    %%sh # Specify an algorithm name algorithm_name=tf-custom-container-test account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) region=${region:-us-west-2} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Get the login command from ECR and execute it directly aws ecr get-login-password --region ${region}|docker login --username AWS --password-stdin ${fullname} # Build the docker image locally with the image name and then push it to ECR # with the full name. docker build -t ${algorithm_name} . docker tag ${algorithm_name} ${fullname} docker push ${fullname}
    注意

    此 bash shell 脚本可能会引发类似于以下错误消息的权限问题:

    "denied: User: [ARN] is not authorized to perform: ecr:InitiateLayerUpload on resource: arn:aws:ecr:us-east-1:[id]:repository/tf-custom-container-test"

    如果发生此错误,你需要附加AmazonEC2ContainerRegistryFullAccess策略您的 IAM 角色。转到IAM 控制台,选择角色从左侧导航窗格中,查找您用于笔记本实例的 IAM 角色。在许可选项卡上,选择附加策略按钮,然后搜索AmazonEC2ContainerRegistryFullAccess政策。标记策略的复选框,然后选择附加策略完成操作。

  2. 推送容器后,您可以从 SageMaker 环境中的任何位置调用 Amazon ECR 镜像。在下一个笔记本电脑单元中运行以下代码示例。

    如果您想将此训练容器与 SageMaker Studio 一起使用其可视化功能,还可以在 Studio 笔记本电脑单元中运行以下代码来调用训练容器的 Amazon ECR 映像。

    import boto3 account_id = boto3.client('sts').get_caller_identity().get('Account') ecr_repository = 'tf-custom-container-test' tag = ':latest' region = boto3.session.Session().region_name uri_suffix = 'amazonaws.com' if region in ['cn-north-1', 'cn-northwest-1']: uri_suffix = 'amazonaws.com.cn' byoc_image_uri = '{}.dkr.ecr.{}.{}/{}'.format(account_id, region, uri_suffix, ecr_repository + tag) byoc_image_uri # This should return something like # 111122223333.dkr.ecr.us-east-2.amazonaws.com/sagemaker-byoc-test:latest
  3. 使用ecr_image从上一步中检索以配置 SageMaker 估计器对象。以下代码示 SageMaker 使用byoc_image_uri并在 Amazon EC2 实例上启动培训作业。

    SageMaker Python SDK v1
    import sagemaker from sagemaker import get_execution_role from sagemaker.estimator import Estimator estimator = Estimator(image_uri=byoc_image_uri, role=get_execution_role(), base_job_name='tf-custom-container-test-job', instance_count=1, instance_type='ml.p2.xlarge') # start training estimator.fit() # deploy the trained model predictor = estimator.deploy(1, instance_type)
    SageMaker Python SDK v2
    import sagemaker from sagemaker import get_execution_role from sagemaker.estimator import Estimator estimator = Estimator(image_uri=byoc_image_uri, role=get_execution_role(), base_job_name='tf-custom-container-test-job', instance_count=1, instance_type='ml.p2.xlarge') # start training estimator.fit() # deploy the trained model predictor = estimator.deploy(1, instance_type)

有关展示如何在本地测试自定义容器并将其推送到 Amazon ECR 映像的完整示例,请参阅构建您自己的 TensorFlow 容器笔记本示例。

提示

要分析和调试培训作业以监控系统利用率问题(例如 CPU 瓶颈和 GPU 利用率不足)并识别训练问题(例如过度拟合、过度训练、张量爆炸和渐变消失),请使用 Amazon SageMaker 调试器。有关更多信息,请参阅

第 6 步:清理 资源

完成使用入门示例后清除资源

  1. 打开SageMaker 控制台,选择笔记本实例RunScriptNotebookInstance,选择操作,然后选择停止. 停止实例可能需要几分钟时间。

  2. 在实例之后状态对 的更改Stopped,选择操作,选择Delete选择,然后选择Delete在对话框中。删除实例可能需要几分钟时间。删除后,笔记本实例将从表中消失。

  3. 打开Amazon S3 控制台删除为存储模型构件和训练数据集创建的存储桶。

  4. 打开IAM 控制台然后删除 IAM 角色。如果您已创建权限策略,也可以将其删除。

    注意

    Docker 容器在运行后会自动关闭。您不需要删除该容器。