AI 智能对话 - ChatGLM2-6B 本地搭建入门

news2024/11/17 8:27:10

前情提要

这一个月来干了啥事情呢?AI 绘画搞了2周左右,SD 建筑绘图,训练 LORA ,模型控制基本也上手了,可以按照预期生成自己想要的东西,那种控制感是挺开心的,不然你输入一句话生成 AI 图片完全凭天意,这叫无效沟通好不啦;突发奇想要搞 AI 歌曲合成,为了不引发版权诉讼问题,用自己的声音合成了些歌曲,因为不是在录音棚录音的,并且声音数据比较少,所以训练效果还是有点差强人意,不过相较我自己唱的而言已经好到天上去了;AI 语言的实践完成以后,我又开始对 AI 人工智能对话开始下手了,这个才是和大脑思考最接近的一项技术了,应用面也很广泛的,所以一定要搞下来。

那这些小玩意实践过之后,怎么玩呢,其实 AI 的话行业应用就两个层面了,一个是 AI 算法和应用,还有就是 AI 算力调度,因为去年参与过移动云的"东数西算"架构设计,AI 算力调度这块应该还好(去年算力资源真心浪费了),算法逻辑那块勉强看下吧,况且老子下半年还有考试呢,不能在这上面浪费太多时间,最近两个月的周末都耗在这上面了,不能这么沉沦下去了。

搭建部署

环境信息

**
OS:Win11
GPU:3070-RTX 32G
PYTHON:3.10
**

量化等级最低GPU(对话)最低GPU(微调)
FP16(标准)13GB14GB
INT88GB9GB
INT46GB7GB

安装依赖

项目下载

# 下载
git clone https://github.com/THUDM/ChatGLM2-6B

# 安装相关依赖
cd ChatGLM2-6B
pip install -r requirements.txt -i https://pypi.douban.com/simple

模型下载

云盘链接:https://pan.baidu.com/s/1AIerQMpvw7yO34Gq9BFxAQ
提取码:5uzo

将下载的模型放到 THUDM 文件夹下:

显卡驱动

# 查看本机显卡信息
nvidia-smi

安装 cuda-toolkit 工具: https://developer.nvidia.com/cuda-toolkit-archive

备注: 选择不高于上述CUDA的版本,建议版本为 11.8;

** Pytorch 依赖**

# 下载对应版本的 Pytorch
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

** CUDA 校验**

# cuda 可用校验(返回 True 则表示可用)
python -c "import torch; print(torch.cuda.is_available());"

配置选择

** 精度选择 **
在 api.py cli_demo.py web_demo.py web_demo.py 等脚本中,命令如下:

# 模型默认以 FP16 精度加载,运行模型需要大概 13GB 显存
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()

# 如果 GPU 显存有限,按需修改,目前只支持 4/8 bit 量化
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).quantize(4).cuda()

# 如果内存不足,可以直接加载量化后的模型
model = AutoModel.from_pretrained("THUDM/chatglm2-6b-int4",trust_remote_code=True).cuda()

# 如果没有 GPU 硬件的话,也可以在 CPU 上进行对话,但是对话速度会很慢,需要32GB内存(量化模型需要5GB内存)
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).float()

# 如果内存不足,可以直接加载量化后的模型
model = AutoModel.from_pretrained("THUDM/chatglm2-6b-int4",trust_remote_code=True).float()

在 CPU 上运行量化后的模型,还需要安装 gcc 与 openmp。多数 Linux 发行版默认已安装。对于 Windows ,可在安装 TDM-GCC 时勾选 openmp。

启动运行

** 控制台 **

# 控制台运行
python cli_demo.py

** 网页版 **

# 方式一
python web_demo.py

# 方式二
# 安装 streamlit_chat 模块
pip install streamlit_chat -i https://pypi.douban.com/simple
streamlit run web_demo2.py

说明: 由于国内 Gradio 的网络访问较为缓慢,启用 demo.queue().launch(share=True, inbrowser=True) 时所有网络会经过 Gradio 服务器转发,导致打字机体验大幅下降,现在默认启动方式已经改为 share=False,如有需要公网访问的需求,可以重新修改为 share=True 启动。

** API **

# 安装 fastapi uvicorn 模块
pip install fastapi uvicorn -i https://pypi.douban.com/simple

# 运行 api
python api.py

默认部署在本地的 8000 端口,通过 POST 方法进行调用。

curl -X POST "http://127.0.0.1:8000" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你好", "history": []}'

总结

附录

参考:https://juejin.cn/post/7250348861238870053

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux进程(三)---深入理解进程地址空间

目录 地址空间的划分及验证 所谓的地址空间是内存吗? 一种奇怪的现象(虚拟地址的引入) 什么是进程地址空间? 我们平常访问到的内存是物理内存吗? 深入理解区域划分 再谈奇怪的现象 fork()中为什么一个变量可以同时保存两个不同的值 …

网络安全—入职大厂经验之谈

大三想去实习,趁现在该干什么才能去大厂实习呢?想做一些事丰富一下自己的简历,只有打ctf?还是挖洞?非常迷茫。 或者入职转行网络安全行业应该怎么做?对于接下来的职业规划学习计划有什么打算? …

PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images 作者单位 旷视 目的 本文的目标是 通过扩展 PETR,使其有时序建模和多任务学习的能力 以此建立一个 强有力且统一的框架。 本文主要贡献: 将 位置 embedding 转换到 时序表…

漏洞复现 || Bitrix cms文件上传

免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此…

Go语言之流程控制语句,for循环

程序是由语句构成,而流程控制语句 是用来控制程序中每条语句执行顺序的语句。可以通过控制语句实现更丰富的逻辑以及更强大的功能。几乎所有编程语言都有流程控制语句,功能也都基本相似。 其流程控制方式有 顺序结构,分支结构,循环结构 1、switch比if el…

javaWeb之文件上传和下载

文件上传下载(场景): * 文件上传 * 客户端 * 文件上传页面(form) * 请求方式一定是POST. * 文件上传域(<input typefile>)必须具有name属性. * 表单的enctype属性值设置为"multipart/form-data". * 扩展:浏览器内核产品不同(不建…

剖析C语言字符串函数(超全)

目录 前言&#xff1a; 一、strlen函数 功能&#xff1a; 参数和返回值&#xff1a; 注意事项&#xff1a; 返回值是无符号的易错点&#xff1a; strlen函数的模拟实现 1、计数器算法 2、递归算法 3、指针减去指针 二、strcpy函数 功能&#xff1a; 参数和返回值 …

git使用代码

git init //生成一个.git的子目录&#xff0c;产生一个仓库。 git status //查看当前目录下所有文件的状态。 git aad . //将该目录下所有的文件提交到暂存区 git add文件名/将该目录下指定的文件提交到暂存区 git commit -m v1.0//将暂存区的文件提交到版本库 git log //…

网络协议与攻击模拟-21-HTTP协议

HTTP 协议 1、 HTTP 协议结构 2、在 Windows server 去搭建 web 服务器 3、分析 HTTP 协议流量 一、 HTTP 协议 1、概念 HTTP &#xff08;超文本传输协议&#xff09;是用于在万维网服务器上传输超文本&#xff08; HTML &#xff09;到本地浏览器的传输协议 属于 TCP / …

树与图的(深度 + 广度)优先遍历

目录 一、树与图的存储1.树的特性2.图的分类3.有向图的储存结构 二、树与图的深度优先遍历的运用树的重心题意分析代码实现 三、树与图的广度优先遍历的运用图中点的层次题意分析代码实现 一、树与图的存储 1.树的特性 树是一种特殊的图,具有以下两个重要特性: 无环 树是一个…

Redis数据类型 — Set

目录 Set内部实现 源码片段 Set 类型是一个无序并唯一的键值集合&#xff0c;它的存储顺序不会按照插入的先后顺序进行存储。一个集合最多可以存储 2^32-1 个元素。 Set 类型除了支持集合内的增删改查&#xff0c;同时还支持多个集合取交集、并集、差集。Set 的差集、并集和…

Bean 的作用域和生命周期

目录 一、 Bean 的作用域 1. 安装Lombok插件 1.1 Lombok 简介 1.2 Lombok 安装 2. 创建一个 User 对象&#xff0c;然后将 User 对象 存储到 Spring 容器中 2.1 创建User 对象 2.2 将User 对象存储到 Spring 中 2.3 修改 User 对象中的属性&#xff0c;然后看结果&#…

概率论的学习和整理--番外12:2个概率选择比较的题目

目录 1 题目 2 结论 3 算法 3.1 错误算法 3.2 算法1&#xff0c;用期望的方式解方式 3.3 算法2&#xff0c;直接解方程 3.4 算法3&#xff0c;用递归--等比数列求和来算 4 上述比较的意义-回到问题本身 1 题目 题目 3个A合成1个B 方案1&#xff1a;1/4 几率返还一个A…

【ONE·Linux || 地址空间与进程控制(二)】

总言 进程地址空间和进程控制相关介绍。 文章目录 总言2、进程控制续2.3、进程等待2.3.1、为什么需要进程等待2.3.2、阻塞式等待2.3.2.1、使用wait2.3.2.2、使用waitpid2.3.2.3、参数status基本介绍 2.3.3、一些细节与问题</font>2.3.3.1、进程独立性说明2.3.3.1、父进程…

【网络安全带你练爬虫-100练】第13练:文件的创建、写入

目录 目标&#xff1a;将数据写入到文件中 网络安全O 目标&#xff1a;将数据写入到文件中 开干 &#xff08;始于颜值&#xff09;打开一个&#xff0c;没有就会创建 with open(data.csv, modew, newline) as file: &#xff08;忠于才华&#xff09;开始写入数据 writer cs…

LinuxC/C++开发工具——make/makefile和gdb

linux开发工具 前言Linux项目自动化构建工具&#xff08;make/makefile&#xff09;makefile文件的组成如何使用make.PHONY关键字 项目清理 gdb调试器背景使用list&#xff08;l&#xff09;调试命令break&#xff08;b&#xff09;&#xff1a;设置断点info break&#xff1a;…

[STL] vector 模拟实现详解

目录 一&#xff0c;准备工作 二&#xff0c;push_back 1&#xff0c; 关于引用 2. 参数const 的修饰 补充 三&#xff0c;迭代器实现 四&#xff0c;Pop_back 五&#xff0c;insert 1. 补充——迭代器失效 六&#xff0c; erase 七&#xff0c;构造函数 1. 迭代…

合并当天Log

1.原因&#xff0c; 我们程序运行Log很多时&#xff0c;如果因为要写Log话费很多时间&#xff0c;这时我们可以把log保存按照更短的时间保存&#xff0c;比如一分钟一个Log,一个小时一个log&#xff0c;。。。。但我们查看Log时很麻烦&#xff0c;需要把分散的Log合并起来的工…

移动端深度学习部署:TFlite

1.TFlite介绍 &#xff08;1&#xff09;TFlite概念 tflite是谷歌自己的一个轻量级推理库。主要用于移动端。 tflite使用的思路主要是从预训练的模型转换为tflite模型文件&#xff0c;拿到移动端部署。 tflite的源模型可以来自tensorflow的saved model或者frozen model,也可…