使用 IPEX-LLM 加速英特尔®至强®可扩展处理器上的大语言模型推理

2024-05-06 16:23:27 浏览数 (2)

随着生成式 AI 的蓬勃发展,有越来越多的用户希望在英特尔®至强®可扩展处理器上探索大语言模型的应用。英特尔®至强®可扩展处理器配备众多物理核心和充足的内存容量和高带宽,可以有效的支持大语言模型的工作负载需求;同时,英特尔®至强®可扩展处理器的稳定性和可靠性,可以有效保障大语言模型在企业级应用或云服务中的长时间运行。

Intel® LLM Library for PyTorch (IPEX-LLM) 是英特尔开源的大语言模型低比特优化库,可以高效的运行在英特尔®至强®可扩展处理器上。IPEX-LLM 利用第四代英特尔®至强®可扩展处理器提供的 AMX 指令集,以及一系列低比特优化,使业界流行的大语言模型得以流畅运行,体现了在英特尔®至强®可扩展处理器运行大语言模型推理的优异性价比。同时,IPEX-LLM 也无缝支持各种大语言模型社区,优化和方案,例如 Hugging Face, LangChain, LlamaIndex, vLLM, llama.cpp, ollama 等等。

1 IPEX-LLM 在第四代英特尔®至强®可扩展处理器的大语言模型推理性能

使用 IPEX-LLM 可以在第四代英特尔®至强®可扩展处理器上运行当前流行的大语言模型的推理工作。下图展示了一部分模型的实测性能数据。图 1 性能数据基于 IPEX-LLM 低比特 INT4 优化,图 2 性能数据基于 IPEX-LLM BF16 Self-Speculative Decoding 优化。测试配置为输入 1024 个 Token,批处理大小 1,性能数据为每 Token 的延迟时间。

图 1:IPEX-LLM INT4 大语言模型推理延迟

图 2:IPEX-LLM BF16 (with Self-Speculative Decoding) 大语言模型推理延迟

请参考配置和免责声明以获取配置信息。

2 在第四代英特尔®至强®可扩展处理器上搭建和运行大语言模型推理

在第四代英特尔®至强®可扩展处理器上,可以使用 IPEX-LLM 非常轻松的构建大语言模型推理能力。用户可以通过参考快速安装指南以便在第四代英特尔®至强®可扩展处理器上安装和使用 IPEX-LLM。

我们提供了很多可以在第四代英特尔®至强®可扩展处理器上运行的大语言模型示例,用户可以在合适的示例基础上快速开发大语言模型推理应用。在用 IPEX-LLM 开发大语言模型推理应用时,用户可以使用 HuggingFace Transformer 样式的 API,仅需要做最小量的更改,例如使用合适的 import 声明,以及在 from_pretrained 参数中设置 “load_in_4bit=True” 来启用 IPEX-LLM 的低比特优化。具体改动可以参考以下代码示例:

代码语言:javascript复制
from ipex_llm.transformers import AutoModelForCausalL
model = AutoModelForCausalLM.from_pretrained('/path/to/model/', 
load_in_4bit=True).to("xpu")

模型会被自动转换为低比特并加载到执行计算工作的第四代英特尔®至强®可扩展处理器上,在这个过程中,IPEX-LLM 实现的各种基于硬件和软件的优化会被利用,以加速大语言模型的推理性能。

同样,使用 IPEX-LLM 的 BF16 Self-Speculative Decoding 也很简单。用户可以通过在加载模型时指定一个额外参数 speculative=True 来启用该功能。以下是示例代码片段:

代码语言:javascript复制
from ipex_llm.transformers import AutoModelForCausalL
model = AutoModelForCausalLM.from_pretrained('/path/to/model/',
  optimize_model = True, 
  torch_dtype = torch.bf16,
  load_in_lowbit = “bf16”),
  torchscript = True,
  speculative=True, #use self-speculative decoding
  trust_remote_code=True, 
  use_cache = True)
inputs = tokenizer(prompt, return_tensors='pt')
input_ids = inputs.input_ids.to(model.device)
attention_mask = inputs.attention_mask.to(model.device)
output = model.generate(input_ids,
  max_new_tokens=args.n_predict,
  attention_mask=attention_mask,
  do_sample=False)

在使用 BF16 Self-Speculative Decoding 时,IPEX-LLM 会在幕后自动利用低比特优化后的 INT4 小模型来加速 BF16 模型,从而提高 BF16 模型的推理速度。用户可以查看 IPEX-LLM BF16 Self-Speculative Decoding 的样例代码来获得更多信息。

性能测试

用户可以在第四代英特尔®至强®可扩展处理器上运行大语言模型的性能测试,可以参考 IPEX-LLM 提供的性能测试快速指南 ,以正确的准备硬件和软件环境,以及调整测试脚本以满足用户的测试场景。在执行性能测试前,我们推荐用户使用 IPEX-LLM 的环境检查工具来进一步验证安装和运行环境是否正确设置。environment check utility scripts 。

3 总结

本文介绍了如何使用 IPEX-LLM 在第四代英特尔®至强®可扩展处理器上进行大语言模型推理,以及低比特 INT4 和 BF16 Self-Speculative Decoding 的性能数据。用户可以参考 IPEX-LLM github 和程序样例来获得大语言模型的最新技术内容。

致谢

特别感谢史栋杰,胡雅白,王健,田翔宇对本文的贡献,以及 Padma Apparao 的重要支持。

配置和免责声明

本次数据为截止 2024 年 3 月的测试结果。测试硬件配置:Intel® Xeon® Platinum 8468, 48 cores, HT On, Turbo On, 2-socket, Total Memory 1024GB (16x64GB DDR5 4800 MT/s [4800 MT/s])。系统配置:BIOS 05.02.01, microcode 0x2b0004d0, OS: Ubuntu 22.04.3 LTS, Kernel: 6.2.0-37-generic。软件配置:bigdl-llm 2.5.0b20240313 (prior to migration to ipex-llm), pytorch 2.3.0.dev20240128 cpu, intel-extension-for-pytorch 2.3.0 git004cd72, transformers 4.36.2。性能数据为单路处理器上的测试结果,采用 greedy search 解码方式,输入为 1024 token,输出为 128 token,批处理大小为 1。

实际性能受使用情况、配置和其他因素的差异影响。更多信息请见 www.Intel.cn/PerformanceIndex。性能测试结果基于配置信息中显示的日期进行测试,且可能并未反映所有公开可用的安全更新。详情请参阅配置信息披露。没有任何产品或组件是绝对安全的。具体成本和结果可能不同。英特尔技术可能需要启用硬件、软件或激活服务。英特尔未做出任何明示和默示的保证,包括但不限于,关于适销性、适合特定目的及不侵权的默示保证,以及在履约过程、交易过程或贸易惯例中引起的任何保证。英特尔并不控制或审计第三方数据。请您审查该内容,咨询其他来源,并确认提及数据是否准确。© 英特尔公司版权所有。英特尔、英特尔标识以及其他英特尔商标是英特尔公司或其子公司在美国和 / 或其他国家的商标。其他的名称和品牌可能是其他所有者的资产。

0 人点赞