赞
踩
看到
【【官方教程】ChatGLM-6B 微调:P-Tuning,LoRA,Full parameter】 【精准空降到 15:27】 https://www.bilibili.com/video/BV1fd4y1Z7Y5/?share_source=copy_web&vd_source=aa8c13cff97f0454ee41e1f609a655f1&t=927
记得看pdf
https://pan.baidu.com/s/1CKS5yBz6-GN_J7UB_wxguw?pwd=g26m
github
https://github.com/THUDM/ChatGLM-6B
参考资料
https://blog.csdn.net/v_JULY_v/article/details/129880836
/2
https://colab.research.google.com/drive/1N2ynqFbFSqKMcfQrofshcrkJgIfXMruR#scrollTo=Ae7KXXUsRJOv
解决内存和显存不足
https://www.cnblogs.com/bruceleely/p/17348782.html
下载这个容器 要登陆才可以下载
image:nvidia-pytorch:22.08-py3
Change your pip source
pip config set global.extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple
# Writing to /opt/conda/pip.conf
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# Writing to /opt/conda/pip.conf
pip config set global.trusted-host https://pypi.tuna.tsinghua.edu.cn/simple
# Writing to /opt/conda/pip.conf
1直接 git clone huggingface上的链接下载。比较慢,并且会不显示正在下载最后一个,通过bwm-ng显示下载进程,卡的要死
2清华云盘下载
一个一个下载。
通过工具下载
git clone git@github.com:chenyifanthu/THU-Cloud-Downloader.git
cd THU-Cloud-Downloader
pip install argparse requests tqdmpython main.py \
--link https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/ \
--save ../chatglm-6b/
下载项目
下载环境
自己安装适合的torch版本,不要让txt下载
P-tuning int4 -8G
用下面docker这image 要换源,因为他默认的会很慢
float32 可以表示的数值范围是 10 的负 38 次方到正 38 次方。
float16 可以表示的数值范围是 10 的负 8 次方到正 4 次方。用他会快一倍
更新的梯度在10的负27次方,影响就会非常的小,但是在10-27到10的-8的精度。
权重,adam的一阶梯度,二阶梯度都用32表示。
Dynamic loss scaling 技术会把loss变大乘以一个常数因子,比如 -16,变成-15
import numpy as np # 定义初始参数 x = 3.0 # 定义学习率和动量参数 learning_rate = 0.1 beta1 = 0.9 beta2 = 0.999 epsilon = 1e-8 # 定义一阶和二阶矩估计的初始值 m = 0 v = 0 # 定义损失函数 def loss_fn(x): return x ** 2 # 进行优化 for _ in range(10): # 计算梯度 gradient = 2 * x # 更新一阶和二阶矩估计 m = beta1 * m + (1 - beta1) * gradient v = beta2 * v + (1 - beta2) * (gradient ** 2) # 校正一阶和二阶矩估计的偏差 m_hat = m / (1 - beta1) v_hat = v / (1 - beta2) # 更新参数 x -= learning_rate * m_hat / (np.sqrt(v_hat) + epsilon) # 打印参数值 print(x)
DP多卡训练,每一个卡单独反向传播,然后最后通信取平均值,在更新
MP
训练时都是用Float 32精度来训练的,但是它占的内存比较大,有时候还没用到这么精细,就很浪费。所以会考虑用用float16,会快一倍但是全都用,进度就会下降很多。梯度小于10*-27次方。对训练没影响,但是10*-27到10的-8次方又有影响。所以用混合精度
记得看readme,README.md
安装依赖
在chatGLM项目里面的ptuning文件里的,train.sh,里面修改配置,然后运行他
参数解析
说明在里面在ChatGLM-6B/ptuning/README.md里面
在chatGLM项目里面的ptuning文件里的这个文件里面写了ds_train_finetune.sh。
运行他就可以
要用4张卡的58G显存
https://cloud.tencent.com/developer/article/2276508
下载,里面有lora微调chatGLM代码
https://github.com/yuanzhoulvpi2017/zero_nlp,
在这里面
zero_nlp/simple_thu_chatglm6b/code02_训练模型全部流程.ipynb
然后改里面的代码,主要是数据加载方面的。
Lora微调
②Lora:技术原理简单,但真有奇效,需要注意rank大小的设置,是根据业务领域来的,领域垂直性越强,就要设置的越大,比较有意思的就是数据,看起来最没技术含量的事情,大家不愿意做,但其实是最难的,数据收集存在诸多问题,数据少且封闭,缺乏标注,垂直领域往往对结果要求很高。
NLP Metrics Made Simple: The BLEU Score
https://towardsdatascience.com/nlp-metrics-made-simple-the-bleu-score-b06b14fbdbc1
WebGLM: Towards An Efficient Web-Enhanced Question Answering System with Human Preferences
https://arxiv.org/pdf/2306.07906.pdf
中文介绍
https://github.com/THUDM/WebGLM/blob/main/README_zh.md
问题
解释一下矢量,解释一下万有引力,解释一下摩擦力,解释一下直线运动,刚体运动的分类,解释一下机械波,热力学第一定律
github
https://github.com/imClumsyPanda/langchain-ChatGLM
参考
https://blog.csdn.net/v_JULY_v/article/details/129880836
LangChain是一个用于开发由语言模型驱动的应用程序的框架。
主要功能:
调用语言模型
将不同数据源接入到语言 模型的交互中
允许语言模型与运行环境交互
●Modules: 支持的模型类型和集成。
●Prompt: 提示词管理、优化和序列化,支持各种自定义模版。
●Memory: 内存是指在链/代理调用之间持续存在的状态。
Indexes:当语言模型与特定于应用程序的数据相结合时,会变得更加强大-此模块包含用于
加载、查询和更新外部数据的接口和集成。
●Chain: 链是结构化的调用序列(对LLM或其他实用程序)。
Agents:代理是一个链,其中LL M在给定高级指令和一-组工具的情况下,反复决定操作,执
行操作并观察结果,直到高级指令完成。
●Callbacks: 回调允许您记录和流式传输任何链的中间步骤,从而轻松观察、调试和评估应用
程序的内部。
LangChain-ChatGLM项目简介
LangChain- -ChatGLM是一个基于ChatGLM等大语言模型的本地知识库问答实现。
项目特点
LangChain主要是适用用于openai等API,并且对英文比较友好,我们对其根据chatGLM优化
●依托 ChatGLM等开源模型实现,可离线部署
●基于 langchain实现,可快速实现接入 多种数据源
●在分句、 文档读取等方面,针对中文使用场景优化
支持pdf、txt、 md、docx等文件类型接入,具备命令行demo、webui 和vue前端。
项目结构.
models: Im的接口类与实现类,针对开源模型提供流式输出支持(原来是不支持的)。
loader: 文档加载器的实现类(优化了对中文的OCR)。
textsplitter:文本切分的实现类。
chains: 工作链路实现,如chains/local doc .qa 实现了基于本地文档的问答实现。
content: 用于存储上传的原始文件。
vector_ store: 用于存储向量库文件,即本地知识库本体(知识库的向量库)。
configs:配置文件存储。
Vector searech如果是标题的话,会把他上下文一起选中
多个相关句子搜索,找到的比较的多话,会重新排列和去重
一步一步教你的视频
https://www.bilibili.com/video/BV11N411y7dT/?spm_id_from=333.337.search-card.all.click&vd_source=6d6126fdf98a0a7f2e284aa4d2066198
依据
https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui
官方群里的教程
langchain-ChatGLM, 小白入门
简单的视频教程
https://www.bilibili.com/video/BV1Ah4y1d79a/?spm_id_from=333.337.search-card.all.click&vd_source=6d6126fdf98a0a7f2e284aa4d2066198
根据github上的来
要下载两个权重,语言大模型和编码模型text2vec-base,chatglm-6b
根据github 里面说名明从huggingface里面下载
自己的服务器电脑上很难下载(系统如果没有翻墙的话),通过colab上下载下来吧
可以从国内直接下载,别人复制的
https://openi.pcl.ac.cn/Learning-Develop-Union/LangChain-ChatGLM-Webui/datasets?page=2
直接在服务器上面下载
Wget -O name 'https://s3.openi.org.cn/opendata/attachment/0/c/0cebbcbc-5e41-4826-9052-718b601790d9?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=1fa9e58b6899afd26dd3%2F20230630%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230630T145020Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3D%22text2vec-base-chinese.zip%22&X-Amz-Signature=523c6e6b24a82b1fcd030286f1298bd04b9642e552999b60094d07e8afe8fa58'
在jumpserver.deepblueai.com服务器里面那就下载到/data里面
记得参考 https://github.com/imClumsyPanda/langchain-ChatGLM/blob/master/docs/FAQ.md 或者issues
from configs.model_config import NLTK_DATA_PATH
nltk.data.path = [NLTK_DATA_PATH] + nltk.data.path
在langchain-ChatGLM/configs/model_config.py里面修改
text2vec-base,chatglm-6b 这两个是必要的,下载后,对应的路径要改成自己下载后的路径
#启动模型 from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer. from_ pretrained("THUDM/chatglm-6b", trust_ remote_ code =True) model = AutoModel. from_ pret rained( "THUDM/chatglm-6b", trust_ remote_ code=True) . half(). cuda() chatglm = model.eval() from langchain. document_ loaders import Unst ructuredF ileLoader from langchain. text_ splitter import CharacterTextSplitter from langcha in. embeddings . openai import OpenAIEmbeddings from langchain. vectorstores import FAISS #定义文件路径 filepath = "test. txt" #加载文件 loader = UnstructuredF ileLoader( filepath) docs = loader. load() #文本分割 一段字符chunk_size=500大小,200重复 text_ splitter = CharacterTextSplitter(chunk_ size=500, chunk_ overlap=200) docs = text_ splitter.split_ text(docs) #构建向量库 使用 OpenAI的模型,要他的key embeddings = OpenAIEmbeddings() vector_ store = FAISS. from_ documents(docs , embeddings) #根据提问匹配上下文 query = "Langchain 能够接入哪些数据类型? " docs = vector_ store.similarity_xsearch( query) context = [doc, page_ content for doc in docs] # 149ji1 Prompt prompt = f"Bẞfta: n(contextnBf n(query)" # llm生成回答 chatglm.chat(tokenizer, prompt, history=[])
已经启动的
财务
https://74751b9051e05d9334.gradio.live
物理的
https://cfa4ae934de998f390.gradio.live
量化4模型启动
原本
CUDA_VISIBLE_DEVICES=0 python webui.py --model chatglm-6b-int4 --no-remote-model
我的
CUDA_VISIBLE_DEVICES=0 python webui-caiwu.py --model chatglm-6b-int4 --no-remote-model
CUDA_VISIBLE_DEVICES 指定第几张显卡
–model 模型名称,这里是量化int4模型
–no-remote-model 不从远程加载模型
https://github.com/gradio-app/gradio/issues/884
详细参数配置看
https://github.com/imClumsyPanda/langchain-ChatGLM/blob/master/docs/StartOption.md
webui.py 里面设置为 share=True,
1 运行 python webui.py --model chatglm-6b-int4 --no-remote-model
WARNING 2023-06-28 11:03:40,657-1d: The dtype of attention mask (torch.int64) is not bool
ERROR 2023-06-28 11:03:40,661-1d: Library cublasLt is not initialized
解决
cuda版本太低了,更新一下,我是更新到11.4,并且这个操作还会影响到chatglm模型的使用。
2
raise EnvironmentError(
OSError: Can’t load the configuration of ’ model/chatglm-6b-int4’. If you were trying to load it from ‘https://huggingface.co/models’, make sure you don’t have a local directory with the same name. Otherwise, make sure ’ model/chatglm-6b-int4’ is the correct path to a directory containing a config.json file
解决
记得看人家说明用绝对路径
3 debug时指定使用某张显卡失效
解决
配置launch.json文件,在configurations中填入以下内容,最后按F5调试即可
"program": "${workspaceFolder}/<your-python-file.py>",
"env": {"CUDA_VISIBLE_DEVICES": "3"} # 指定编号为3的显卡
启动成功
INFO 2023-06-29 15:52:23,800-1d: Load pretrained SentenceTransformer: /data/wbe/langchain-ChatGLM-master/text2vec-base-chines
WARNING 2023-06-29 15:52:25,232-1d: The dtype of attention mask (torch.int64) is not bool
{‘answer’: ‘你好
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。