如何将Llama3.1模型部署在英特尔酷睿Ultra处理器

描述

作者:虞晓琼 博士

东莞职业技术学院

本文从搭建环境开始,一步一步帮助读者实现只用五行代码便可将Llama3.1模型部署在英特尔 酷睿 Ultra 处理器上。请把文中范例代码下载到本地:

 

 git clone https://gitee.com/Pauntech/llama3.1-model.git

 

1.1Meta Llama3.1简介

7月24日,Meta宣布推出迄今为止最强大的开源模型——Llama 3.1 405B,同时发布了全新升级的Llama 3.1 70B和8B模型。

Llama 3.1 405B支持上下文长度为128K Tokens,在基于15万亿个Tokens、超1.6万个H100 GPU上进行训练,研究人员基于超150个基准测试集的评测结果显示,Llama 3.1 405B可与GPT-4o、Claude 3.5 Sonnet和Gemini Ultra等业界头部模型媲美。

处理器

引用自:https://ai.meta.com/research/publications/the-llama-3-herd-of-models

魔搭社区已提供Llama3.1模型的预训练权重下载,实测下载速度平均35MB/s。

处理器

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

 

 git clone --depth=1 https://www.modelscope.cn/LLM-Research/Meta-Llama-3.1-8B-Instruct.git

 

1.2英特尔 酷睿 Ultra处理器简介

英特尔 酷睿 Ultra处理器内置CPU+GPU+NPU 的三大 AI 引擎,赋能AI大模型在不联网的终端设备上进行推理计算。

1.3Llama3.1模型的INT4量化和本地部署

把Meta-Llama-3.1-8B-Instruct模型的预训练权重下载到本地后,接下来本文将依次介绍使用optimum-cli工具将Llama3.1模型进行INT4量化,并调用optimum-intel完成Llama3.1模型在英特尔 酷睿 Ultra 处理器上的部署。

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

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

1.3.1搭建开发环境

请下载并安装Anaconda,然后用下面的命令创建并激活名为llama31的虚拟环境,然后安装Optimum Intel和其依赖项openvino与nncf。

 

conda create -n llama31 python=3.11    #创建虚拟环境
conda activate llama31          #激活虚拟环境
python -m pip install --upgrade pip    #升级pip到最新版本
pip install optimum-intel[openvino,nncf]  #安装Optimum Intel和其依赖项openvino与nncf
pip install -U transformers        #升级transformers库到最新版本

 

处理器

1.3.2用optimum-cli

对Llama3.1模型进行INT4量化

optimum-cli是Optimum Intel自带的跨平台命令行工具,可以不用编写量化代码,用命令实现对Llama3.1模型的量化并转化为OpenVINO格式模型:

 

optimum-cli export openvino --model D:Meta-Llama-3.1-8B-Instruct --task text-generation-with-past --weight-format int4 --group-size 128 --ratio 0.8 --sym llama31_int4

 

optimum-cli命令的参数意义如下:

--model指定了被量化的模型路径;

--task指定了任务类型;

--weight-format指定了模型参数精度;

--group-size定义了量化过程中的组大小;

--ratio决定了量化过程中保留的权重比例;

--sym表示量化采用的对称性模式。

处理器

1.3.3编写推理程序llama31_ov_infer.py

基于Optimum Intel工具包的API函数编写Llama3的推理程序,非常简单,只需五行代码:

1. 调用OVModelForCausalLM.from_pretrained()载入使用optimum-cli优化过的模型

2. 调用AutoTokenizer.from_pretrained()载入模型的分词器

3. 创建一个用于文本生成的pipeline(流水线)

4. 使用pipeline进行推理计算

5. 输出生成的文本结果

Llama3.1模型的推理计算程序如下所示:

 

# 导入所需的库和模块
from transformers import AutoConfig, AutoTokenizer, pipeline
from optimum.intel.openvino import OVModelForCausalLM
# 设置OpenVINO编译模型的配置参数,这里优先考虑低延迟
config = {
    "PERFORMANCE_HINT": "LATENCY",              # 性能提示选择延迟优先
    "CACHE_DIR": ""                             # 模型缓存目录为空,使用默认位置
}
# 指定llama3.1 INT4模型的本地路径
model_dir = r"D:llama31_int4"


# 设定推理设备为GPU,可根据实际情况改为"CPU"或"AUTO"
DEVICE = "GPU"
# 输入的问题示例,可以更改
question = "In a tree, there are 7 birds. If 1 bird is shot, how many birds are left?"
# 载入使用optimum-cli优化过的模型,配置包括设备、性能提示及模型配置
ov_model = OVModelForCausalLM.from_pretrained(
    model_dir,
    device=DEVICE,
    ov_config=config,
    config=AutoConfig.from_pretrained(model_dir, trust_remote_code=True), # 加载模型配置,并信任远程代码
    trust_remote_code=True,
)
# 根据模型目录加载tokenizer,并信任远程代码
tok = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
# 创建一个用于文本生成的pipeline,指定模型、分词器以及最多生成的新token数
pipe = pipeline("text-generation", model=ov_model, tokenizer=tok, max_new_tokens=100)
# 使用pipeline对问题进行推理
results = pipe(question)
# 打印生成的文本结果
print(results[0]['generated_text'])

 

运行llama31_ov_infer.py,结果如下所示:

处理器

1.4构建基于Llama3.1模型的聊天机器人

请先安装依赖软件包:

 

pip install gradio mdtex2html streamlit -i https://mirrors.aliyun.com/pypi/simple/

 

然后运行:python llama31_chatbot.py,结果如下所示:

处理器

1.5总结

基于OpenVINO 的Optimum Intel工具包简单易用,仅需一个命令即可实现LLama3.1模型INT4量化,五行代码即可完成推理程序开发并本地化运行在英特尔 酷睿  Ultra 处理器上。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分