本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
调整自己的训练容器
要运行自己的训练模型,请使用亚马逊 SageMaker 培训工具包通过亚马逊
第 1 步:创建一个 SageMaker 笔记本实例
通过 https://console.aws.amazon.com/sagemaker/
打开亚马逊 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
,然后选择创建角色。SageMaker 创建名为的 IAM 角色
AmazonSageMaker-ExecutionRole-
。例如,YYYYMMDD
THHmmSS
AmazonSageMaker-ExecutionRole-20190429T110788
。请注意,执行角色命名约定使用创建角色的日期和时间,以 a 分隔T
。
-
-
对于 “根访问权限”,选择 “启用”。
-
选择创建笔记本实例。
-
-
在 “笔记本实例” 页面上,状态为 “待处理”。亚马逊可能需要几分钟 SageMaker 才能启动机器学习计算实例(在本例中为笔记本实例),然后为其附加机器学习存储卷。笔记本实例有一个预配置的 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
。 -
在
docker_test_folder
目录中创建Dockerfile
文本文件。-
选择左上角的新建启动器图标 (+)。
-
在右侧窗格的 “其他” 部分下,选择 “文本文件”。
-
将以下
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
— 安装包含创建与之兼容的容器所需的常用功能的 T SageMakerrainining Toolkit SageMaker。 -
COPY train.py /opt/ml/code/train.py
— 将脚本复制到容器内的预期位置 SageMaker。该脚本必须位于此文件夹中。 -
ENV SAGEMAKER_PROGRAM train.py
— 将您的训练脚本train.py
作为复制到容器/opt/ml/code
文件夹中的入口点脚本。这是您在构建自己的容器时必须指定的唯一环境变量。
-
-
在左侧目录导航窗格中,可能会自动命名文本文件名
untitled.txt
。要重命名文件,请右键单击该文件,选择重命名,将文件重命名为Dockerfile
不带.txt
扩展名,然后Command+s
按Ctrl+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_p39。
-
在第一个笔记本单元中运行以下命令以更改到该
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_p39
框架中的笔记本”。 -
将以下示例脚本粘贴到笔记本代码单元中以配置 E SageMaker stimator。
-
将该
'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 并使用它来运行训练任务。如果您想使用私有 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"
如果出现此错误,您需要将 A mazoneC2ContainerRegistryFullAccess 策略附加到您的 IAM 角色。前往 IAM 控制台
,从左侧导航窗格中选择角色,查找您用于 Notebook 实例的 iamRole。在 “权限” 选项卡下,选择 “附加政策” 按钮,然后搜索 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 镜像的完整示例,请参阅 Building Your Ow n Conta TensorFlow iner
提示
要分析和调试训练作业以监控系统利用率问题(例如 CPU 瓶颈和 GPU 利用率不足)并识别训练问题(例如过度拟合、过度训练、张量爆炸和梯度消失),请使用 Amazon D SageMaker ebugger。有关更多信息,请参阅将调试器用于自定义训练容器:
步骤 6:清理资源
完成使用入门示例后清除资源
-
打开SageMaker 控制台
,选择笔记本实例 RunScriptNotebookInstance,选择操作,然后选择停止。停止实例可能需要几分钟时间。 -
在实例状态更改为 “已停止” 后,选择操作,选择删除,然后在对话框中选择删除。删除实例可能需要几分钟时间。删除笔记本实例后,它会从表中消失。
-
打开 Amazon S3 控制台
并删除您为存储模型构件和训练数据集而创建的存储桶。 -
打开 IAM 控制台
并删除 IAM 角色。如果您已创建权限策略,也可以将其删除。 注意
Docker 容器在运行后会自动关闭。您不需要删除该容器。
博客和案例研究
以下博客讨论了有关在亚马逊中使用自定义训练容器的案例研究 SageMaker。
-
为什么要将自己的集装箱带到亚马逊 SageMaker 以及如何正确操作,M
ed ium(2023 年 1 月 20 日)