当前位置:   article > 正文

Optimum Intel三步完成Llama3在算力魔方的本地量化和部署_optimum-cli export onnx 导出llama3模型

optimum-cli export onnx 导出llama3模型

作者:

英特尔创新大使 刘力

Linux基金会亚太区开源布道者 张晶

1.  Llama3简介

Llama3 Meta最新发布的开源大语言模型(LLM), 当前已开源8B70B参数量的预训练模型权重,并支持指令微调。详情参见:https://ai.meta.com/blog/meta-llama-3/

引用自:https://github.com/meta-llama/llama3

Llama3性能优异,8B70B参数模型的性能在chatbot-arena-leaderboard中皆进入前十;LLama-3-70b-Instruct仅次于闭源的GPT-4系列模型。

排行榜链接:https://chat.lmsys.org/?leaderboard

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

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

  1. git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B.git
  2. git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-70B.git

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

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

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

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

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

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

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

2.1  第一步,搭建开发环境

下载并安装Anaconda,然后用下面的命令创建并激活名为optimum_intel的虚拟环境:

  1. conda create -n optimum_intel python=3.11  #创建虚拟环境
  2. conda activate optimum_intel                #激活虚拟环境
  3. 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

2.2  第二步,用optimum-cli对Llama3模型进行INT4量化

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

执行命令将Llama3-8B模型量化为INT4 OpenVINO格式模型:

optimum-cli export openvino --model D:\llama3\Meta-Llama-3-8B --task text-generation-with-past --weight-format int4 --group-size 128 --ratio 0.8 --sym llama3_int4_ov_model

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

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

  1. 初始化OpenVINO Core对象:ov.Core()
  2. 编译并载入Llama3模型到指定DEVICE:OVModelForCausalLM.from_pretrained()
  3. 实例化Llama3模型的Tokenizer:tok=AutoTokenizer.from_pretrained()
  4. 将自然语言转换为Token序列:tok(question, return_tensors="pt", **{})
  5. 生成答案的Token序列:ov_model.generate()
  6. 将答案Token序列解码为自然语言:tok.batch_decode()

完整范例程序如下所示,下载链接:

  1. import openvino as ov
  2. from transformers import AutoConfig, AutoTokenizer
  3. from optimum.intel.openvino import OVModelForCausalLM
  4. # 初始化OpenVINO Core对象
  5. core = ov.Core()
  6. ov_config = {"PERFORMANCE_HINT": "LATENCY", "NUM_STREAMS": "1", "CACHE_DIR": ""}
  7. model_dir = "d:\\llama3_int4_ov_model"  #llama3 int4模型路径
  8. DEVICE = "CPU" #可更换为"GPU", "AUTO"...
  9. # 编译并载入Llama3模型到DEVICE
  10. ov_model = OVModelForCausalLM.from_pretrained(
  11.     model_dir,
  12.     device=DEVICE,
  13.     ov_config=ov_config,
  14.     config=AutoConfig.from_pretrained(model_dir, trust_remote_code=True),
  15.     trust_remote_code=True,
  16. )
  17. # 载入Llama3模型的Tokenizer
  18. tok = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
  19. # 设置问题
  20. question = "What's the OpenVINO?"
  21. # 将自然语言转换为Token序列
  22. input_tokens = tok(question, return_tensors="pt", **{})
  23. # 生成答案的Token序列
  24. answer = ov_model.generate(**input_tokens, max_new_tokens=128)
  25. # 将答案Token序列解码为自然语言并显示
  26. print(tok.batch_decode(answer, skip_special_tokens=True)[0])
  27. 运行llama3_int4_ov_infer.py:
  28. python llama3_int4_ov_infer.py

运行结果,如下所示:

3.  构建图形化的Llama3 demo

请先安装依赖软件包:

  1. pip install gradio mdtex2html streamlit -i Simple Index

下载范例程序:

然后运行:

python llama3_webui.py

运行结果如下:

算力魔方运行llama3的图片

OpenVINO_Llama3

4.  总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/665612
推荐阅读
相关标签
  

闽ICP备14008679号