作者: 英特尔创新大使 刘力 

由于Meta Llama315T Tokens训练数据中,仅有5%750B Tokens)是其他语言,中文数据<5%,所以对中文支持不太友好。例如,用中文提问,Llama3会用英文回答。应读者要求,本文将介绍中文版Llama3算力魔方上的优化和部署。

中文版Llama3简介

Llama3 发布后,开源社区就出现了很多中文版Llama3。本文选择了中国联通AI创新中心发布的全参数微调(lora)版本。微调数据集经过了严格的人工筛查,覆盖多个领域和行业。

Github repo:: https://github.com/UnicomAI/Unichat-llama3-Chinese。

请读者用下面的命令把Llama3-Chinese-8B-Instruct模型的预训练权重下载到本地待用。

git clone https://www.modelscope.cn/UnicomAI/Unichat-llama3-Chinese.git

算力魔方简介

算力魔方是一款可以DIY的迷你主机,采用了抽屉式设计,后续组装、升级、维护只需要拔插模块。通过选择不同算力的计算模块,再搭配不同的 IO 模块可以组成丰富的配置,适应不同场景。

性能不够时,可以升级计算模块提升算力;IO 接口不匹配时,可以更换 IO 模块调整功能,而无需重构整个系统。

本文以下所有步骤将在带有英特尔i7-1265U处理器的算力魔方上完成验证。

    1. 三步完成Llama3的INT4量化和本地部署

把Llama3-Chinese-8B-Instruct模型的预训练权重下载到本地后,接下来本文将依次介绍基于Optimum Intel工具将Llama进行INT4量化,并完成本地部署。

Optimum Intel作为Transformers和Diffusers库与Intel提供的各种优化工具之间的接口层,它给开发者提供了一种简便的使用方式,让这两个库能够利用Intel针对硬件优化的技术,例如:OpenVINO™、IPEX等,加速基于Transformer或Diffusion构架的AI大模型在英特尔硬件上的推理计算性能。

Optimum Intel代码仓连接:https://github.com/huggingface/optimum-intel。

第一步,搭建开发环境

下载并安装Anaconda,然后创建并激活名为llama3_chinesne的虚拟环境:

conda create -n llama3_chinese python=3.11  #创建虚拟环境

conda activate llama3_chinese                #激活虚拟环境

python -m pip install --upgrade pip           #升级pip到最新版本

由于Optimum Intel代码迭代速度很快,请用从源代码安装的方式,安装Optimum Intel和其依赖项OpenVINO™与NNCF。

python -m pip install "optimum-intel[openvino,nncf]"@git+https://github.com/huggingface/optimum-intel.git

第二步,用optimum-cli对Unichat-llama3-Chinese模型进行INT4量化

optimum-cli是Optimum Intel自带的跨平台命令行工具,可以不用编写量化代码,实现对Unichat-llama3-Chinese模型的量化。

执行命令将Unichat-llama3-Chinese模型量化为INT4 OpenVINO格式模型:

optimum-cli export openvino --model D:\Unichat-llama3-Chinese --task text-generation-with-past --weight-format int4 --group-size 128 --ratio 0.8 --sym llama3_cn_int4_ov

第三步:编写推理程序llama3_cn_int4_ov_infer.py

基于Optimum Intel工具包的API函数编写Llama3的推理程序,非常简单,只需要调用五个API函数:

  1. 编译并载入Unichat-llama3-Chinese:OVModelForCausalLM.from_pretrained()
  2. 实例化Unichat-llama3-Chinese模型的Tokenizer:tok=AutoTokenizer.from_pretrained()
  3. 将自然语言转换为Token序列:tok(question, return_tensors="pt", **{})
  4. 生成答案的Token序列:ov_model.generate()
  5. 将答案Token序列解码为自然语言:tok.batch_decode()

完整范例程序如下所示:

import openvino as ov

from transformers import AutoConfig, AutoTokenizer

from optimum.intel.openvino import OVModelForCausalLM

ov_config = {"PERFORMANCE_HINT": "LATENCY", "NUM_STREAMS": "1", "CACHE_DIR": ""}

model_dir = "d:\\llama3_cn_int4_ov"  #Unichat-llama3-Chinese int4模型路径

DEVICE = "CPU" #可更换为"GPU", "AUTO"...

# 编译并载入Unichat-llama3-Chinese int4模型到DEVICE

ov_model = OVModelForCausalLM.from_pretrained(

    model_dir,

    device=DEVICE,

    ov_config=ov_config,

    config=AutoConfig.from_pretrained(model_dir, trust_remote_code=True),

    trust_remote_code=True,

)

# 载入Unichat-llama3-Chinese int4模型的Tokenizer

tok = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)

# 设置问题

question = "树上7只鸟,打死1只鸟,还剩几只鸟?"

# 将自然语言转换为Token序列

input_tokens = tok(question, return_tensors="pt", **{})

# 生成答案的Token序列

answer = ov_model.generate(**input_tokens, max_new_tokens=128)

# 将答案Token序列解码为自然语言并显示

print(tok.batch_decode(answer, skip_special_tokens=True)[0])

下载范例程序:git clone https://gitee.com/Pauntech/unichat-llama3-chinese.git

运行llama3_cn_int4_ov_infer.py:

python llama3_cn_int4_ov_infer.py

运行结果,如下所示:

构建图形化的Unichat-llama3-Chinese demo

请先安装依赖软件包:

​
pip install gradio mdtex2html streamlit -i Simple Index

​

下载范例程序:git clone https://gitee.com/Pauntech/unichat-llama3-chinese.git

然后运行:

python llama3_cn_webui.py

运行结果如下:

总结

Optimum Intel工具包简单易用,仅需三步即可完成开发环境搭建、Unichat-llama3-Chinese模型INT4量化和推理程序开发。基于Optimum Intel工具包开发Llama3推理程序仅需调用五个API函数,方便快捷的实现将Llama3本地化部署在基于英特尔处理器的算力魔方上。

刘力,英特尔创新大使, 深圳市铂盛科技有限公司的创始人。带领团队成功设计了多种计算机系统,并申请了多项专利和软件著作,铂盛科技为国家高新技术企业,深圳市专精特新企业。铂盛通过整合算力和算法,打造软硬件一体化的AIPC解决方案,目前产品已在工业控制、智能机器人、教育、医疗、金融等多个边缘计算领域得到广泛应用。

联系方式

电话:13537819699

Email:leo.liu@pasuntech.com

Logo

为开发者提供丰富的英特尔开发套件资源、创新技术、解决方案与行业活动。欢迎关注!

更多推荐