真○本地部署chatGPT

3,120 阅读3分钟

背景

在 Stanford Alpaca 开源之后,其实出现了很多可以本地化部署的工程,和以往挂羊头卖狗肉的那种本地做转发,还需要openAI key 的不同,确实是本地化,可以断网运行的那种。

着急上手的话直接看 3

1. Stanford Alpaca

官方地址: github.com/tatsu-lab/s… 可惜的是,由于官方demo已经下线,所以体验不到,只能看文档了解下。

简单的说就是,斯坦福大学根据早期的开源模型,进行了学术上的训练。效果按官方的说法,和chatGPT的text-davinci-003 基本一致 ,但有个LLama禁止商业的协议,所以官方不提供模型下载,想要他们训练哈ode模型,得申请。入口

反正填了也未必能申请下来,所以这个只做背景了解即可

2. Alpaca-Lora

官方地址: github.com/tloen/alpac…

大概介绍下, 官方的说法, Alpaca-Lora 是 Stanford Alpaca 的平替,可以直接访问LLama-7B模型,至少,github上很多开源项目都是基于这个工程,国内的某些宣称自研的和这个看起来。。。懂的都懂。

由于cpu没打到要求,所以没跑起来。

3. Chinese-LLaMA-Alpaca

官方地址: github.com/ymcui/Chine…

iShot_2023-04-04_16.16.02.gif

效果如上图所示, 官方文档的内容其实不少,大概意思就是,他基于alpaca进行了中文的LLama模型训练,因为要遵守 LLama禁止商业 的协议,所以没办法直接提供训练好的模型。所以讲述了要怎么进行训练,欢迎加入。

步骤

步骤官方也写了,甚至还有执行笔记,由于内容较多,以下操作为总结内容

首先,创建个文件夹,比如叫 AI, 后面所有操作的根目录就是这个AI

  1. 安装依赖

  • 环境: python 3.10
  • 设备: mac m1
pip install git+https://github.com/huggingface/transformers.git
pip install peft
pip install sentencepiece
  1. 获取工程代码

git clone https://github.com/ymcui/Chinese-LLaMA-Alpaca
git clone https://github.com/ggerganov/llama.cpp
  1. 合并模型

基础模型: decapoda-research/llama-7b-hf

LoRa模型:ziqingyang/chinese-alpaca-lora-7b

这部分会很慢, 大概十几分钟

python ./Chinese-LLaMA-Alpaca/scripts/merge_llama_with_chinese_lora.py \
    --base_model 'decapoda-research/llama-7b-hf' \
    --lora_model 'ziqingyang/chinese-alpaca-lora-7b' \
    --output_dir 7B-combined

执行完毕后,根目录会多出个 7B-combined 的目录,为了防止后面误操作删了,这个目录下文件最好复制备份一份

  1. 量化模型

在当前根目录下执行

cd llama.cpp && make
  1. 模型转换为ggml格式(FP16)

继续第4步在 llama.cpp 目录下

mkdir zh-models && mv ../7B-combined zh-models/7B
// 根目录执行
cd llama.cpp/zh-models && wget https://huggingface.co/ziqingyang/chinese-alpaca-lora-7b/resolve/main/tokenizer.model

// 跟目录执行,  确保执行前,7B-combined 的部分已经备份过
cd llama.cpp && python convert-pth-to-ggml.py zh-models/7B/ 1
  1. 将FP16模型量化为4-bit

cd llama.cpp && ./quantize ./zh-models/7B/ggml-model-f16.bin ./zh-models/7B/ggml-model-q4_0.bin 2
  1. 测试量化模型解码

cd llama.cpp && ./main -m ./zh-models/7B/ggml-model-q4_0.bin --color -f ./prompts/alpaca.txt -p "介绍一下北京的名胜古迹" -n 512
  1. 启动服务

./main -m zh-models/7B/ggml-model-q4_0.bin --color -f ./prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.3  

参数含义

-c 控制上下文的长度,值越大越能参考更长的对话历史
-ins 启动类ChatGPT的对话交流模式
-n 控制回复生成的最大长度
--repeat_penalty 控制生成回复中对重复文本的惩罚力度
--temp 温度系数,值越低回复的随机性越小,反之越大
--top_p, top_k 控制采样的相关参数

以上,全部执行下来大概率是没有报错,如果有报错,大概率都是某些依赖没有安装。

由于模型比较小,所以大部分回答显得非常,不聪明。所以官方也给了个方法,大概就是通过想chatGPT提问, 然后用问题和答案来进行训练,只要问的够多,那么这个属于你自己的AI 就会变得从聪明起来。

至于国外一开源,国内就那啥的。用的是不是这一套,自行判断