然而,随着 llm 规模不断扩大,运行大模型所需的资源消耗也越来越大,导致其运行也越来越慢,这给 ai 应用开发者带来了相当大的挑战。
为此,英特尔最近推出了一个名为bigdl-llm[1]的大模型开源库,可助力 ai 开发者和研究者在英特尔® 平台上加速优化大语言模型,提升大语言模型在英特尔® 平台上的使用体验。
下面就展示了使用 bigdl-llm 加速过的 330 亿参数的大语言模型 vicuna-33b-v1.3[2]在一台搭载英特尔® 至强® 铂金 8468 处理器的服务器上运行的实时效果。
△在一台搭载英特尔® 至强® 铂金 8468 处理器的服务器上运行 330 亿参数大语言模型的实际速度(实时录屏)
bigdl-llm:英特尔® 平台上的开源大语言模型加速库bigdl-llm 是一个专注于优化和加速大型语言模型的开源库,它是 bigdl 的一部分,并遵循 apache 2.0 许可证发布
它提供了各种低精度优化(例如 int4/int5/int8),并可利用多种英特尔® cpu集成的硬件加速技术(avx/vnni/amx 等)和最新的软件优化,来赋能大语言模型在英特尔® 平台上实现更高效的优化和更为快速的运行。
bigdl-llm 的一大重要特性是:对基于 hugging face transformers api 的模型,只需改动一行代码即可对模型进行加速,理论上可以支持运行任何 transformers 模型,这对熟悉 transformers api 的开发者非常友好。
除了 transformers api,很多人也会使用 langchain 来开发大语言模型应用。
为此,bigdl-llm 也提供便于使用的 langchain 的集成[3],从而让开发者能够轻松使用 bigdl-llm 来开发新应用或迁移现有的、基于 transformers api 或 langchain api 的应用。
此外,对于一般的 pytorch 大语言模型(没有使用 transformer 或 langchain api 的模型),也可使用 bigdl-llm optimize_model api 一键加速来提升性能。详情请参阅 github readme[4]以及官方文档[5]。
bigdl-llm 还提供了大量常用开源 llm的加速样例(e.g. 使用 transformers api 的样例[6]和使用 langchain api 的样例[7],以及教程(包括配套 jupyter notebooks)[8] ,方便开发者快速上手尝试。
安装和使用:简便的安装过程和易用的 api 接口安装 bigdl-llm 非常方便,只需执行以下命令即可:
pip install --pre --upgrade bigdl-llm[all]
△若代码显示不全,请左右滑动
使用 bigdl-llm对大模型进行加速也是非常容易的(这里仅用 transformers 风格 api 进行举例)。
使用 bigdl-llm transformer 风格 api 对模型加速,只需要改动模型加载部分,后续使用过程与原生 transformers 完全一致。
而用 bigdl-llm api 加载模型的方式与 transformers api 也几乎一致——用户只需要更改 import,在 from_pretrained 参数中设置 load_in_4bit=true 即可。
bigdl-llm将在模型加载过程中进行4位低精度量化,并在后续的推理过程中利用各种软硬件加速技术进行优化
#load hugging face transformers model with int4 optimizationsfrom bigdl.llm. transformers import automodelforcausallmmodel = automodelforcausallm.from_pretrained('/path/to/model/', load_in_4bit=true)
△若代码显示不全,请左右滑动
示例:快速实现一个基于大语言模型的语音助手应用下文将以 llm 常见应用场景“语音助手”为例,展示采用 bigdl-llm 快速实现 llm 应用的案例。通常情况下,语音助手应用的工作流程分为以下两个部分:
△图 1. 语音助手工作流程示意语音识别——使用语音识别模型(本示例采用了 whisper 模型[9] )将用户的语音转换为文本;文本生成——将 1 中输出的文本作为提示语 (prompt),使用一个大语言模型(本示例采用了 llama2[10] )生成回复。以下是本文使用 bigdl-llm 和 langchain[11] 来搭建语音助手应用的过程:
在语音识别阶段:第一步,加载预处理器 processor 和语音识别模型 recog_model。本示例中使用的识别模型 whisper 是一个 transformers 模型。
只需使用 bigdl-llm 中的 automodelforspeechseq2seq 并设置参数 load_in_4bit=true,就能够以 int4 精度加载并加速这一模型,从而显著缩短模型推理用时。
#processor = whisperprocessor .from_pretrained(recog_model_path)recog_model = automodelforspeechseq2seq .from_pretrained(recog_model_path, load_in_4bit=true)
△若代码显示不全,请左右滑动
第二步,进行语音识别。首先使用处理器从输入语音中提取输入特征,然后使用识别模型预测 token,并再次使用处理器将 token 解码为自然语言文本。
input_features = processor(frame_data,sampling_rate=audio.sample_rate,return_tensor=“pt”).input_featurespredicted_ids = recogn_model.generate(input_features, forced_decoder_ids=forced_decoder_ids)text = processor.batch_decode(predicted_ids, skip_special_tokens=true)[0]
△若代码显示不全,请左右滑动
在文本生成阶段,首先使用 bigdl-llm 的 transformersllm api 创建一个 langchain 语言模型(transformersllm 是在 bigdl-llm 中定义的语言链 llm 集成)。
可以使用这个 api 来加载 hugging face transformers 的任何模型
llm = transformersllm . from_model_id(model_id=llm_model_path,model_kwargs={temperature: 0, max_length: args.max_length, trust_remote_code: true},)
△若代码显示不全,请左右滑动
然后,创建一个正常的对话链 llmchain,并将已经创建的 llm 设置为输入参数。
# the following code is complete the same as the use-casevoiceassistant_chain = llmchain(llm=llm, prompt=prompt,verbose=true,memory=conversationbufferwindowmemory(k=2),)
△若代码显示不全,请左右滑动
以下代码将使用一个链条来记录所有对话历史,并将其适当地格式化为大型语言模型的输入。这样,我们可以生成合适的回复。只需将识别模型生成的文本作为 human_input 输入即可。代码如下:
response_text = voiceassistant_chain .predict(human_input=text, stop=”\n\n”)
△若代码显示不全,请左右滑动
最后,将语音识别和文本生成步骤放入循环中,即可在多轮对话中与该“语音助手”交谈。您可访问底部 [12] 链接,查看完整的示例代码,并使用自己的电脑进行尝试。快用 bigdl-llm 来快速搭建自己的语音助手吧!
作者简介黄晟盛是英特尔公司的资深架构师,黄凯是英特尔公司的ai框架工程师,戴金权是英特尔院士、大数据技术全球cto和bigdl项目的创始人,他们都从事着与大数据和ai相关的工作
以上就是用bigdl-llm 即刻加速百亿级参数llm推理的详细内容。
