Transformers 文档

CPU 上的高效训练

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

在 CPU 上进行高效训练

本指南重点介绍如何在 CPU 上高效训练大型模型。

使用 IPEX 的混合精度

混合精度在模型中使用单精度 (fp32) 和半精度 (bf16/fp16) 数据类型来加速训练或推理,同时仍然保留大部分单精度准确性。现代 CPU(例如第三代和第四代英特尔® 至强® 可扩展处理器)原生支持 bf16,因此通过启用使用 bf16 的混合精度训练,您应该能够获得更高的性能。

为了进一步最大化训练性能,您可以使用 Intel® Extension for PyTorch (IPEX),它是一个基于 PyTorch 构建的库,并增加了额外的 CPU 指令集体系结构 (ISA) 级支持,例如 Intel® 高级矢量扩展 512 矢量神经网络指令 (Intel® AVX512-VNNI) 和 Intel® 高级矩阵扩展 (Intel® AMX),从而在 Intel CPU 上获得额外的性能提升。但是,仅具有 AVX2 的 CPU(例如 AMD 或较旧的 Intel CPU)在 IPEX 下无法保证获得更好的性能。

自 PyTorch 1.10 起,CPU 后端的自动混合精度 (AMP) 已启用。IPEX 中也支持 CPU 上的 bf16 和 bf16 运算符优化,并且部分已上游到 PyTorch 主分支。通过 IPEX AMP,您可以获得更好的性能和用户体验。

查看有关 自动混合精度 的更多详细信息。

IPEX 安装:

IPEX 版本跟随 PyTorch 发布,可以通过 pip 安装

PyTorch 版本 IPEX 版本
2.1.x 2.1.100+cpu
2.0.x 2.0.100+cpu
1.13 1.13.0+cpu
1.12 1.12.300+cpu

请运行 pip list | grep torch 获取您的 pytorch_version,以便您可以获取 IPEX version_name

pip install intel_extension_for_pytorch==<version_name> -f https://developer.intel.com/ipex-whl-stable-cpu

如果需要,您可以在 ipex-whl-stable-cpu 中查看最新版本。

查看有关 IPEX 安装 的更多方法。

在 Trainer 中使用

要在 Trainer 中使用 IPEX 启用自动混合精度,用户应在训练命令参数中添加 use_ipexbf16no_cuda

Transformers 问答 上的用例为例

  • 使用 BF16 自动混合精度在 CPU 上进行 IPEX 训练
     python run_qa.py \
    --model_name_or_path google-bert/bert-base-uncased \
    --dataset_name squad \
    --do_train \
    --do_eval \
    --per_device_train_batch_size 12 \
    --learning_rate 3e-5 \
    --num_train_epochs 2 \
    --max_seq_length 384 \
    --doc_stride 128 \
    --output_dir /tmp/debug_squad/ \
    --use_ipex \
    --bf16 \
    --use_cpu

如果要启用脚本中的 use_ipexbf16,请将这些参数添加到 TrainingArguments 中,如下所示

training_args = TrainingArguments(
    output_dir=args.output_path,
+   bf16=True,
+   use_ipex=True,
+   use_cpu=True,
    **kwargs
)

实践示例

博客:使用英特尔 Sapphire Rapids 加速 PyTorch Transformers

< > GitHub 更新