本地化部署大语言模型 ChatGLM

本地化部署大语言模型 ChatGLM

  • 本地化部署大语言模型 ChatGLM
    • 前期筹备
      • GitHub 基础包
      • 语言模型文件
      • 基础配置
      • 显存查看方法
    • Anaconda 模块
      • ChatGLM-6B 网页部署
        • Anaconda 环境创建
        • 根目录操作
        • 基础依赖加载
        • transformers 和 protobuf 库加载
        • Pytorch 源修改
        • 依赖库补充
        • 补充依赖 pypi 配置
        • cchardet 依赖错误解决
        • 强制 归一化
        • 网页部署成功
      • ChatGLM-6B 本地部署
        • Anaconda Terminal
        • 依赖项加载
        • api.py 文件修改
        • api.py 执行
        • 本地化部署 成功
        • 发送 Json 数据 Unity 模块
        • 接收 Json 数据 Unity 模块
        • Unity 结合
        • 本地化 运行 效果
    • 使用网址合集
    • 执行命令合集

本地化部署大语言模型 ChatGLM

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。

前期筹备

GitHub 基础包

GitHub: ChatGLM-6B

下载 ChatGLM-6B 压缩包到本地

请添加图片描述

语言模型文件

Hugging Face: Model

下载 训练好的 语言模型文件

请添加图片描述

每一个都要下载

请添加图片描述

基础配置

解压 ChatGLM-6B-main.zip 文件

请添加图片描述

新建一个名为 model 的文件夹

请添加图片描述

把刚才在 Hugging Face 上下载的所有文件都放进来
应该是 20 个 检查一下

请添加图片描述

返回 ChatGLM-6B-main 跟目录 找到名为 web_demo.py 的文件

请添加图片描述

可以用记事本 或则 其他工具打开

请添加图片描述

更改第 45行代码
原本代码:
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
修改过后代码:
tokenizer = AutoTokenizer.from_pretrained("model", trust_remote_code=True)
model = AutoModel.from_pretrained("model", trust_remote_code=True).half().quantize(4).cuda()
就是把 THUDM/chatglm-6b 更改为 model
并在 half()方法之后添加 quantize(4) 方法

请添加图片描述

量化需求:
如果显存小于14G 就使用 quantize(4) 方法 如果你要使用 quantize(8)你就要关闭所有应用
说一下我的电脑配置:i7、16G内存、2060ti显卡(6G显存)
各位看官老爷自己对比一下

在这里插入图片描述

显存查看方法

Win + R 键 打开命令窗口
输入 dxdiag 然后点击确认

请添加图片描述

打开系统自带的诊断工具之后 随便点一个显示

请添加图片描述

这个显示内存就是你的 显存

请添加图片描述

Anaconda 模块

Anaconda 官网: Anaconda 官网

ChatGLM-6B 网页部署

Anaconda 环境创建

打开 Anaconda 点击 Environments

请添加图片描述

新建一个环境

请添加图片描述

起一个名字
注意:记住 Python 版本 有点重要 最好使用 3.10.10
如果没有可以在官网重新下载 更新一下

请添加图片描述

点击那个运行按钮 并打开 Open Terminal

在这里插入图片描述

根目录操作

输入 D: 进入相应硬盘

请添加图片描述

使用 cd 命令 进入到 ChatGML 根目录
我这边是 D:\Unity\ChatGLM-6B\ChatGLM-6B-main
大家根据自己的 解压路径进行 打开

请添加图片描述

基础依赖加载

键入 pip install -r requirements.txt
加载依赖项 反正我这边是会加载不完全

请添加图片描述

transformers 和 protobuf 库加载

下载 protobuf 和 transformers 库支持
pip install protobuf==3.20.0 transformers==4.27.1 icetk cpm_kernels

请添加图片描述

因为要使用 Web 显示 所以也需要加载 gradio库
pip install gradio

请添加图片描述

先启动跑一下看看 能不能运行的起来 万一可以呢 是吧
python web_demo.py

请添加图片描述

Pytorch 源修改

Pytorch: Pytorch

报错:AssertionError: Torch not compiled with CUDA enabled
这个就是 只支持 CPUCUDR 问题不大
去 Pytorch 找到对应的 直接 conda

请添加图片描述

注意选择对啊
如果conda 实在是卡的不能行的话  你就试试 pip
两个命令都给你:conda: conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
pip: pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

请添加图片描述
请添加图片描述

当出现这一句的时候 你直接 输入 y 回车就行

请添加图片描述

依赖库补充

下载完毕之后你会发现 还是缺少依赖库 找到相应名称
比如这个 chardet 直接 pip install
pip install chardet

请添加图片描述

再次运行 python web_demo.py 命令

请添加图片描述

好吧 果然不可以  缺少 cchardet库
那就继续下载呗
pip install cchardet

请添加图片描述

来了来了 全场最大的麻烦来了
明明下载都下载好了 就是无法执行 你气不气

请添加图片描述

找了一百年 重新下载也不行 换成清华源 也不行
最后的最后 就想着要不换下轮子呢

请添加图片描述

补充依赖 pypi 配置

pypi: pypi官网

在搜索框输入 你想要查询库名称

请添加图片描述

注意选择对应的 系统 我是 win64 所以就选择了第一个
这里还有一个坑

请添加图片描述

cd 到你存放 刚刚下载文件的目录

请添加图片描述

cchardet 依赖错误解决

输入 pip install D:\Unity\ChatGLM-6B\cchardet-2.1.7-cp39-cp39-win_amd64.whl
这是我的路径 各位 自行更改哈
然后你会发现 又错了!!!
不能用 完犊子 真的差点吐血 好在是解决了

请添加图片描述

回到下载文件夹 各位还记得 自己创建环境时的 Python 版本吗 对 就是那个!
原本名称是 cp39 改成 cp310 就能用了
真真不想吐槽了

请添加图片描述

你要是不知道自己环境对应的 就输入:
pip debug --verbose
按照对应的更改一下就行了

请添加图片描述

执行 pip install D:\Unity\ChatGLM-6B\cchardet-2.1.7-cp310-cp310-win_amd64.whl

请添加图片描述

成功 毫无悬念

请添加图片描述

cd 到ChatGLM 根目录
cd D:\Unity\ChatGLM-6B\ChatGLM-6B-main

请添加图片描述

再次运行 python web_demo.py
发现还是不行 那还说什么  上大招

请添加图片描述

强制 归一化

强制 最新归一化
pip install --force-reinstall charset-normalizer==3.1.0

请添加图片描述

再次启动
python web_demo.py
搓手等待...

请添加图片描述

网页部署成功

天见犹怜 终于终于 成功了
真是一波三折 再三折 好在是成功了

请添加图片描述

好了大家可以尽情的调教自己的 GPT

请添加图片描述

ChatGLM-6B 本地部署

Anaconda Terminal

在上面创建好的环境下 重新打开 执行 Terminal 

在这里插入图片描述

导航到 根目录

请添加图片描述

依赖项加载

使用 pip install fastapi uvicorn 命令安装相关 依赖

请添加图片描述

api.py 文件修改

在根目录找到 api.py 文件并打开

请添加图片描述

初始代码:这两句在 5354
	tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
更改为下面的:稍微解释一下。
因为我的模型放在了根目录的 model 文件夹下 所以把 "THUDM/chatglm-6b" 更改为了 "model"
你们也可以按需更改。
    tokenizer = AutoTokenizer.from_pretrained("model", trust_remote_code=True)model = AutoModel.from_pretrained("model", trust_remote_code=True).half().cuda()
可以直接替换的完整代码:
from fastapi import FastAPI, Request
from transformers import AutoTokenizer, AutoModel
import uvicorn, json, datetime
import torchDEVICE = "cuda"
DEVICE_ID = "0"
CUDA_DEVICE = f"{DEVICE}:{DEVICE_ID}" if DEVICE_ID else DEVICEdef torch_gc():if torch.cuda.is_available():with torch.cuda.device(CUDA_DEVICE):torch.cuda.empty_cache()torch.cuda.ipc_collect()app = FastAPI()@app.post("/")
async def create_item(request: Request):global model, tokenizerjson_post_raw = await request.json()json_post = json.dumps(json_post_raw)json_post_list = json.loads(json_post)prompt = json_post_list.get('prompt')history = json_post_list.get('history')max_length = json_post_list.get('max_length')top_p = json_post_list.get('top_p')temperature = json_post_list.get('temperature')response, history = model.chat(tokenizer,prompt,history=history,max_length=max_length if max_length else 2048,top_p=top_p if top_p else 0.7,temperature=temperature if temperature else 0.95)now = datetime.datetime.now()time = now.strftime("%Y-%m-%d %H:%M:%S")answer = {"response": response,"history": history,"status": 200,"time": time}log = "[" + time + "] " + '", prompt:"' + prompt + '", response:"' + repr(response) + '"'print(log)torch_gc()return answerif __name__ == '__main__':tokenizer = AutoTokenizer.from_pretrained("model", trust_remote_code=True)model = AutoModel.from_pretrained("model", trust_remote_code=True).half().cuda()model.eval()uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)

api.py 执行

执行命令:python api.py

请添加图片描述

本地化部署 成功

可以自己设置访问网址和端口 只要设置好就行。
我这边直接使用的是默认的:http://127.0.0.1:8000 或者 http://0.0.0.0:8000

请添加图片描述

发送 Json 数据 Unity 模块

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 发送 数据
/// </summary>
[System.Serializable]
public class PostDataJson_ZH 
{/// <summary>/// 发送信息/// </summary>public string prompt;/// <summary>/// 细节/// </summary>public List<string> history;
}

接收 Json 数据 Unity 模块

using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// 接收 数据
/// </summary>
[System.Serializable]
public class AcceptJson_ZH 
{/// <summary>/// 返回消息/// </summary>public string response;/// <summary>/// 多个回答/// </summary>public List<List<string>> history;/// <summary>/// 状态/// </summary>public int status;/// <summary>/// 返回事件/// </summary>public string time;
}

Unity 结合

using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;public class ChatGLM_ZH : MonoBehaviour
{[Header("本地化访问网址")]public string _OpenAIUrl= "http://127.0.0.1:8000";[Header("基础模板设置")][SerializeField]public PostDataJson_ZH _PostData = new PostDataJson_ZH();[Header("接收数据")]public string _RobotChatText;[Header("问题")]public string _SendMessage= "你好";void Update(){if (Input.GetKeyDown(KeyCode.Q)){_SendMessage = GameObject.Find("输入").GetComponent<InputField>().text;StartCoroutine(GetPostData(_SendMessage));}}/// <summary>/// POST 方法请求/// </summary>/// <param 问题="_SendMessage"></param>/// <returns></returns>private IEnumerator GetPostData(string _SendMessage){using (UnityWebRequest _Request = new UnityWebRequest(_OpenAIUrl, "POST")){//{"prompt": "你好", "history": []}_PostData.prompt = _SendMessage;//数据转换string _JsonText = JsonUtility.ToJson(_PostData);print(_JsonText);byte[] _Data = System.Text.Encoding.UTF8.GetBytes(_JsonText);//数据上传 等待响应_Request.uploadHandler = new UploadHandlerRaw(_Data);_Request.downloadHandler = new DownloadHandlerBuffer();//数据重定向_Request.SetRequestHeader("Content-Type", "application/json");//等待响应 开始与远程服务器通信yield return _Request.SendWebRequest();//数据返回if (_Request.responseCode == 200){//接收返回信息string _Message = _Request.downloadHandler.text;print(_Message);//数据转换AcceptJson_ZH _Textback = JsonUtility.FromJson<AcceptJson_ZH>(_Message);//确保当前有消息传回if (_Textback.response != null){//输出显示_RobotChatText = _Textback.response;GameObject.Find("输出").GetComponent<Text>().text = _RobotChatText;}}}}
}

本地化 运行 效果

命令行 输出

请添加图片描述

Unity 输出

请添加图片描述

使用网址合集

GitHub: ChatGLM-6B
Hugging Face: Model
Anaconda 官网: Anaconda 官网
Pytorch: Pytorch
Pypi: pypi官网
清华大学镜像网站: 清华大学镜像网站

执行命令合集

//基础包依赖加载
pip install -r requirements.txt//transformers 和 protobuf 依赖加载
pip install protobuf==3.20.0 transformers==4.27.1 icetk cpm_kernels//网页使用 gradio 库 加载
pip install gradio//网页 启动命令
python web_demo.py//CPU 转换
conda: conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
pip: pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117//chardet 库 补充依赖
pip install chardet//cchardet 库 补充依赖
pip install cchardet//查看当前平台支持的版本
pip debug --verbose//cchardet 库 轮子 加载
pip install D:\Unity\ChatGLM-6B\cchardet-2.1.7-cp310-cp310-win_amd64.whl//强制 最新归一化
pip install --force-reinstall charset-normalizer==3.1.0//启动命令
python web_demo.py//本地化 依赖加载
pip install fastapi uvicorn//本地化 启动命令
python api.py//断开服务
Ctrl + C//清华源 镜像
核心句式:-i https://pypi.tuna.tsinghua.edu.cn/simple
例如下载的是:cchardet
正常下载是:pip install cchardet
清华源下载是:pip install cchardet -i https://pypi.tuna.tsinghua.edu.cn/simple

暂时先这样吧,如果有时间的话就会更新模型微调文章以及抽时间更新GLM130B的部署,实在看不明白就留言,看到我会回复的。
路漫漫其修远兮,与君共勉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15050.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

麻将AI 不完全信息博弈学习笔记(完结)

前言 在这学期的数据结构必修课中&#xff0c;老师向我们提供了两道题&#xff1a; 其一是六子棋问题&#xff1b; 其二是麻将AI问题&#xff1b; 前者是经典的完全信息博弈问题&#xff0c;根据我已有的知识&#xff0c;利用博弈树和合理的剪枝可以提供一种高效的解法&#x…

数据库入门教程--01建库建表插入数据以及数据的修改

if exists(select * from sysdatabases where name Datatest) Drop database Datatest go--判断是否已存在数据库Datatest&#xff0c;并删除 create database Datatest--创建数据库 on--创建数据文件 (nameDatatest,--数据库中文件名filenameD:\数据库练习文件夹\Datatest.mdf…

医疗版ChatGPT直播评测!治疗方案与真人医生96%一致

杨净 发自 凹非寺量子位 | 公众号 QbitAI 国内首个医疗大模型&#xff0c;已经在“接诊”患者了。 最近&#xff0c;一组AI医生医院真实站岗数据曝光&#xff1a; 共接诊120多名患者&#xff0c;从问诊、检查到诊疗方案全流程覆盖&#xff1b;涉及心内科、消化内科、呼吸内科、…

利用ChatGPT思维分析硬科技创新趋势

2015年初夏&#xff0c;我去参加了在北京举办的联想科技大会。在会上&#xff0c;联想、英特尔、微软三位CEO第一次并肩上台发言&#xff0c;他们的演讲中都透露出对移动互联网行业的苦恼和无奈。尤其是微软的新CEO萨提亚纳德拉&#xff08;Satya Nadella&#xff09;&#xff…

微软为ChatGPT打造专用超算!砸下几亿美元,上万张英伟达A100打造

萧箫 发自 凹非寺量子位 | 公众号 QbitAI 微软砸下大几亿美元&#xff0c;专门为训练ChatGPT打造了一台超算—— 上万张英伟达A100芯片打造&#xff0c;甚至专门为此调整了服务器架构&#xff0c;只为给ChatGPT和新必应AI提供更好的算力。 △图源&#xff1a;微软 不仅如此&…

一次只要0.003美元,比人类便宜20倍!ChatGPT让数据标注者危矣

作者丨好困 来源丨学术头条 编辑丨新智元 点击进入—>3D视觉工坊学习交流群 【导读】最近&#xff0c;来自苏黎世大学的研究团队发现&#xff0c;ChatGPT在多个NLP标注任务上胜过众包工作者&#xff0c;具有较高一致性&#xff0c;且每次标注成本仅约0.003美元&#xff0c;比…

第2章信息技术发展

信息技术是在信息科学的基本原理和方法下&#xff0c;获取信息、处理信息、传输信息和使用信息的应用技术总称。从信息技术的发展过程来看&#xff0c;信息技术在传感器技术、通信技术和计算机技术的基础上&#xff0c;融合创新和持续发展&#xff0c;孕育和产生了物联网、云计…

ES+Redis+MySQL,这个高可用架构设计太顶了!

大家好&#xff0c;我是宝哥&#xff01; 背景 会员系统是一种基础系统&#xff0c;跟公司所有业务线的下单主流程密切相关。如果会员系统出故障&#xff0c;会导致用户无法下单&#xff0c;影响范围是全公司所有业务线。所以&#xff0c;会员系统必须保证高性能、高可用&#…

私有云到底是不是云?

私有云是不是云&#xff1f;这是一个问题。 大部分认为私有云不是云的人都是出于自身利益的立场&#xff0c;试图抹黑私有云。虽然私有云在某些场景下功能不如公有云强大&#xff0c;但否定私有云就像否定残疾人的人类地位&#xff0c;或者否认个人电脑是计算机一样。 尽管私有…

借由Net5.5G,看到运营商的新沧海

我们都记得这样一句诗&#xff1a;“东临碣石&#xff0c;以观沧海”。 想要看到沧海的壮阔波澜&#xff0c;就先要抵达碣石山这样可以看到大海的地方。在数字化的发展过程中&#xff0c;往往一个技术或产业趋势就是一座碣石山&#xff0c;借由它可以看到描绘着未来机遇的新沧海…

面向对象编程之父 | 历史上的今天

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 5 月 17 日&#xff0c;在 1969 年的今天&#xff0c;国际电信联盟第二十四届行政理事会正式通过决议&#xff0c;决定把国际电信联盟的成立日—5 月 17 日定为…

通过chatGPT学习:L2网络和L3网络?

下面的总结是通过chatGPT4进行的。 1、 L2网络和L3网络 L2网络和L3网络是计算机网络中的两种不同的网络类型&#xff0c;它们有一些不同的特点和应用场景。 L2网络&#xff0c;也被称为数据链路层网络&#xff0c; 主要是通过物理地址&#xff08;MAC地址&#xff09;来转发…

【NLP文章阅读】Zero-Shot Information Extraction via Chatting with ChatGPT

【NLP文章阅读】Zero-Shot Information Extraction via Chatting with ChatGPT 1 模型创新2 前期调研2.1 难以解决的问题 3 Method3.1 方法3.2 数据集3.2.1 RE3.2.2 NER3.2.3 EE 3.3 评价指标3.3.1 RE3.3.2 NER3.3.3 EE 4 效果 转载和使用规则&#xff1a;更多论文解读请关注&a…

OSI模型七层

【ChatGPT】前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击查看学习资料&#xff09; OSI将计算机网络体系结构(architecture&#xff09;划分为以下七层&#xff…

【时间之外】系统管人,能行?(冷眼旁观连载之三)

这次是这个系列的第三篇。最近一直在搞chatGPT的应用&#xff0c;在写代码这方面&#xff0c;GPT真的很牛&#xff0c;几乎没有它不会的问题&#xff0c;简直比雇了一个高级程序员还好&#xff0c;而且是724小时&#xff0c;永不休息&#xff01; 回到主题&#xff0c;下面继续…

在群晖中部署VoceChat

一、简介 VoceChat 是一款支持独立部署的个人云社交媒体聊天服务。15MB 的大小可部署在任何的服务器上&#xff0c;部署简单&#xff0c;很少需要维护。前端可以内嵌到自己的网站下&#xff0c;数据完全由用户自己掌握&#xff0c;传输过程加密。VoceChat 从 Slack, Discord, …

Midjourney AI绘画中文教程详解(完整版)模型、命令、参数与各种高级用法

我有一种预感&#xff0c;您一下子看不完这篇内容&#xff0c;您得【收藏】一下&#xff0c;以便下次接着看~~ Midjourney AI绘画中文教程&#xff0c;Midjourney是一款2022年3月面世的AI绘画工具&#xff0c;创始人是David Holz。 只要输入想到的文字&#xff0c;就能通过人…

Midjourney Discord的使用手册

探索Midjourney之旅&#xff0c;学习绘画与AI&#xff0c;一同成长。加入「阿杰与AI」公众号&#xff0c;参与内容社群建设。 1.Midjourney 新手快速起步指南2.Prompts-提示指令3.Explore Prompting-提示指令的探索4.Blend-叠加5.Midjourney Discord的使用手册6.Versions-版本…

ChatGLM-6B 部署与 P-Tuning 微调实战

自从 ChatGPT 爆火以来&#xff0c;树先生一直琢磨想打造一个垂直领域的 LLM 专属模型&#xff0c;但学习文本大模型的技术原理&#xff0c;从头打造一个 LLM 模型难度极大&#xff0c;所以这事儿就一直搁置了。 但最近一个月&#xff0c;开源文本大模型如雨后春笋般接踵而至&…

chatgpt赋能python:Python如何打开Word文档?

Python 如何打开 Word 文档&#xff1f; Python 是一种强大的编程语言&#xff0c;可以帮助我们完成各种重复性工作&#xff0c;其中包括自动化文件的处理。在这篇文章中&#xff0c;我们将学习如何使用 Python 打开 Word 文档。本文将介绍三种不同的方式&#xff1a;使用 Pyt…