llama2+localGPT打造纯私有知识助手
通过部署llama2系列,可以构建本地私有的知识小助手
用来输出一写周报、月报,甚至辅助数据分析都可以(想想都很轻松)
想要大模型支持特定的数据集,就需要进行专业的fine-turing
但是fine-turing工作,是需要一系列的数据工程,向量化等工作,不太便捷
PromtEngineer/localGPT 把这些工作就包装好了,我们可以直接部署使用,甚至也可以跟本地的UI工具做一个集成
localGPT
https://github.com/PromtEngineer/localGPT
localGPT支持很多种本地环境部署方式cuda、cpu等(没有NVIDIA也能跑)
大致工作原理,localGPT会先通过对本地的文件进行“向量”等处理(ingetst.py),会放到本地的一个向量数据库中(sqlite DB)
然后通过运行run_localGPT.py启动fine-turing过程
部署需要python3.0环境
conda create -n localGPT python=3.10.0
如果你本地有GPU,还需要安装一个依赖(不太好装,看你会不会遇到问题)
clone下来代码,看下目录里的constants.py文件
MODEL_ID = "TheBloke/Llama-2-7b-Chat-GGUF"
MODEL_BASENAME = "llama-2-7b-chat.Q4_K_M.gguf"
注意如果本地运行的是GPU,就要找对应GPU版本的模型
拉取llama2 模型
(如果第一次使用 )先在huggingface 注册自己的token,用来拉取模型使用(https://huggingface.co/settings/tokens)
然后安装 huggingface-hub(重点:注意在windows shell工具登录的时候,不要用键盘复制粘贴,一定要用鼠标右键paste)
pip3 install huggingface-hub>=0.17.1
模型提供了很多变体,可以用来在不同的环境下使用
https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF
https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/tree/main
如果是第一次下载模型会需要点时间,大概5G左右
第一次使用还需要在模型首页完成申请授权
demo工作报告
由于localGPT是基于本地文档进行模型微调的,所以我们需要将数据放入文档中SOURCE_DOCUMENTS目录(这个工作也可以自动化)
假设模拟一家餐厅的每天的数据,然后形成日报信息,每天灌给他
然后输出一周的周报(我们用GPT模拟生成)
将文档放到SOURCE_DOCUMENTS目录下
然后运行 ingest.py 脚本,记得--device_type参数要根据自己的机器情况选择(我本地是NVIDIA卡)
python ingest.py --device_type cuda
会输出如下信息
python ingest.py --device_type cuda
2024-03-31 14:07:29,899 - INFO - ingest.py:147 - Loading documents from D:\localGPT-main\localGPT-main/SOURCE_DOCUMENTS
Importing: ABC餐厅本周数据.pdf
D:\localGPT-main\localGPT-main/SOURCE_DOCUMENTS\ABC餐厅本周数据.pdf loaded.
2024-03-31 14:07:38,279 - INFO - ingest.py:156 - Loaded 1 documents from D:\localGPT-main\localGPT-main/SOURCE_DOCUMENTS
2024-03-31 14:07:38,284 - INFO - ingest.py:157 - Split into 2 chunks of text
2024-03-31 14:07:39,104 - INFO - SentenceTransformer.py:66 - Load pretrained SentenceTransformer: hkunlp/instructor-large
load INSTRUCTOR_Transformer
max_seq_length 512
2024-03-31 14:07:40,384 - INFO - ingest.py:168 - Loaded embeddings from hkunlp/instructor-large
可以大致看到一些有用的信息,SentenceTransformer是一个强大的微调框架(https://www.sbert.net/,https://huggingface.co/hkunlp/instructor-large)等
ingest顺利完成之后,当前的文本就已经形成向量进入到向量DB中了
我们开始进行正式微调程序
python run_localGPT.py --device_type cuda
(如果你本地报错ValueError: check_hostname requires server_hostname,记得关闭kx上网)
看到 “Enter a query:” 应该是顺利成功了
我们问下 ”3月27日 3月28日 3月29日 3月30 3月31日 销售额分别多少“
看上去没啥问题(llama是英文的,如果需要跟本地工具集合,接一些翻译库就行了)
这个只是一个demo,如果要系统严谨的输出,还是需要在数据格式、数据组织、prompt工程上好好打磨的