作者:
杨亦诚 英特尔 AI 软件工程师
近期智谱发布了其最新的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就是一个非常适合运行在AIPC上的端侧模型系列。本文将分享如何利用OpenVINO 在本地部署最新glm-edge-chat与glm-edge-v模型。
环境安装与配置
以下为示例环境的快速部署方式,详细过程可以参考示例仓库中的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
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 OVModelForCausalLM from 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 处理器(第二代)上的运行效果:
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 封装后的API函数,开发者可以非常便捷地对预训练模型进行转化压缩,并实现本地化的推理任务部署。同时基于GLM-Edge 在小语言模型场景下强大的文本与图像理解能力,我们仅在轻薄本上便可以构建起一个完整的语言模型应用,在保护用户数据隐私的同时,降低硬件门槛。
全部0条评论
快来发表一下你的评论吧 !