在 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_ipex
、bf16
和 no_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_ipex
和 bf16
,请将这些参数添加到 TrainingArguments
中,如下所示
training_args = TrainingArguments(
output_dir=args.output_path,
+ bf16=True,
+ use_ipex=True,
+ use_cpu=True,
**kwargs
)
实践示例
博客:使用英特尔 Sapphire Rapids 加速 PyTorch Transformers
< > GitHub 更新