本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 TensorFlow 训练编译器运行 SageMaker 训练作业
您可以使用任何 SageMaker 接口通过 Training Compiler 运行训练作业:Amazon SageMaker Studio Classic、Amazon SageMaker 笔记本实例和 AWS Command Line Interface。 SageMaker AWS SDK for Python (Boto3)
主题
使用 SageMaker Python 开发工具包
要打开 T SageMaker raining Compiler,请将compiler_config
参数添加到 SageMaker TensorFlow 或 Hugging Face 估算器中。导入 TrainingCompilerConfig
类,并将它的一个实例传递给 compiler_config
参数。以下代码示例显示了开启 SageMaker 训练编译器的 SageMaker 估计器类的结构。
提示
要开始使用 TensorFlow 和《变形金刚》库提供的预建模型,请尝试使用参考表中提供的批次大小,网址为经过测试的模型。
注意
SageMaker 训练编译器可 TensorFlow 通过 SageMaker TensorFlow
有关适合您的使用案例的信息,请参阅下列选项之一。
以下列表是使用编译器运行 SageMaker 训练作业所需的最少参数集。
注意
使用 SageMaker Hugging Face 估算器时,必须指定transformers_version
、tensorflow_version
hyperparameters
、compiler_config
和参数才能启用 Training Compiler。 SageMaker 您无法使用 image_uri
手动指定集成了 支持的框架 上列出的深度学习容器的 Training Compiler。
-
entry_point
(str) – 必需。指定训练脚本的文件名。 -
instance_count
(int) – 必需。指定实例数。 -
instance_type
(str) – 必需。指定实例类型。 -
transformers_version
(str) — 仅在使用 SageMaker Hugging Face 估算器时才需要。指定训练编译器支持 SageMaker 的 Hugging Face 变形金刚库版本。要查找可用版本,请参阅 支持的框架。 -
framework_version
或tensorflow_version
(str) – 必需。指定 SageMaker 训练编译器支持的 TensorFlow 版本。要查找可用版本,请参阅 支持的框架。注意
使用 SageMaker TensorFlow 估算器时,必须指定。
framework_version
使用 SageMaker Hugging Face 估计器时,必须同时指定和。
transformers_version
tensorflow_version
-
hyperparameters
(dict) – 可选。为训练作业指定超参数,例如n_gpus
、batch_size
和learning_rate
。启用 T SageMaker raining Compiler 后,请尝试更大的批量大小并相应地调整学习率。要查找有关使用编译器和调整的批处理大小以提高训练速度的案例研究,请参阅经过测试的模型和SageMaker 训练编译器示例笔记本和博客。 -
compiler_config
(TrainingCompilerConfig 对象)-必填。添加此参数可开启 SageMaker 训练编译器。下面是TrainingCompilerConfig
类的参数。-
enabled
(bool) – 可选。指定True
或False
以打开或关闭 SageMaker 训练编译器。默认值为True
。 -
debug
(bool) – 可选。要从编译器加速的训练作业中接收更详细的训练日志,请将此项更改为True
。但是,额外的日志记录可能会增加开销并减缓编译后的训练作业。默认值为False
。
-
警告
如果您打开 SageMaker 调试器,可能会影响 SageMaker 训练编译器的性能。我们建议您在运行 SageMaker Training Compiler 时关闭调试器,以确保不会对性能产生影响。有关更多信息,请参阅注意事项。要关闭 Debugger 功能,请向估算器添加以下两个参数:
disable_profiler=True, debugger_hook_config=False
如果使用编译器成功启动训练作业,则在作业初始化阶段将收到以下日志:
-
与
TrainingCompilerConfig(debug=False)
Found configuration for Training Compiler Configuring SM Training Compiler...
-
与
TrainingCompilerConfig(debug=True)
Found configuration for Training Compiler Configuring SM Training Compiler... Training Compiler set to debug mode
使用 SageMaker Python SDK 和扩展 SageMaker 框架 Deep Learning Containers
AWS Deep Learning Conta TensorFlow iners(DLC) TensorFlow的改编版本包括开源 TensorFlow 框架之上的更改。Frame SageMaker work Deep Learning
注意
此 Docker 自定义功能目前仅适用于。 TensorFlow
要针对您的用例扩展和自定义 SageMaker TensorFlow DLC,请按照以下说明进行操作。
创建 Dockerfile
使用以下 Dockerfile 模板来扩展 DLC。 SageMaker TensorFlow 你必须使用 SageMaker TensorFlow DLC 镜像作为 Docker 容器的基础镜像。要查找 SageMaker TensorFlow DLC 镜像 URI,请参阅支持的框架。
# SageMaker TensorFlow Deep Learning Container image FROM 763104351884.dkr.ecr.
<aws-region>
.amazonaws.com/tensorflow-training:<image-tag>
ENV PATH="/opt/ml/code:${PATH}" # This environment variable is used by the SageMaker container # to determine user code directory. ENV SAGEMAKER_SUBMIT_DIRECTORY /opt/ml/code # Add more code lines to customize for your use-case ...
有关更多信息,请参阅步骤 2:创建并上传 Dockerfile 和 Python 训练脚本。
在扩展 Framewor SageMaker k DLC 时,请考虑以下陷阱:
-
请勿明确卸载或更改 SageMaker 容器中 TensorFlow 软件包的版本。这样做会导致 AWS 经过优化的 TensorFlow 软件包被开源 TensorFlow 软件包覆盖,从而可能导致性能下降。
-
注意以特定 TensorFlow 版本或风格作为依赖项的软件包。这些软件包可能会隐式卸载 AWS 经过优化的软件包 TensorFlow 并安装开源 TensorFlow 软件包。
例如,有一个已知问题,那就是 tensorflow/models 和 tensorflow/tensorflow/training/docker/<tensorflow-version>/py3/<cuda-version>/Dockerfile.gpu
。在 Dockerfiles 中,您应该找到按顺序重新安装 AWS 托管 TensorFlow 二进制文件(指定给TF_URL
环境变量)和其他依赖项的代码行。重新安装部分应与以下示例类似:
# tf-models does not respect existing installations of TensorFlow # and always installs open source TensorFlow RUN pip3 install --no-cache-dir -U \ tf-models-official==
x.y.z
RUN pip3 uninstall -y tensorflow tensorflow-gpu \ ; pip3 install --no-cache-dir -U \ ${TF_URL} \ tensorflow-io==x.y.z
\ tensorflow-datasets==x.y.z
构建并推送到 ECR
要构建 Docker 容器并将其推送到 Amazon ECR,请按照以下链接中的说明进行操作:
使用 SageMaker Python 软件开发工具包估算器运行
照常使用 SageMaker TensorFlow 框架估算器。您必须指定 image_uri
以使用您在 Amazon ECR 中托管的新容器。
import sagemaker, boto3 from sagemaker import get_execution_role from sagemaker.tensorflow import TensorFlow, TrainingCompilerConfig 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' 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/tf-custom-container-test:latest estimator = TensorFlow( image_uri=image_uri, role=get_execution_role(), base_job_name='tf-custom-container-test-job
', instance_count=1, instance_type='ml.p3.8xlarge
' compiler_config=TrainingCompilerConfig(), disable_profiler=True, debugger_hook_config=False ) # Start training estimator.fit()
使用 SageMaker CreateTrainingJob
API 操作启用 SageMaker 训练编译器
SageMaker 必须通过 CreateTrainingJob
API 操作AlgorithmSpecification
和HyperParameters
字段指定训练编译器配置选项。
"AlgorithmSpecification": { "TrainingImage": "
<sagemaker-training-compiler-enabled-dlc-image>
" }, "HyperParameters": { "sagemaker_training_compiler_enabled": "true", "sagemaker_training_compiler_debug_mode": "false" }
要查找已实现 SageMaker 训练编译器的深度学习容器镜像 URI 的完整列表,请参阅支持的框架。