调整您自己的训练容器 - 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,然后选择。创建角色.

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

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

    5. 选择创建笔记本实例

  4. 在存储库的笔记本实例页面上,状态Pending. Amazon SageMaker 启动机器学习计算实例,在这种情况下是启动笔记本实例,并将 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 后,请在 JJupyterLab 的主目录中创建一个新的文件夹。在左上角,选择新文件夹图标,然后输入文件夹名称docker_test_folder.

  2. 创建Dockerfile文本文件中的docker_test_folder.directory

    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 基本映像,以及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 笔记本。要打开新笔记本,请选择新启动图标,然后选择张贴流程 2_p36中的笔记本部分。

  2. 在第一个笔记本单元格中运行以下命令,以更改为docker_test_folderdirectory

    % 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 找不到 Docker 文件,请确保 Docker 文件具有正确的名称并已保存到目录中。

    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标志。例如,如果您将 Docker 文件命名为Dockerfile-text.txt中,运行以下命令:

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

第 4 步:测试容器

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

  2. 将以下示例脚本粘贴到笔记本代码单元中以配置 SageMaker 估算程序。

    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 --region ${region} --no-include-email) # 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 容器在运行后会自动关闭。您不需要删除该容器。