Transformers 文档

在CPU上的高效训练

在CPU上的高效训练

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

使用IPEX的混合精度

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

为了进一步最大化训练性能,您可以使用Intel® Extension for PyTorch (IPEX),这是一个基于PyTorch构建的库,并增加了额外的CPU指令集架构(ISA)级别支持,例如Intel® Advanced Vector Extensions 512 Vector Neural Network Instructions (Intel® AVX512-VNNI)和Intel® Advanced Matrix Extensions (Intel® AMX),以在Intel CPU上获得额外的性能提升。然而,仅支持AVX2的CPU(例如AMD或较旧的Intel CPU)在IPEX下不保证会有更好的性能。

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

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

IPEX 安装:

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

PyTorch 版本 IPEX 版本
2.5.0 2.5.0+cpu
2.4.0 2.4.0+cpu
2.3.0 2.3.0+cpu
2.2.0 2.2.0+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_ipexbf16fp16,以及no_cuda

Transformers问答的使用案例为例

  • 在CPU上使用BF16自动混合精度进行IPEX训练:
     python examples/pytorch/question-answering/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

< > Update on GitHub