本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
调整您自己的训练容器
要运行您自己的训练模型,请使用Amazon SageMaker 培训工具包
第 1 步:创建 SageMaker 笔记本实例
-
打开位于 https://console.aws.amazon.com/sagemaker/
的 Amazon SageMaker 控制台。 -
在左侧导航窗格中,选择笔记本,选择笔记本实例选择,然后选择创建笔记本实例.
-
在 Create notebook instance (创建笔记本实例) 页面上提供以下信息:
-
对于 Notebook instance name (笔记本实例名称),输入
RunScriptNotebookInstance
。 -
对于 Notebook instance type (笔记本实例类型),选择
ml.t2.medium
。 -
在权限和加密部分中,执行以下操作:
-
对于 IAM Role (IAM 角色),选择 Create a new role (创建新角色)。
-
在存储库的创建 IAM 角色选择页面,选择特定的 S3 存储桶,指定一个名为的 Amazon S3 存储桶
sagemaker-run-script
选择,然后选择创建角色.IAM SageMaker 建一个名为的 IAM 角色
AmazonSageMaker-ExecutionRole-
. 例如:YYYYMMDD
THHmmSS
AmazonSageMaker-ExecutionRole-20190429T110788
。请注意,执行角色命名约定使用创建角色的日期和时间,由分隔。T
.
-
-
适用于根访问,选择启用.
-
选择创建笔记本实例。
-
-
在存储库的笔记本实例页面,状态是Pending. 启动机器学习计算实例(在这种情况下是启动笔记本实例),并将 ML 存储卷附加到该实例。笔记本实例有一个预配置的 Jupyter 笔记本服务器和一组 Anaconda 库。有关更多信息,请参阅 。CreateNotebookInstance.
在权限和加密部分,复制IAM 角色 ARN 编号,然后将其粘贴到记事本文件中以临时保存它。稍后,您可以使用此 IAM 角色 ARN 编号在笔记本实例中配置本地训练估算器。The IAM role ARN number (IAM 角色 ARN 编号) 如下所示:
'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'
-
在笔记本实例的状态更改为之后InService 中,选择打开 JupyterLab.
第 2 步:创建并上传 Dockerfile 和 Python 训练脚本
-
打开 JupyterLab 后,请在 JupyterLab 的主目录中创建一个新文件夹。在左上角选择新文件夹图标,然后输入文件夹名称
docker_test_folder
. -
创建
Dockerfile
中的文本文件docker_test_folder
目录。-
选择新启动器左上角的图标 (+)。
-
在右窗格中其他选择部分,选择文本文件.
-
粘贴以下内容
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
容器的文件夹。这是构建您自己的容器时唯一必须指定的环境变量。
-
-
在左侧目录导航窗格中,文本文件名可能会自动命名为。
untitled.txt
. 要重命名文件,请右键单击文件,请选择重命名将文件重命名为Dockerfile
没有.txt
扩展,然后按Ctrl+s
要么Command+s
保存文件。
-
-
创建或上传训练脚本
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 步:构建容器
-
在 JupyterLab 主目录中,打开 Jupyter 笔记本。要打开新笔记本,请选择新启动图标然后选择conda_tensorflow2_p36中的笔记本部分。
-
在第一个笔记本单元格中运行以下命令以更改为
docker_test_folder
目录:% cd ~/SageMaker/docker_test_folder
这将返回您当前的目录,如下所示:
! pwd
output: /home/ec2-user/SageMaker/docker_test_folder
-
要构建 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 步:测试容器
-
要在本地测试笔记本实例中的容器,请打开 Jupyter 笔记本。选择新启动器然后选择笔记本在
conda_tensorflow_p36
框架。 -
将以下示例脚本粘贴到笔记本代码单元格中以配置 SageMaker Estemator。
-
替换
'Put_Your_ARN_Here'
与价值IAM 角色 ARN 编号在配置笔记本实例时复制到记事本文件中。ARN 应如下所示:'arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole-20190429T110788'
. -
运行代码单元。该测试输出训练环境配置、用于环境变量的值、数据源以及训练期间获得的损失和准确率。
第 5 步:将容器推送到 Amazon Elastic Container Registry (Amazon ECR)
成功运行本地模式测试后,您可以将 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政策。标记策略的复选框,然后选择附加策略完成操作。 -
推送容器后,您可以从 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
使用
ecr_image
从上一步中检索以配置 SageMaker 估计器对象。以下代码示 SageMaker 使用byoc_image_uri
并在 Amazon EC2 实例上启动培训作业。
有关展示如何在本地测试自定义容器并将其推送到 Amazon ECR 映像的完整示例,请参阅构建您自己的 TensorFlow 容器
第 6 步:清理 资源
完成使用入门示例后清除资源
-
打开SageMaker 控制台
,选择笔记本实例RunScriptNotebookInstance,选择操作,然后选择停止. 停止实例可能需要几分钟时间。 -
在实例之后状态对 的更改Stopped,选择操作,选择Delete选择,然后选择Delete在对话框中。删除实例可能需要几分钟时间。删除后,笔记本实例将从表中消失。
-
打开Amazon S3 控制台
删除为存储模型构件和训练数据集创建的存储桶。 -
打开IAM 控制台
然后删除 IAM 角色。如果您已创建权限策略,也可以将其删除。 注意 Docker 容器在运行后会自动关闭。您不需要删除该容器。