开源模型应用落地-glm模型小试-glm-4-9b-chat-批量推理(二)
一、前言
GLM-4是智谱AI团队于2024年1月16日发布的基座大模型,旨在自动理解和规划用户的复杂指令,并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等,支持128K的上下文窗口,使其在长文本处理和精度召回方面表现优异,且在中文对齐能力上超过GPT-4。与之前的GLM系列产品相比,GLM-4在各项性能上提高了60%,并且在指令跟随和多模态功能上有显著强化,适合于多种应用场景。尽管在某些领域仍逊于国际一流模型,GLM-4的中文处理能力使其在国内大模型中占据领先地位。该模型的研发历程自2020年始,经过多次迭代和改进,最终构建出这一高性能的AI系统。
在前一篇开源模型应用落地-glm模型小试-glm-4-9b-chat-快速体验(一)已经掌握了glm-4-9b-chat的基本入门,本篇将介绍如何进行批量推理。
二、术语
2.1.GLM-4-9B
是智谱 AI 推出的一个开源预训练模型,属于 GLM-4 系列。它于 2024 年 6 月 6 日发布,专为满足高效能语言理解和生成任务而设计,并支持最高 1M(约两百万字)的上下文输入。该模型拥有更强的基础能力,支持26种语言,并且在多模态能力上首次实现了显著进展。
GLM-4-9B的基础能力包括:
- 中英文综合性能提升 40%,在特别的中文对齐能力、指令遵从和工程代码等任务中显著增强
- 较 Llama 3 8B 的性能提升,尤其在数学问题解决和代码编写等复杂任务中表现优越
- 增强的函数调用能力,提升了 40% 的性能
- 支持多轮对话,还支持网页浏览、代码执行、自定义工具调用等高级功能,能够快速处理大量信息并给出高质量的回答
2.2.GLM-4-9B-Chat
是智谱 AI 在 GLM-4-9B 系列中推出的对话版本模型。它设计用于处理多轮对话,并具有一些高级功能,使其在自然语言处理任务中更加高效和灵活。
2.3.推量推理
是指在一次模型推理过程中同时处理多个输入样本,而不是逐个处理。通过这种方式,可以充分利用计算资源,提高处理效率,降低延迟。
三、前置条件
3.1.基础环境及前置条件
1. 操作系统:centos7
2. NVIDIA Tesla V100 32GB CUDA Version: 12.2
3.最低硬件要求
3.2.下载模型
huggingface:
https://huggingface.co/THUDM/glm-4-9b-chat/tree/main
ModelScope:
魔搭社区
使用git-lfs方式下载示例:
3.3.创建虚拟环境
conda create --name glm4 python=3.10
conda activate glm4
3.4.安装依赖库
pip install torch>=2.5.0
pip install torchvision>=0.20.0
pip install transformers>=4.46.0
pip install huggingface-hub>=0.25.1
pip install sentencepiece>=0.2.0
pip install jinja2>=3.1.4
pip install pydantic>=2.9.2
pip install timm>=1.0.9
pip install tiktoken>=0.7.0
pip install numpy==1.26.4
pip install accelerate>=1.0.1
pip install sentence_transformers>=3.1.1
pip install gradio==4.44.1
pip install openai>=1.51.0
pip install einops>=0.8.0
pip install pillow>=10.4.0
pip install sse-starlette>=2.1.3
pip install bitsandbytes>=0.43.3
四、技术实现
4.1.批量推理
# -*- coding: utf-8 -*-
from typing import Unionimport torch
from transformers import AutoTokenizer, LogitsProcessorList, AutoModelForCausalLMmodelPath = "/data/model/glm-4-9b-chat"def loadTokenizer():tokenizer = AutoTokenizer.from_pretrained(modelPath, trust_remote_code=True)return tokenizerdef loadModel():model = AutoModelForCausalLM.from_pretrained(modelPath,torch_dtype=torch.float16,trust_remote_code=True,device_map="auto").eval()return modeldef process_model_outputs(inputs, outputs, tokenizer):responses = []for input_ids, output_ids in zip(inputs.input_ids, outputs):response = tokenizer.decode(output_ids[len(input_ids):], skip_special_tokens=True).strip()responses.append(response)return responsesdef batch(model,tokenizer,messages: Union[str, list[str]],max_input_tokens: int = 8192,max_new_tokens: int = 8192,num_beams: int = 1,do_sample: bool = True,top_p: float = 0.8,temperature: float = 0.8,logits_processor=None,
):if logits_processor is None:logits_processor = LogitsProcessorList()messages = [messages] if isinstance(messages, str) else messagesbatched_inputs = tokenizer(messages,return_tensors="pt",padding="max_length",truncation=True,max_length=max_input_tokens).to(model.device)gen_kwargs = {"max_new_tokens": max_new_tokens,"num_beams": num_beams,"do_sample": do_sample,"top_p": top_p,"temperature": temperature,"logits_processor": logits_processor,"eos_token_id": model.config.eos_token_id}batched_outputs = model.generate(**batched_inputs, **gen_kwargs)batched_response = process_model_outputs(batched_inputs, batched_outputs, tokenizer)return batched_responseif __name__ == "__main__":batch_message = [[{"role": "system", "content": "你是一位专业的导游"},{"role": "user", "content": "请推荐一些广州的特色景点?"}],[{"role": "system", "content": "你是一位专业的算命先生"},{"role": "user", "content": "请给我儿子取一个名字?"}],[{"role": "system", "content": "你是一位专业的数学老师"},{"role": "user", "content": "请解这道计算题:3.1*9.9+10.1=?"}]]tokenizer = loadTokenizer()model = loadModel()batch_inputs = []max_input_tokens = 1024for i, messages in enumerate(batch_message):new_batch_input = tokenizer.apply_chat_template(messages, add_generation_prompt=True, tokenize=False)max_input_tokens = max(max_input_tokens, len(new_batch_input))batch_inputs.append(new_batch_input)gen_kwargs = {"max_input_tokens": max_input_tokens,"max_new_tokens": 8192,"do_sample": True,"top_p": 0.9,"temperature": 0.6,"num_beams": 1,}batch_responses = batch(model, tokenizer, batch_inputs, **gen_kwargs)for response in batch_responses:print("-" * 30)print(response)
调用结果:
(glm4) [root@gpu test]# python -u glm4_9b_chat_test.py
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████████████████████████| 10/10 [00:10<00:00, 1.01s/it]
------------------------------
当然可以!广州作为我国历史文化名城,拥有众多特色景点。以下是广州的一些著名景点推荐:1. **广州塔(小蛮腰)**:广州的地标性建筑,可以登塔观光,俯瞰整个广州城市风貌。2. **白云山**:广州市内著名的风景区,有多个登山步道和观景台,是徒步和休闲的好去处。3. **广州动物园**:位于越秀山内,是中国最早建立的动物园之一,拥有丰富的动物种类。4. **陈家祠**:位于荔湾区,是一座具有岭南特色的传统建筑,是了解岭南建筑风格的好地方。5. **长隆旅游度假区**:包括长隆野生动物世界、长隆水上乐园、长隆国际大马戏等多个主题公园,适合家庭游玩。6. **珠江夜游**:乘坐游船夜游珠江,欣赏两岸的夜景,感受广州的繁华。7. **广州博物馆**:位于越秀山内,可以了解广州的历史文化。8. **广州起义纪念馆**:纪念1927年广州起义,了解这段历史。9. **南越王墓博物馆**:位于越秀山,是西汉南越王赵眜的陵墓,是研究岭南地区古代文化的宝贵资料。10. **上下九步行街**:广州著名的购物街,汇集了各种小吃和购物场所,是体验广州传统商业文化的好地方。这些景点各有特色,可以让您全面了解广州的历史、文化和现代风貌。希望您在广州的旅行愉快!
------------------------------
当然可以。根据中国传统命名文化,我为您的儿子取名为“瑞宇”。其中,“瑞”字寓意吉祥如意,好运连连;“宇”字则代表宇宙、广阔,希望您的儿子能够胸怀宽广,前程似锦。这个名字既富有文化内涵,又充满美好祝愿。
------------------------------
好的,我们来解这个计算题。首先计算乘法部分:
3.1 * 9.9 = 30.69然后将乘法的结果加上10.1:
30.69 + 10.1 = 40.79所以,3.1 * 9.9 + 10.1 的结果是 40.79。
五、附带说明
5.1.问题一: undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12
解决:
export LD_LIBRARY_PATH=/usr/local/miniconda3/envs/glm4/lib/python3.10/site-packages/nvidia/nvjitlink/lib:$LD_LIBRARY_PATH
相关文章:

开源模型应用落地-glm模型小试-glm-4-9b-chat-批量推理(二)
一、前言 GLM-4是智谱AI团队于2024年1月16日发布的基座大模型,旨在自动理解和规划用户的复杂指令,并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等,支持128K的上下文窗口,使其在长文本处理和精度召回方面表现优异&a…...

【C++篇】数据之林:解读二叉搜索树的优雅结构与运算哲学
文章目录 二叉搜索树详解:基础与基本操作前言第一章:二叉搜索树的概念1.1 二叉搜索树的定义1.1.1 为什么使用二叉搜索树? 第二章:二叉搜索树的性能分析2.1 最佳与最差情况2.1.1 最佳情况2.1.2 最差情况 2.2 平衡树的优势 第三章&a…...

C#-类:声明类、声明类对象
一:类的声明 class 类名 {//特征——成员变量//行为——成员方法//保护特征——成员属性//构造函数和析构函数//索引器//运算符重载//静态成员 }类名:帕斯卡 同一个语句块中的不同类 不能重名 二:声明类对象 2.1 类的声明 ≠ 类对象的声…...

【AIGC】ChatGPT提示词Prompt高效编写技巧:逆向拆解OpenAI官方提示词
博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯OpenAI官方提示词的介绍OpenAI官方提示词的结构与组成如何通过分析提示词找到其核心组件 💯OpenAI官方提示词分析案例一:制定教学计划案例二&…...

【linux】端口监听和终止进程
端口监听和终止进程 有时候,即使进程看起来已经关闭,它可能仍然占用着端口。你可以使用 netstat -tulpn | grep <端口号> 来查看哪个进程正在使用该端口,然后使用 kill -9 来强制关闭该进程。 [naienotebook-npu-b1bb152e-7655cb9d4…...

【网络安全】|kali中安装nessus
1、使用 df -h 命令查看磁盘使用情况,确保磁盘容量大于40G 简单粗暴办法:重装系统,装系统中注意磁盘空间相关的选项 //磁盘扩容:https://wiki.bafangwy.com/doc/670/ 2、安装 nessus 安装教程 https://blog.csdn.net/Cairo_A/a…...

Docker可视化管理面板DPanel的安装
本文软件由网友 rui 推荐; 什么是 DPanel ? DPanel 是一款 Docker 可视化管理面板,旨在简化 Docker 容器、镜像和文件的管理。它提供了一系列功能,使用户能够更轻松地管理和部署 Docker 环境。 软件特点: 可视化管理&…...

【android12】【AHandler】【3.AHandler原理篇AHandler类方法全解】
AHandler系列 【android12】【AHandler】【1.AHandler异步无回复消息原理篇】-CSDN博客 【android12】【AHandler】【2.AHandler异步回复消息原理篇】-CSDN博客 其他系列 本人系列文章-CSDN博客 1.简介 前面两篇我们主要介绍了有回复和无回复的消息的使用方法和源码解析&a…...

使用Docker Compose构建多容器应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Docker Compose构建多容器应用 引言 Docker Compose 简介 安装 Docker Compose 创建基本配置 运行多容器应用 查看服务状态 …...

面试知识目录
面试知识目录 八股文 java基础 java反射java HashMap面向对象多线程虚拟机内存 SpringMybatisMySQLPostgresqlSQL优化Nosql...

Rust移动开发:Rust在Android端集成使用介绍
Andorid调用Rust 目前Rust在移动端上的应用,一般作为应用sdk的提供,供各端使用,目前飞书底层使用Rust编写通用组件。 该篇适合对Android、Rust了解,想看如何做整合,如果想要工程源码,可以评论或留言有解疑…...

vue3动态监听div高度案例
案例场景 场景描述:现在左边的线条长度需要根据右边盒子的高度进行动态变化 实践代码案例 HTML部分 <div v-for"(device, index) in devices" :key"index"><!-- 动态设置 .left-bar 的高度 --><div class"left-bar"…...

数据转换 | Matlab基于SP符号递归图(Symbolic recurrence plots)一维数据转二维图像方法
目录 基本介绍程序设计参考资料获取方式 基本介绍 Matlab基于SP符号递归图(Symbolic recurrence plots)一维数据转二维图像方法 符号递归图(Symbolic recurrence plots)是一种一维时间序列转图像的技术,可用于平稳和非平稳数据集;对噪声具有…...

分类算法——逻辑回归 详解
逻辑回归(Logistic Regression)是一种广泛使用的分类算法,特别适用于二分类问题。尽管名字中有“回归”二字,逻辑回归实际上是一种分类方法。下面将从底层原理、数学模型、优化方法以及源代码层面详细解析逻辑回归。 1. 基本原理 …...

只允许指定ip远程连接ssh
我们都会使用securtcrt或者xshell等软件进行远程登录,这样虽然会给我们带来很多便捷,但是同样会存在一定的风险。有很多人专门通过重复的扫描试图破解我们的linux服务器,从而获取免费的“肉鸡”。因此我们可以通过设置hosts.allow和hosts.den…...

Rust 力扣 - 2841. 几乎唯一子数组的最大和
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的窗口,用一个哈希表记录窗口内的所有元素(用来对窗口内元素去重),我们取哈希表中元素数量大于等于m的窗口总和的最大值 题解代码 use std::coll…...

TwinCL: A Twin Graph Contrastive Learning Model for Collaborative Filtering
TwinCL: A Twin Graph Contrastive Learning Model for Collaborative Filtering 摘要 在推荐和协同过滤领域,图对比学习(Graph Contrasive Learning,GCL)已经成为一种有影响的方法。然而,对比学习有效性的原因还没有…...

如何区分实例化网格中的每个实例
1)如何区分实例化网格中的每个实例 2)项目在模拟器上切换程序后有概率画面冻结 3)Unity工程导入团结引擎,GUID会变化,导致引用关系丢失 4)Mask在Android平台下渲染异常 这是第407篇UWA技术知识分享的推送&a…...

理解 WordPress | 第一篇:与内容管理系统的关系
初步了解 WordPress 在互联网世界里,WordPress 是一个家喻户晓的名字。它是一个开源的内容管理系统(Content Management System,简称 CMS),帮助用户轻松创建和管理网站。WordPress 诞生于 2003 年,最初是一…...

Python游戏脚本之实现飞机大战(附源码)
一.游戏设定 游戏界面如下图所示: 游戏的基本设定: 敌方共有大中小3款飞机,分为高中低三种速度; 子弹的射程并非全屏,而大概是屏幕长度的80%; 消灭小飞机需要1发子弹,中飞机需要8发,大飞机需要20发子弹; 每消灭一架小飞机得1000分,中飞机6000分,大飞…...

使用Spring Boot搭建简单的web服务
1 引言 1.1 Spring Boot简介 Spring Boot是由Pivotal团队提供的一套开源框架,旨在简化Spring应用的创建及部署。 一、核心设计思想 Spring Boot的核心设计思想是“约定优于配置”(Convention Over Configuration,简称COC)。这…...

【IF-MMIN】利用模态不变性特征进行缺失模态的鲁棒多模态情感识别
代码地址:github地址传送 文章是基于MMIN的改进 -> MMIN传送 abstract 多模态情感识别利用跨模态的互补信息来获得性能。然而,我们不能保证所有模式的数据总是存在于实践中。在跨模态数据缺失预测研究中,异质性模态之间的固有差异即模态…...

RGB图像,排列方式NHWC适合CPU计算,NCHW适合GPU计算
之前写过笔记OpenCV读取图像时按照BGR的顺序HWC排列,PyTorch按照RGB的顺序CHW排列,HWC格式排列,那么内存位置计算公式是? 在比较NHWC(channels_last)和NCHW(channels_first)这两种图像数据通道格式的效率时…...

布朗运动
内容来源 数理金融初步(原书第3版)Sheldon M. Ross著 冉启康译 机械工业出版社 布朗运动 定义 如果随机变量集合 X ( t ) X(t) X(t) 满足以下条件 X ( 0 ) X(0) X(0) 是一个给定的常数 对所有正数 y y y 和 t t t,随机变量 X ( y t …...

WPF+MVVM案例实战(二十二)- 制作一个侧边弹窗栏(CD类)
文章目录 1、案例效果1、侧边栏分类2、CD类侧边弹窗实现1、样式代码实现2、功能代码实现3 运行效果4、源代码获取1、案例效果 1、侧边栏分类 A类 :左侧弹出侧边栏B类 :右侧弹出侧边栏C类 :顶部弹出侧边栏D类 :底部弹出侧边栏2、CD类侧边弹窗实现 1、样式代码实现 在原有的…...

集成旺店通旗舰版售后单至MySQL数据库
旺店通旗舰版-售后单集成到MySQL的技术实现 在数据驱动的业务环境中,如何高效、准确地将旺店通旗舰奇门的数据集成到MySQL数据库,是许多企业面临的重要挑战。本文将分享一个具体的系统对接案例:旺店通旗舰版-售后单-->BI泰海-售后订单表(…...

【Linux】从零开始使用多路转接IO --- epoll
当你偶尔发现语言变得无力时, 不妨安静下来, 让沉默替你发声。 --- 里则林 --- 从零开始认识多路转接 1 epoll的作用和定位2 epoll 的接口3 epoll工作原理4 实现epollserverV1 1 epoll的作用和定位 之前提过的多路转接方案select和poll 都有致命缺点…...

爬虫学习4
from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(targetfunc,args("1"))t2 Thread(targetfunc, args("2"))t1.start()t2.start()print("我是诛仙剑")from …...

CTF之web题集详情随手笔记
《Web安全》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484238&idx1&snca66551c31e37b8d726f151265fc9211&chksmc0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene21#wechat_redirect 1 WEB 1 靶场目…...

TDengine 集群能力:超越 InfluxDB 的水平扩展与开源优势
随着物联网、车联网等领域的快速发展,企业所面临的数据采集量呈爆炸式增长,这对 IT 基础设施和数据库提出了严峻挑战。传统单机版数据库逐渐无法应对高并发的数据写入和复杂的查询需求。因此,底层数据库必须具备水平扩展能力,以确…...