开发者实战 | 简单三步使用 OpenVINO™ 搞定 ChatGLM3 的本地部署

点击蓝字

关注我们,让开发变得更有趣

作者| 杨亦诚 英特尔 AI 软件工程师

排版| 李擎

简单三步使用 OpenVINO™ 

搞定 ChatGLM3 的本地部署

工具介绍

英特尔 OpenVINO™ 工具套件是一款开源 AI 推理优化部署的工具套件,可帮助开发人员和企业加速生成式人工智能 (AIGC)、大语言模型、计算机视觉和自然语言处理等 AI 工作负载,简化深度学习推理的开发和部署,便于实现从边缘到云的跨英特尔® 平台的异构执行。

ChatGLM3 是智谱 AI 和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了以下新特性:

  • 更强大的基础模型:ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在 10B 以下的预训练模型中领先的性能。

  • 更完整的功能支持:ChatGLM3-6B 采用了全新设计的 Prompt 格式,除正常的多轮对话外,同时原生支持工具调用 (Function Call)、代码执行 (Code Interpreter) 和 Agent 任务等复杂场景。

  • 更全面的开源序列:除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM-6B-Base、长文本对话模型 ChatGLM3-6B-32K。以上所有权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。

fbfce34e40c1ab0cbace8f494fcdf0ee.png

图:基于 Optimum-intel 与 OpenVINO™ 部署生成式 AI 模型流程

英特尔为开发者提供了快速部署 ChatGLM3-6B 的方案支持。开发者只需要在 GitHub 上克隆示例仓库,

https://github.com/OpenVINO-dev-contest/chatglm3.openvino

进行环境配置,并将 Hugging Face 模型转换为 OpenVINO™ IR 模型,即可进行模型推理。由于大部分步骤都可以自动完成,因此开发者只需要简单的工作便能完成部署,目前该仓库也被收录在 GhatGLM3 的官方仓库

https://github.com/THUDM/ChatGLM3?tab=readme-ov-file#openvino-demo

和魔搭社区Model Card中,

https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/summary#:~:text=%E5%8D%B3%E4%BD%BF%E6%82%A8%E6%B2%A1%E6%9C%89%E6%BB%A1%E8%B6%B3%E8%A6%81%E6%B1%82%E7%9A%84%20CUDA%20%E8%AE%BE%E5%A4%87%EF%BC%8C%E5%AF%B9%E4%BA%8E%20Intel%20CPU%20%E5%92%8C%20GPU%20%E8%AE%BE%E5%A4%87%EF%BC%8C%E4%B9%9F%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20OpenVINO%E5%8A%A0%E9%80%9F%E6%A1%86%E6%9E%B6%20%E4%BD%BF%E7%94%A8%20Intel%20GPU%20%E6%88%96%20CPU%20%E6%88%96%20%E9%9B%86%E6%88%90%E6%98%BE%E5%8D%A1%20%E5%8A%A0%E9%80%9F%E9%83%A8%E7%BD%B2ChatGLM3%2D6B%E6%A8%A1%E5%9E%8B%EF%BC%8C%20%E6%88%91%E4%BB%AC%E4%B9%9F%E5%9C%A8Github%20Repo%20%E5%87%86%E5%A4%87%E4%BA%86demo%E3%80%82

接下来让我们一起看下具体的步骤和方法:

OpenVINO™

1. 模型转换

当你按仓库中的 README 文档完成集成环境配置后,可以直接通过以下命令运行模型转换脚本:

python3 convert.py --model_id THUDM/chatglm3-6b –output {your_path}/chatglm3-6b-ov

该脚本首先会利用 Transformers 库从 Hugging Face 的 model hub 中下载并加载原始模型的 PyTorch 对象,如果开发者在这个过程中无法访问 Hugging Face 的 model hub,也可以通过配置环境变量的方式,将模型下载地址更换为镜像网站,并将 convert.py 脚本的 model_id 参数配置为本地路径,具体方法如下:

$env:HF_ENDPOINT = https://hf-mirror.com
huggingface-cli download --resume-download --local-dir-use-symlinks False THUDM/chatglm3-6b --local-dir {your_path}/chatglm3-6b
python3 convert.py --model_id  {your_path}/chatglm3-6b --output {your_path}/chatglm3-6b-ov

当获取 PyTorch 的模型对象后,该脚本会利用 OpenVINO™ 的 PyTorch frontend 进行模型格式的转换,执行完毕后,你将获取一个由 .xml 和 .bin 文件所构成的 OpenVINO™ IR 模型文件,该模型默认以 FP16 精度保存。

OpenVINO™

2. 权重量化

该步骤为可选项,开发者可以通过以下脚本,将生成的 OpenVINO™ 模型通过权重量化策略,进一步地压缩为 4-bits 或者是 8-bits 的精度,以获取更低的推理延时及系统资源占用。

python3 quantize.py --model_path {your_path}/chatglm3-6b-ov --precision int4 --output {your_path}/chatglm3-6b-ov-int4

执行完毕后,你将获得经过压缩后的 IR 模型文件,以 INT4 对称量化为例,该压缩后的模型文件的整体容量大约为 4GB 左右。

9ec6d49d825b9a2f44351affdc5e2c5b.png

图:量化后的OpenVINO模型文件

同时在量化结束后,亦会在终端上打印模型的量化比例,如下图所示。

90971052cf1ee3491599d44f4eafd2d7.png

图:量化比例输出

由于 OpenVINO™  NNCF 工具的权重压缩策略只针对于大语言模型中的 Embedding 和 Linear 这两种算子,所以该表格只会统计这两类算子的量化比例。其中 ratio-defining parameter 是指我们提前通过接口预设的混合精度比例,也就是 21% 权重以 INT8 表示,79% 以 INT4 表示,这也是考虑到量化对 ChatGLM3 模型准确度的影响,事先评估得到的配置参数,开发者亦可以通过这个示例

https://github.com/openvinotoolkit/nncf/tree/develop/examples/llm_compression/openvino/tiny_llama_find_hyperparams

搜索出适合其他模型的量化参数。此外鉴于第一层 Embedding layer 和模型最后一层操作对于输出准确度的影响,NNCF 默认会将他们以 INT8 表示,这也是为何 all parameters 中显示的混合精度比例会有所不同。当然开发者也可以通过 nncf.compress_weights 接口中设置 all_layers=True,开关闭该默认策略。

OpenVINO™

3.模型部署

最后一步就是模型部署了,这里展示的是一个 Chatbot 聊天机器人的示例,这也是 LLM 应用中最普遍,也是最基础的 pipeline,而 OpenVINO™  可以通过 Optimum-intel 工具为桥梁,复用 Transformers 库中预置的 pipeline,因此在这个脚本中我们会对 ChatGLM3 模型再做一次封装,以继承并改写 OVModelForCausalLM 类中的方法,实现对于 Optimum-intel 工具的集成和适配。以下为该脚本的运行方式:

python3 chat.py --model_path {your_path}/chatglm3-6b-ov-int4 --max_sequence_length 4096 --device CPU

如果开发者的设备中包含 Intel 的 GPU 产品,例如 Intel ARC 系列集成显卡或是独立显卡,可以在这个命令中将 device 参数改为 GPU,以激活更强大的模型推理能力。

在终端里运行该脚本后,会生成一个简易聊天对话界面,接下来你就可以验证它的效果和性能了。

用户: 你好

ChatGLM3-6B-OpenVINO: 你好!有什么我可以帮助你的吗? 

用户: 你是谁?     

ChatGLM3-6B-OpenVINO: 我是一个名为 ChatGLM3-6B 的人工智能助手,是由清华大学 KEG 实验室和智谱 AI 公司于2023 年共同训练的语言模型开发而成。我的任务是针对用户的问题和要求提供适当的答复和支持。 

用户: 请给我讲一个有趣的故事

ChatGLM3-6B-OpenVINO: 从前,有一个名叫小明的小男孩,他是一个非常喜欢动物的人。有一天,他在森林里散步时,发现了一个非常漂亮的小鸟。小鸟受伤了,无法飞行。小明非常心疼,于是决定照顾这只小鸟。小明带着小鸟回家,为它搭建了一个小小的巢穴,并找来了一些软草和食物。每天,他都会给小鸟喂食,并为它换水。渐渐地,小鸟的伤势好了起来,开始在小明的家里飞来飞去,它们成了非常好的朋友。然而,一天,小明的父母告诉他,他们必须把小明养的小鸟送到森林里去。小明非常伤心,因为他已经和小鸟成为了好朋友。但是,他的父母告诉他,小鸟在森林里会更加自由自在,而且他也可以继续观看小鸟在森林中的生活。于是,小明和他的父母一起将小鸟送到了森林中。小鸟非常高兴,因为它又可以飞行了,并且还有许多其他的小动物朋友。小明也感到非常开心,因为他知道,即使不能一直拥有小鸟,他仍然可以欣赏到它们在自然中的美丽。从此以后,小明常常来到森林中,寻找小鸟。 

用户: 请给这个故事起一个标题

ChatGLM3-6B-OpenVINO: 《友谊的力量:小明与小鸟的森林冒险》

OpenVINO™

总结

通过模型转换、量化、部署这三个步骤,我们可以轻松实现在本地 PC 上部署 ChatGLM3-6b 大语言模型,经测试该模型可以流畅运行在最新的 Intel Core Ultra 异构平台及至强 CPU 平台上,作为众多 AI agent 和 RAG 等创新应用的核心基石,大语言模型的本地部署能力将充分帮助开发者们打造更安全,更高效的 AI 解决方案。

项目地址:

https://github.com/OpenVINO-dev-contest/chatglm3.openvino

OpenVINO™

--END--

你也许想了解(点击蓝字查看)⬇️➡️ 隆重介绍 OpenVINO™ 2024.0: 为开发者提供更强性能和扩展支持➡️ 隆重推出 OpenVINO 2023.3 ™ 最新长期支持版本➡️ OpenVINO™ 2023.2 发布:让生成式 AI 在实际场景中更易用➡️ 开发者实战 | 基于 OpenVINO™ 和 LangChain 构建 RAG 问答系统➡️ 开发者实战 | 如何利用低比特量化技术进一步提升大模型推理性能➡️ 开发者实战 | 介绍OpenVINO™ 2023.1:在边缘端赋能生成式AI➡️ 基于 ChatGLM2 和 OpenVINO™ 打造中文聊天助手➡️ 基于 Llama2 和 OpenVINO™ 打造聊天机器人➡️ OpenVINO™ DevCon 2023重磅回归!英特尔以创新产品激发开发者无限潜能➡️ 5周年更新 | OpenVINO™  2023.0,让AI部署和加速更容易➡️ OpenVINO™5周年重头戏!2023.0版本持续升级AI部署和加速性能➡️ OpenVINO™2023.0实战 | 在 LabVIEW 中部署 YOLOv8 目标检测模型➡️ 开发者实战系列资源包来啦!➡️ 以AI作画,祝她节日快乐;简单三步,OpenVINO™ 助你轻松体验AIGC
扫描下方二维码立即体验 
OpenVINO™ 工具套件 2024.0

点击 阅读原文 立即体验OpenVINO™ 2024.0

文章这么精彩,你有没有“在看”?

  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLOv5是一种流行的目标检测算法,而OpenVINO 2022是一款用于深度学习模型部署和加速推理的工具包。结合使用YOLOv5和OpenVINO 2022可以实现高效的目标检测应用部署使用OpenVINO 2022部署YOLOv5的推理有以下步骤: 1. 安装OpenVINO 2022:首先需要下载和安装OpenVINO 2022工具包。安装完成后,配置OpenVINO的环境变量等设置。 2. 模型转换:YOLOv5的原始模型是使用PyTorch训练的,为了能够在OpenVINO中进行推理,需要将模型转换为OpenVINO支持的IR(Intermediate Representation)格式。可以使用OpenVINO提供的Model Optimizer工具来完成模型转换,具体命令如下: ```bash mo.py --input_model <path_to_yolov5_model> --model_name yolov5 -o <output_dir> --data_type FP16 ``` 这里的`<path_to_yolov5_model>`是原始YOLOv5模型的路径,`<output_dir>`是转换后的IR模型的输出目录,`--data_type`指定了推理过程中使用的数据精度,可以根据需求选择FP16或FP32。 3. 推理应用开发:根据使用场景和需求,使用OpenVINO提供的API开发推理应用程序。可以使用C++、Python等主流编程语言进行开发,OpenVINO提供了相应的API接口供开发者使用。开发过程中需要加载转换后的模型文件,并进行图像的预处理、推理计算等操作。 4. 编译和优化:使用OpenVINO提供的Model Optimizer工具,可以对推理应用进行编译和优化,以提高推理性能。具体命令如下: ```bash mo.py --input_model <model_xml> --model_name yolov5 --output_dir <output_dir> --data_type FP16 --batch 1 ``` 这里的`<model_xml>`是前面转换得到的IR模型的路径,`<output_dir>`是优化后的模型文件的输出目录,`--batch`指定了模型的批处理大小,可以根据需求进行调整。 5. 部署和推理:在部署和推理阶段,可以将优化后的模型和开发的应用程序部署到目标设备上,并进行推理计算。OpenVINO提供了适用于多种硬件平台的推理引擎,可以选择合适的推理引擎来进行部署。 综上所述,使用OpenVINO 2022部署YOLOv5的推理需要进行模型转换、推理应用开发、编译和优化等步骤。通过结合YOLOv5和OpenVINO 2022,可以实现高效的目标检测应用部署和推理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值