在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_ipex
、bf16
或fp16
,以及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_ipex
和 bf16
,请将这些参数添加到 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