最新端侧小钢炮!利用 OpenVINO™ 部署 GLM-Edge 全家桶

原创
2024/11/30 09:00
阅读数 36

点击蓝字

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

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

排版 | 吴紫琴


OpenVINO™


今天智谱发布其最新的 GLM-Edge 系列 SLM 模型, GLM-Edge 系列是智谱在面向端侧真实落地使用的场景下的一次尝试,由两种尺寸的大语言对话模型和多模态理解模型组成( GLM-Edge-1.5B-Chat,GLM-Edge-4B-Chat,GLM-Edge-V-2B,GLM-Edge-V-5B)。其中,1.5B / 2B 模型主要面向手机、车机等平台, 4B / 5B 模型主要面向 PC 等平台。


英特尔 AI PC 可以帮助用户利用人工智能技术提高工作效率、创意、游戏、娱乐和安全等性能。它搭载 CPU、GPU 和 NPU,可在本地更高效地处理 AI 任务。其中我们可以依靠 CPU 来运行较小的工作负载并实现低延迟,而 GPU 则非常适合需要并行吞吐量的大型工作负载,例如大预言模型推理任务,NPU 能够以低功耗处理持续运行 AI 工作负载,提高效率。开发者可以利用英特尔 OpenVINO™ 工具套件充分激活这些 AI 处理单元,更高效地部署深度学习模型,其中 GLM-Edge 就是一个非常适合运行在 AI PC 上的端侧模型系列。本文将分享如何利用 OpenVINO™ 在本地部署最新 glm-edge-chat 与 glm-edge-v 模型。


  • 示例地址

    https://github.com/openvino-dev-samples/glm-edge.openvino

  • 官方仓库示例

    https://github.com/THUDM/GLM-Edge/tree/main?tab=readme-ov-file#transformers--openvino--vllm-demo

  • AI PC Benchmark数据

    https://github.com/THUDM/GLM-Edge/tree/main?tab=readme-ov-file#intel



OpenVINO™


环境安装与配置


以下为示例环境的快速部署方式,详细过程可以参考示例仓库中的 README 文档。

1. 下载示例仓库

git clone https://github.com/openvino-dev-samples/glm-edge.openvino.git

2. 安装环境依赖

cd glm-edge.openvino

python3 -m venv openvino_env

source openvino_env/bin/activate


pip install -r requirements.txt



OpenVINO™


glm-edge-chat 转化与部署


1. 模型转换与量化

由于 glm-edge-chat 的预训练模型是基于 PyTorch 框架的,因此我们可以利用 Optimum-intel 快速将 safetensor 格式的预训练模型转化为 OpenVINO™ 的 IR 格式,并通过 NNCF 工具对模型进行权重量化压缩,以此提升推理性能,降低资源占用。

python3 glm-edge-chat/convert.py --model_id ZhipuAI/glm-edge-1.5b-chat --precision int4 --output {your_path}/glm-edge-1.5b-chat-ov --modelscope


其中:

  • `--model_id` - 用于设定 Huggngface/ModelScope的 模型id,或者也可以是原始模型的本地路径。

  • `--output` - 转换后模型保存的地址。

  • `--modelscope` - 是否通过魔搭社区下载模型。


2. Optimum-intel 部署

为了方便 Transformers 库用户体验 OpenVINO™,开发者可以利用 Optimum-intel 所提供的类 Transformers API 进行模型任务的部署。在不改变原本代码逻辑的前提下,只需要将 AutoModelForCausalLM 对象切换为 OVModelForCausalLM,便可以轻松实现对于推理后端的迁移,利用 OpenVINO™ 来加速 glm-edge-chat 原有的 pipeline。

from optimum.intel.openvino import OVModelForCausalLMfrom transformers import AutoConfig, AutoTokenizer
ov_model = OVModelForCausalLM.from_pretrained( llm_model_path, device='GPU', config=AutoConfig.from_pretrained(llm_model_path, trust_remote_code=True), trust_remote_code=True,)tokenzier = AutoTokenizer.from_pretrained(llm_model_path, trust_remote_code=True)input_tokens = tokenzier(prompt, return_tensors="pt", **tokenizer_kwargs)answer = ov_model.generate(**input_tokens, max_new_tokens=1024)tokenzier.batch_decode(answer, skip_special_tokens=True)[0]


在这个示例中,开发者可以通过运行 chat.py 脚本来构建一个简单的聊天机器人,并支持流式输出。使用方法如下:

python3 glm-edge-chat/chat.py --model_path {your_path}/glm-edge-1.5b-chat-ov --max_sequence_length 4096 --device GPU


其中:

  • `--model_path` - OpenVINO™ IR 模型所在目录的路径。

  • `--max_sequence_length` - 输出标记的最大大小。

  • `--device` - 运行推理的设备。例如:"CPU","GPU"。


3. 效果展示

以下视频将展示该示例在英特尔® 酷睿™ Ultra 处理器(第二代)上的运行效果:



OpenVINO™


glm-edge-v 转化与部署


1. 模型转换与量化

目前 glm-edge-v 的推理任务还没有被完全集成进 Optimum 工具中,因此我们需要手动搭建模型的转换和量化任务,其中包含语言模型 language_model,图像编码模型 vision_model,和文本编码模型 embedding_model。


为了简化转化步骤,我们提前对这些转化任务行进行了封装,开发者只需要调用示例中提供的函数便可完成这些模型的转换,并对其中负载最大的语言模型进行量化。

python3 glm-edge-v/convert.py --model_id ZhipuAI/glm-edge-v-2b --output {your_path}/glm-edge-v-5b-ov –modelscope


其中:

  • `--model_id` - 用于设定 Huggngface/ModelScope的 模型id,或者也可以是原始模型的本地路径。

  • `--output` - 转换后模型保存的地址。

  • `--modelscope` - 是否通过魔搭社区下载模型。


2. 图片内容理解

此外在该示例中,我们也对模型的推理任务进行封装,通过导入 OvGLMv 对象变可以可快速部署图像理解任务。通过以下示例脚本可以快速对模型效果进行验证。

python3 qa.py --model_path {your_path}/glm-edge-v-2b-ov --query "Please describe this picture" --image_path {your_path}/your_test_image.jpg --max_sequence_length 4096 --device CPU


其中:

  • `--model_path` - OpenVINO™ IR 模型所在目录的路径。

  • `--query` - 用户输入的问题文本。

  • `--image` - 待识别的图片文件路径。

  • `--max_sequence_length` - 输出标记的最大大小。

  • `--device` - 运行推理的设备。

    例如:"CPU","GPU"。


3. 效果展示

以下为经过 OpenVINO™ 量化后的 glm-edge-v-2b 模型输出结果。

  • 图片输入:



  • 输入:

“请描述这张图片”

  •  模型输出:

“这是一张照片,显示了一辆停在一栋红色砖墙前白色栏杆的建筑物旁边的白色皮卡车,有四个黑色的轮胎和一个带顶篷的驾驶室。在图片中间可以看到停着的一辆白色皮卡车。这辆车停在路边,其尾部有一个梯形托盘,看起来结构坚固,适合装载或卸载重物。它的车顶是白色的,带有黑色的轮胎和黑色的框架。车身颜色为白色,带有黑色的边框窗户和把手。驾驶室有透明的玻璃,可以看到内部的司机座椅。车尾部有一个梯形形状的拖车。汽车旁边是灰色的地砖。”


OpenVINO™


总结


通过 OpenVINO™ 封装后的 API 函数,开发者可以非常便捷地对预训练模型进行转化压缩,并实现本地化的推理任务部署。同时基于 GLM-Edge 在小语言模型场景下强大的文本与图像理解能力,我们仅在轻薄本上便可以构建起一个完整的语言模型应用,在保护用户数据隐私的同时,降低硬件门槛。


参考资料

  • Optimum-intel:

    https://docs.openvino.ai/2024/learn-openvino/llm_inference_guide/llm-inference-hf.html

  • OpenVINO™ Gen API:

    https://docs.openvino.ai/2024/learn-openvino/llm_inference_guide/genai-guide.html


OpenVINO™

---------------------------------------

*OpenVINO and the OpenVINO logo are trademarks of Intel Corporation or its subsidiaries.

-----------------------------

 OpenVINO 中文社区 

微信号 : openvinodev

B站:OpenVINO中文社区

“开放、开源、共创”

致力于通过定期举办线上与线下的沙龙、动手实践及开发者交流大会等活动,促进人工智能开发者之间的交流学习。



 点击 “ 在看 让更多人看见

本文分享自微信公众号 - OpenVINO 中文社区(openvinodev)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部