Skip to content

Amazon SageMaker

Hugging Face 和 Amazon 推出了新的 Hugging Face 深度学习容器 (DLCs),使在 Amazon SageMaker 上训练 Hugging Face Transformer 模型变得更加容易。

入门

设置与安装

在你可以在 Amazon SageMaker 上运行你的 Accelerate 脚本之前,需要注册一个 AWS 账户。如果你还没有 AWS 账户,可以在这里了解更多信息 这里

拥有 AWS 账户后,你需要安装 sagemaker SDK 以使用 Accelerate,命令如下:

bash
pip install "accelerate[sagemaker]" --upgrade

目前,DLC 已预装了 transformersdatasetstokenizers。Accelerate 尚未包含在 DLC 中(但很快将被添加!),因此要在 Amazon SageMaker 中使用它,你需要在训练脚本所在的目录中创建一个 requirements.txt 文件,并将其作为依赖项添加:

accelerate

你还需要将其他依赖项添加到这个 requirements.txt 文件中。

配置 Accelerate

你可以像配置非 SageMaker 训练任务一样,使用 Accelerate CLI 配置 Amazon SageMaker 的启动配置:

bash
accelerate config
# In which compute environment are you running? ([0] This machine, [1] AWS (Amazon SageMaker)): 1

Accelerate 将会引导你完成关于你的 Amazon SageMaker 配置的问卷,并创建一个你可以编辑的配置文件。

准备一个 Accelerate 微调脚本

训练脚本与你在 SageMaker 之外运行的训练脚本非常相似,但为了在训练后保存模型,你需要指定 /opt/ml/model 或使用 os.environ["SM_MODEL_DIR"] 作为保存目录。训练完成后,该目录中的工件将被上传到 S3:

diff
- torch.save('/opt/ml/model`)
+ accelerator.save('/opt/ml/model')

启动训练

你可以使用 Accelerate CLI 启动训练:

accelerate launch path_to_script.py --args_to_the_script

这将使用你的配置启动训练脚本。你唯一需要做的是提供训练脚本所需的所有命名参数。

示例

bash
accelerate launch ./examples/sagemaker_example.py

输出:

Configuring Amazon SageMaker environment
Converting Arguments to Hyperparameters
Creating Estimator
2021-04-08 11:56:50 Starting - Starting the training job...
2021-04-08 11:57:13 Starting - Launching requested ML instancesProfilerReport-1617883008: InProgress
.........
2021-04-08 11:58:54 Starting - Preparing the instances for training.........
2021-04-08 12:00:24 Downloading - Downloading input data
2021-04-08 12:00:24 Training - Downloading the training image..................
2021-04-08 12:03:39 Training - Training image download completed. Training in progress..
........
epoch 0: {'accuracy': 0.7598039215686274, 'f1': 0.8178438661710037}
epoch 1: {'accuracy': 0.8357843137254902, 'f1': 0.882249560632689}
epoch 2: {'accuracy': 0.8406862745098039, 'f1': 0.8869565217391304}
........
2021-04-08 12:05:40 Uploading - Uploading generated training model
2021-04-08 12:05:40 Completed - Training job completed
Training seconds: 331
Billable seconds: 331
You can find your model data at: s3://your-bucket/accelerate-sagemaker-1-2021-04-08-11-56-47-108/output/model.tar.gz

高级功能

分布式训练:数据并行

通过运行 accelerate config 设置加速配置,并回答 SageMaker 相关问题进行设置。 要使用 SageMaker DDP,在被问及 分布式模式是什么?([0] 不使用分布式训练, [1] 数据并行): 时选择它。 以下是一个示例配置:

yaml
base_job_name: accelerate-sagemaker-1
compute_environment: AMAZON_SAGEMAKER
distributed_type: DATA_PARALLEL
ec2_instance_type: ml.p3.16xlarge
iam_role_name: xxxxx
image_uri: null
mixed_precision: fp16
num_machines: 1
profile: xxxxx
py_version: py38
pytorch_version: 1.10.2
region: us-east-1
transformers_version: 4.17.0
use_cpu: false

分布式训练:模型并行

当前正在开发中,即将支持。

Python 包和依赖

Accelerate 当前使用 DLCs,并预装了 transformersdatasetstokenizers。如果你想要使用不同的或其他 Python 包,可以通过将它们添加到 requirements.txt 中来实现。这些包将在你的训练脚本启动之前安装。

本地训练:SageMaker 本地模式

SageMaker SDK 中的本地模式允许你在 HuggingFace DLC(深度学习容器)或使用自定义容器镜像中本地运行你的训练脚本。这对于在最终容器环境中调试和测试你的训练脚本非常有用。本地模式使用 Docker Compose(注意:Docker Compose V2 尚不支持)。SDK 将处理对 ECR 的身份验证,以将 DLC 拉取到你的本地环境。你可以模拟 CPU(单实例和多实例)和 GPU(单实例)SageMaker 训练任务。

要使用本地模式,你需要将 ec2_instance_type 设置为 local

yaml
ec2_instance_type: local

高级配置

配置允许你覆盖 Estimator 的参数。 这些设置必须在配置文件中应用,并且不属于 accelerate config 的一部分。你可以控制训练任务的许多其他方面,例如使用 Spot 实例、启用网络隔离等。

yaml
additional_args:
  # enable network isolation to restrict internet access for containers
  enable_network_isolation: True

你可以在这里找到所有可用的配置这里

使用竞价实例

你可以使用竞价实例,例如通过(参见高级配置):

yaml
additional_args:
  use_spot_instances: True
  max_wait: 86400

注意:Spot 实例可能会被终止,训练需要从检查点继续。Accelerate 默认不支持此功能。如果你需要此功能,请联系我们。

远程脚本:使用位于 Github 上的脚本

尚未决定是否需要此功能。如果你需要此功能,请联系我们。