0


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

** 一、前言**

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

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

本章将学习如何在低成本下,使用transformer设置chatglm3-6b模型参数/System Prompt/历史对话

qwen模型教程入口:

开源模型应用落地-qwen模型小试-入门篇(三)

baichuan模型教程入口:

开源模型应用落地-baichuan2模型小试-入门篇(三)


二、术语

2.1. CentOS

CentOS是一种基于Linux的自由开源操作系统。它是从Red Hat Enterprise Linux(RHEL)衍生出来的,因此与RHEL具有高度的兼容性。CentOS的目标是提供一个稳定、可靠且免费的企业级操作系统,适用于服务器和桌面环境。

2.2. GPU

是Graphics Processing Unit(图形处理单元)的缩写。它是一种专门设计用于处理图形和图像计算的处理器。与传统的中央处理器(CPU)相比,GPU具有更高的并行计算能力,适用于处理大规模数据并进行复杂的计算任务。

三、前置条件

3.1. linux操作系统

3.2. 下载chatglm3-6b模型

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

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

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

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

四、技术实现

4.1. 使用transformers方式

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

modelPath = "/model/chatglm3-6b"

def chat(model, tokenizer, message, history, system):
    messages = []
    if system is not None:
        messages.append({"role": "system", "content": system})

    if history is not None:
        for his in history:
            user,assistant = his
            messages.append({"role": "user", "content": user})
            messages.append({"role": "assistant", 'metadata': '', "content": assistant})

    try:
        for response in model.stream_chat(tokenizer,message, messages,  max_length=512, top_p=0.9, temperature=0.45, repetition_penalty=1.1,do_sample=True):
            _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).cuda() 
    model = model.eval()
    # print(model)
    return model

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

    start_time = time.time()

    message = "我家有什么好玩?"
    history = [('hi,你好', '你好!有什么我可以帮助你的吗?'), ('我家在广州,很好玩哦', '广州是一个美丽的城市,有很多有趣的地方可以去。'), ]
    system = "你是一个人工智能助手,擅长解决人类的问题"

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

    end_time = time.time()
    print("执行耗时: {:.2f}秒".format(end_time - start_time))

调用结果:

4.2. 使用modelscope方式

把AutoModelForCausalLM, AutoTokenizer改为从modelscope导入即可

调用输出

注意:需要安装modelscope库


五、附带说明

5.1. 上下文长度限制

chatglm3-6b的Seq Length只有8k,需要更长文本理解能力的,需要使用对应的模型


本文转载自: https://blog.csdn.net/qq839019311/article/details/137341625
版权归原作者 开源技术探险家 所有, 如有侵权,请联系我们删除。

“开源模型应用落地-chatglm3-6b模型小试-入门篇(三)”的评论:

还没有评论