首页 > 其他分享 >开源模型应用落地-chatglm3-6b模型小试-入门篇(一)

开源模型应用落地-chatglm3-6b模型小试-入门篇(一)

时间:2024-04-03 11:04:07浏览次数:25  
标签:6b tokenizer 模型 ChatGLM3 6B response model 小试

  一、前言

     刚开始接触AI时,您可能会感到困惑,因为面对众多开源模型的选择,不知道应该选择哪个模型,也不知道如何调用最基本的模型。但是不用担心,我将陪伴您一起逐步入门,解决这些问题。

     在信息时代,我们可以轻松地通过互联网获取大量的理论知识和概念。然而,仅仅掌握理论知识并不能真正帮助我们成长和进步。实践是将理论知识转化为实际技能和经验的关键。

    我将引导您以最低的成本运行ChatGLM3-6b模型,让您体验到它带来的美妙特性。

    qwen模型教程入口:

开源模型应用落地-qwen模型小试-入门篇(一)_qwen文本分类-CSDN博客

    baichuan模型教程入口:

开源模型应用落地-baichuan模型小试-入门篇(一)-CSDN博客


二、术语

2.1. 智谱AI

    是由清华大学计算机系技术成果转化而来的公司,致力于打造新一代认知智能通用模型。公司合作研发了双语千亿级超大规模预训练模型GLM-130B,并构建了高精度通用知识图谱,形成数据与知识双轮驱动的认知引擎,基于此模型打造了ChatGLM(chatglm.cn)。此外,智谱AI还推出了认知大模型平台Bigmodel.ai,包括CodeGeeX和CogView等产品,提供智能API服务,链接物理世界的亿级用户、赋能元宇宙数字人、成为具身机器人的基座,赋予机器像人一样“思考”的能力。

2.2. ChatGLM3

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

  1. 更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,* ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能*。
  2. 更完整的功能支持: ChatGLM3-6B 采用了全新设计的 Prompt 格式 ,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。
  3. 更全面的开源序列: 除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM3-6B-Base 、长文本对话模型 ChatGLM3-6B-32K 和进一步强化了对于长文本理解能力的 ChatGLM3-6B-128K。以上所有权重对学术研究完全开放 ,在填写 问卷 进行登记后亦允许免费商业使用

三、前置条件

3.1. windows操作系统

3.2. 下载chatglm3-6b模型

从huggingface下载:https://huggingface.co/THUDM/chatglm3-6b/tree/main

从魔搭下载:魔搭社区汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/files

3.3. 创建虚拟环境&安装依赖

conda create --name chatglm3 python=3.10
conda activate chatglm3
pip install protobuf transformers==4.30.2 cpm_kernels torch>=2.0 sentencepiece accelerate

四、技术实现

4.1. 本地推理

#Tokenizer加载

def loadTokenizer():
    tokenizer = AutoTokenizer.from_pretrained(modelPath, use_fast=False, trust_remote_code=True)
    return tokenizer

#Model加载

def loadModel():
    model = AutoModelForCausalLM.from_pretrained(modelPath, device_map="auto",  trust_remote_code=True).eval()
    print(model)
    return model

#推理执行结果如下:

def chat(model, tokenizer, message):
    try:
        for response in model.stream_chat(tokenizer, message):
            _answer,_history = response
            yield _answer

    except Exception:
        traceback.print_exc()

4.2. 完整代码

# -*-  coding = utf-8 -*-
from transformers import AutoTokenizer, AutoModelForCausalLM
import time
import traceback

modelPath = "E:\\model\\chatglm3-6b"

def chat(model, tokenizer, message):
    try:
        for response in model.stream_chat(tokenizer, message):
            _answer,_history = response
            yield _answer

    except Exception:
        traceback.print_exc()


def loadTokenizer():
    tokenizer = AutoTokenizer.from_pretrained(modelPath, use_fast=False, trust_remote_code=True)
    return tokenizer


def loadModel():
    model = AutoModelForCausalLM.from_pretrained(modelPath, device_map="auto",  trust_remote_code=True).eval()
    #print(model)
    return model


if __name__ == '__main__':
    model = loadModel()
    tokenizer = loadTokenizer()

    message = "你是谁?"

    response = chat(model, tokenizer, message)
    for answer in response:
        print(answer)

运行结果:


五、附带说明

5.1.ChatGLM3-6B vs Qwen1.5-7B-Chat

1) 推理实现的代码差异

ChatGLM3:

    for response in model.stream_chat(tokenizer,message, history)

       ......

QWen1.5:

    generation_kwargs = dict(inputs=model_inputs.input_ids, streamer=streamer)

    thread = Thread(target=model.generate, kwargs=generation_kwargs)

    thread.start()

        for response in streamer:
            ......

2) 对话格式差异

ChatGLM3:

<|system|>
You are a helpful assistant.
<|user|>
我家在广州,很好玩哦
<|assistant|>
广州是一个美丽的城市,有很多有趣的地方可以去。

QWen1.5:

<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
我家在广州,很好玩哦<|im_end|>
<|im_start|>assistant
广州是一个美丽的城市,有很多有趣的地方可以去。<|im_end|>

3) 模型参数

ChatGLM3-6BQWen1.5-7B-Chat
n_layers2832
n_heads3232
vocab size65,024151,851
sequence length81928192

标签:6b,tokenizer,模型,ChatGLM3,6B,response,model,小试
From: https://blog.csdn.net/qq839019311/article/details/137233634

相关文章

  • 大模型中常用的注意力机制GQA详解以及Pytorch代码实现
    分组查询注意力(GroupedQueryAttention)是一种在大型语言模型中的多查询注意力(MQA)和多头注意力(MHA)之间进行插值的方法,它的目标是在保持MQA速度的同时实现MHA的质量。这篇文章中,我们将解释GQA的思想以及如何将其转化为代码。GQA是在论文GQA:TrainingGeneraliz......
  • 芒果YOLOv5改进90:标签分配策略篇之TOOD:最新基于Task-aligned Assignment任务对齐学习T
    芒果专栏基于TOOD的改进,改进Task-alignedAssignment任务对齐学习源码教程|详情如下......
  • 芒果YOLOv7改进90:标签分配策略篇之TAL:最新基于Task-aligned Assignment任务对齐学习TA
    芒果专栏基于TOOD的改进,改进Task-alignedAssignment任务对齐学习源码教程|详情如下......
  • Linux C++ 015-对象模型和this指针
    LinuxC++015-对象模型和this指针本节关键字:Linux、C++、对象模型、this指针相关库函数:成员变量和成员函数分开存储1、在C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上;2、C++编译器会给每个空对象也分配一个字节的空间,是为了区分空对象占......
  • 盘点AI编程效率神器合集,代码助手工具大模型、Agent智能体
    关注wx公众号:aigc247进社群加wx号:aigc365程序员是最擅长革自己命的职业,让我们借助AI的力量一起摸鱼一起卷!据说好用的AI代码助手工具、大模型、Agent智能体微软的compoliot:AI神器之微软的编码助手Copilot-CSDN博客阿里的: 通义灵码_智能编码助手_AI编程-阿里云智谱AI的C......
  • R语言GARCH模型对股市sp500收益率bootstrap、滚动估计预测VaR、拟合诊断和蒙特卡罗模
    原文链接:http://tecdat.cn/?p=26271最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。Box等人的开创性工作(1994)在自回归移动平均模型领域的相关工作为波动率建模领域的相关工作铺平了道路,分别由Engle(1982)和Bollerslev(1986)引入了ARCH和GARCH......
  • 【论文、项目:人工智能系列】7模型构建
    实际需求分析完了,数据准备完了,到这里重头戏来了,往往也是大家的兴趣所在。重点:数据预处理,选方法,各种调试,特征工程,不断实验。特征工程特征提取图像特征提取方法分类基于手工设计的特征提取方法:如SIFT、SURF、HOG、LBP等,这些方法通过对图像的局部特征、纹理、形状等方面进行......
  • grad_cam下的自定义模型获取热力图
    原文链接:https://blog.csdn.net/zxdd2018/article/details/1255053521.(多张图片)备注:gram_cam_1importosimportnumpyasnpimporttorchimportcv2importmatplotlib.pyplotaspltimporttorchvision.modelsasmodelsfromtorchvision.transformsimportCompose,N......
  • 自然语言处理基础知识入门(二) Word2vec模型,层次softmax,负采样算法详解
    文章目录前言一、Word2vec模型1.1什么是Word2vec模型?1.2Word2vec模型是如何训练?1.3Word2vec最简单版本整体过程1.4Word2vec详细过程1.5CBOW整体过程1.6Skip-gram整体过程二、优化算法2.1层次softmax2.1.1哈夫曼树2.1.2算法详细逻辑2.2负采样策略总结......
  • 一文彻底搞懂常见IO模型
    文章目录1.常见的IO模型2.阻塞IO(BIO)3.非阻塞IO(NIO)4.IO多路复用5.信号驱动6.异步IO(AIO)7.BIO,NIO,AIO的区别1.常见的IO模型在UNIX操作系统中,常见的I/O模型有以下五种:1.阻塞I/O模型(BlockingI/O)在阻塞I/O模型中,应用程序发起一个I/O请求后会一直阻......