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 已预装了 transformers、datasets 和 tokenizers。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,并预装了 transformers、datasets 和 tokenizers。如果你想要使用不同的或其他 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 上的脚本 ​

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