langchain-ChatGLM调研

https://github.com/imClumsyPanda/langchain-ChatGLM

 

1. 确定显卡规格

lspci | grep -i nvidia

00:07.0 3D controller: NVIDIA Corporation GV100GL [Tesla V100 SXM2 32GB] (rev a1)

2. 确定显卡运行状况

nvidia-smi

如果有问题,需要先装显卡的驱动

apt search nvidia-driver

根据显卡规格,找到驱动型号,比如是510

apt install  nvidia-driver-510

 

3. 安装依赖

# 拉取仓库
$ git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git

# 进入目录
$ cd langchain-ChatGLM

# 安装依赖
$ pip install -r requirements.txt

 

4. 运行

python cli_demo.py

会自动加载模型文件

主体的流程参考下图,结合本地知识库的,文本生成方案

 代码的逻辑实现上其实很简单,

 

初始化LLM

分两步,加载llm模型和embedding模型

embedding模型是用来将文本转化为词向量的,这里dict中是ernie和text2vec两种

load_model

这里主要使用huggingface的transform模块进行模型加载,transform模块参考,https://zhuanlan.zhihu.com/p/558570740?utm_id=0

huggingface的这个模块封装的非常好,会自动的根据模型名称去自动下载和加载模型,还能自动选择配套的tokenizer或config

这里供选择的LLM,

"chatyuan": "ClueAI/ChatYuan-large-v2",
"chatglm-6b-int4-qe": "THUDM/chatglm-6b-int4-qe",
"chatglm-6b-int4": "THUDM/chatglm-6b-int4",
"chatglm-6b-int8": "THUDM/chatglm-6b-int8",
"chatglm-6b": "THUDM/chatglm-6b",
chatglm的变体主要是量化版,即参数从浮点变成int,牺牲精度降低计算量,可以用cpu跑

Peft是huggingface提供用于Fineture的模块

lora,p-tuning,ChartGLM采用的微调方式

参考,

https://zhuanlan.zhihu.com/p/627642632,大模型微调总结

https://zhuanlan.zhihu.com/p/583022692,P-Tuning】 一种自动学习 prompt pattern 的方法

https://github.com/huggingface/peft huggingface的peft库,包含prefix-tuning,prompt tuning,p-tuning,lora等

https://zhuanlan.zhihu.com/p/625468667, ChatGLM 微调实战(附源码)

 

初始化向量库

用的是Faiss,传入embeddings模型

直接把本地知识库的文本加入就可

 

QA

步骤如下,

在生成prompt的时候,使用如下模板

"""已知信息:
{context}
根据上述已知信息,简洁和专业的来回答用户的问题。如果无法从中得到答案,请说 “根据已知信息无法回答该问题” 或 “没有提供足够的相关信息”,不允许在答案中添加编造成分,答案请使用中文。 问题是:{question}"""

 

posted on 2023-05-15 14:24  fxjwind  阅读(823)  评论(0编辑  收藏  举报