开源ChatGPT平替项目汇总

开源ChatGPT替代模型项目整理
寻找那些ChatGPT/GPT4开源“平替”们

原版用的是GPT-3.5+OpenAI自己的数据集,目前开源社区搞得最多的还是LLaMA+Alpaca这套方案,但是其他不一样的方案也是百花齐放,这里简单列一下

名称 点赞数 支持语言 简介+基础 LLM 训练方法/数据集 备注
gpt4all 33.7k 基于GPT-J和LLaMa训练开源的大语言模型的Demo, data, and code,类似llama.cpp、WebLLM 等作为 LLM 离线部署加速方案 自定义数据集(800k) 数据集由GPT-3.5生成
Alpaca(羊驼) 20.8k en 斯坦福的羊驼模型(羊驼),基于 LLaMA 7B 微调,使用 Self-Instruct 自举生成 52K 条指令数据 Alpaca finetune 参考 alpaca-lora
alpaca-lora 10.2k en Instruct-tune LLaMA on consumer hardware 利用 LoRA 复现 Alpaca 结果 Alpaca
Chinese-LLaMA-Alpaca 6.1k en, zh 提供中文LLaMA模型和指令精调的Alpaca大模型,在原版LLaMA的基础上扩充了中文词表并使用了中文数据进行二次预训练 Alpaca
ColossalChat 28.2k 完整RLHF流程0门槛克隆 LLaMA、OPT、BLOOM 中文解读
Open-Assistant 24.1k OpenAssistant是一个基于聊天的助手,可以理解任务,可以与第三方系统交互,并动态检索信息。
DeepSpeed Chat 20.5k 微软开源的一键式RLHF训练,训练速度提升15倍以上,130亿参数的类ChatGPT模型,只需1.25小时就能完成训练。 中文解读
ChatGLM 18.1k en, zh 清华大学出品,支持中英双语的对话语言模型 自定义数据集(1T) ChatGLM-Tuning
Vicuna(小羊驼) 14.2k en 利用‘用户共享对话’微调 LLaMA,Vicuna-13B 达到了 ChatGPT 90%以上的质量,同时在超过 90% 的情况下优于 LLaMA 和 Stanford Alpaca 等其他模型。 sharegpt.com 最近已经禁止抓取,这意味着该数据源不再可用,Vicuna 难以复现。 shareGPT(70k) finetune 参考 Chinese-Vicuna
MiniGPT-4🔥 13k 增强视觉语言理解(识图)与先进的大型语言模型 1.识别图片,并且进行对话
stableLM🔥 10.9k en Stable Diffusion的初创公司Stability AI发布并开源该团队训练的大语言模型StableLM Pile 数据集
MOSS🔥 4k en, zh 国内首个类 ChatGPT 模型:复旦大学 MOSS,RTX 3090 显卡可运行
ChatLLaMA 7.8k en 初创公司 Nebuly AI 开源的 RLHF 版 LLaMA (ChatLLaMA),构建 ChatGPT 形式的服务
Dolly 2.0 7.8k en Dolly是Databricks发布的开源、遵循指令的 LLM,可用于商业目的 databricks-dolly-15k 中文解读
OpenChatKit 7.6k en 前OpenAI团队打造,OpenChatKit提供了一个强大的开源基础,可以为各种应用程序创建专门的和通用的聊天机器人。 OIG-43M
BELLE 4k zh 基于BLOOM和LLAMA,针对ChatGPT生成的中文数据微调的对话大模型 150万中文指令微调数据集 中文解读
LMFLOW 4.3k en, zh LMFlow 不是一个单一模型,而是支持很多模型的微调框架 自定义 中文解读
lit-llama 2.6k en Lightning-AI 基于nanoGPT的LLaMA语言模型的实现。支持量化,LoRA微调,预训练。 Alpaca

可用的开源基础 LLM,可以参考博客 A List of 1 Billion+ Parameter LLMs

首先,我们先简单过一下 Meta 开源的 LLAMA (Large Language Model Meta AI)。Meta 表示,LLaMA 13B 的性能超过了 GPT-3,而 LLaMA 65B 和其他领先的模型相当;LLaMA 更小、更高性能的模型,可能是目前公开模型权重中效果最好的语言模型。但是中文支持效果比较差。我们尝试了社区精简版 LLaMA:https://github.com/juncongmoo/pyllama,他在8GB显存就能够跑起来,具体效果如下:

社区精简版 pyLLaMA 使用效果一览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
pip install pyllama -U
pip install gradio

# 模型下载
# 1、通过pyllama下载
python -m llama.download --model_size 7B --folder /tmp/pyllama_data
python -m llama.download --model_size 7B,30B --folder /tmp/pyllama_data
# 2、直接wget下载
https://ipfs.io/ipfs/Qmb9y5GCkTG7ZzbBWMu2BXwMkzyCKcUjtEKPpgdZ7GEFKm/

# 配置环境变量
export CKPT_DIR=/data/voiceprint2/llama/llama-dl-main/7B
export TOKENIZER_PATH=/data/voiceprint2/llama/llama-dl-main/tokenizer.model

# 运行测试
git clone https://github.com/juncongmoo/pyllama.git
cd pyllama
python inference.py --ckpt_dir $CKPT_DIR --tokenizer_path $TOKENIZER_PATH

# To load KV cache in CPU, run export KV_CAHCHE_IN_GPU=0 in the shell.
# 调整max_seq_len并max_batch_size减少内存消耗以便能够在 GPU 中运行
# Quantize 7B model to 8-bit
python -m llama.llama_quant decapoda-research/llama-7b-hf c4 --wbits 8 --save pyllama-7B8b.pt

# 启动 gradio webui
cd apps/gradio
python webapp_single.py --ckpt_dir $CKPT_DIR --tokenizer_path $TOKENIZER_PATH

# 启动网络服务器
cd apps/flask
python web_server_single.py --ckpt_dir $CKPT_DIR --tokenizer_path $TOKENIZER_PATH

Llama-7B 效果展示(显存占用约14GB):

使用评价:

  • 毕竟是小的模型,感觉回复的速度和质量都不尽如人意,比ChatGPT差很多
  • 回答中可能出现一些不相关的评论,明明是要求解题,却去做扩展续写的工作等等
  • 目前的7B模型~可能只能做一些最简单的对话工作….

其他平替方案里,我们挑几个简单介绍一下:

Alpaca 和 Chinese-LLaMA-Alpaca

Alpaca(羊驼)应该是目前最主流的做法,它基于 Meta 的 LLaMA 7B 模型进行指令微调。其基本原理是让 OpenAI 的 text-davinci-003 模型以 self-instruct 方式生成 52K 指令样本,以此来微调LLaMA,这个数据集本身还不是很干净导致Alpaca-lora的老哥们后来还给它清洗了一遍。

Alpaca精悍于:

  • ①直接嫖了Meta开源模型Llama-7B,在8个80GB A100上继续训练了3个小时;
  • ②直接嫖了ChatGPT生成可靠训练数据,无需人工标注;借鉴self-instruct的方式,利用chatgpt来批量的生成alignment的数据集,约52000个指令问答训练数据;如何让模型自举生成数据参考链接
  • ③实验效果与GPT-3.5相当。
  • Web Demo: https://crfm.stanford.edu/alpaca/

如果想自己尝试的话是推荐先用这个,比较稳妥。但是就以我自己测试下来的情况看,7B和13B的Alpaca在复杂问题的情况下效果距离gpt-3.5的api效果都还差很远,当然这并不意味着Alpaca上限就到这了,它用的数据集目前还是偏小,如果继续优化,还是有追上gpt-3.5的机会的,毕竟LlaMA论文里的测试结果是13B能单防gpt-3。

Chinese-LLaMA-Alpaca 开源了中文LLaMA模型和经过指令精调的Alpaca大模型。这些模型在原版LLaMA的基础上扩充了中文词表并使用了中文数据进行二次预训练,进一步提升了中文基础语义理解能力。同时,在中文LLaMA的基础上,本项目使用了中文指令数据进行指令精调,显著提升了模型对指令的理解和执行能力。但是效果一般…

alpaca-lora

alpaca-lora是斯坦福大学的另一个巨作,其使用LoRA(low-rank adaptation)技术复现了Alpaca的结果,用了一个更加低成本的方法,只在一块RTX 4090显卡上训练5个小时得到了一个Alpaca水平相当的模型。而且,该模型可以在树莓派上运行。在该项目中,其使用了Hugging Face的PEFT来实现廉价高效的微调。PEFT 是一个库(LoRA 是其支持的技术之一),可以让你使用各种基于 Transformer的语言模型并使用LoRA对其进行微调,从而使得在一般的硬件上廉价而有效地微调模型。该项目github地址是:

https://github.com/tloen/alpaca-lora

尽管 Alpaca和alpaca-lora取得了较大的提升,但其种子任务都是英语,缺乏对中文的支持。一方面除了以上提到Belle收集到了大量的中文语料,另一方面基于alpaca-lora等前人工作,来自华中师范大学等机构的三位个人开发者开源的中文语言模型骆驼 (Luotuo),单卡就能完成训练部署。目前该项目释放了两个模型 luotuo-lora-7b-0.1、luotuo-lora-7b-0.3,还有一个模型在计划中。其github地址是:

https://github.com/LC1332/Chinese-alpaca-lora

ChatLLaMA

ChatLLaMA 是一个完整的开源实现,能够基于预训练的 LLaMA(7B、13B、33B、65B)构建 ChatGPT 样式的服务。它内置了对 DeepSpeed ZERO 的支持,训练、微调和单 GPU 推理更快、成本更低。

1
2
3
4
5
6
7
8
9
10
11
12
# ChatLLaMA 使用指南
# the algorithmic implementation for RLHF training process of LLaMA

from chatllama.rlhf.trainer import RLTrainer
from chatllama.rlhf.config import Config

path = "path_to_config_file.yaml"
config = Config(path=path)
trainer = RLTrainer(config.trainer)
trainer.distillate()
trainer.train()
trainer.training_stats.plot()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# pip install chatllama-py
# download the llama model weights and tokenizer.

# 1 - YAML download
wget -O artifacts.zip https://nbllabartifacts.blob.core.windows.net/chatllama/artifacts.zip\?sp\=r\&st\=2023-03-08T14:53:24Z\&se\=2100-03-08T22:53:24Z\&spr\=https\&sv\=2021-06-08\&sr\=b\&sig\=jqr%2B2ZkR0SW9RjV0pDOdQ%2BDulLXLjbZ36vmNd4XxxyQ%3D
unzip artifacts.zip

# 2 - Dataset preparation
# download the actor_training_data and the rlhf_training_data:
python artifacts/download_dataset.py SHP --path ./datasets --number_of_samples 200
# create the reward_training_data using davinci-003 for synthetic data generation.
export OPENAI_API_KEY=YOUR_API_KEY
python artifacts/generate_rewards.py ./datasets/reward_training_data.json --model gpt-3.5-turbo//text-davinci-003

# 3 - Training

# Train the Reward Model
python artifacts/main.py artifacts/config/config.yaml --type REWARD
# Pre-Train the Actor Model
python artifacts/main.py artifacts/config/config.yaml --type ACTOR
# Training the Actor with reinforcement learning.
python artifacts/main.py artifacts/config/config.yaml --type RL

# Note that the path to the datasets and the training hyper-parameters of the training process are specified in the config.yaml file.

ChatGLM

ChatGLM是清华智谱AI开源的GLM系列的对话模型,支持中英两个语种,目前开源了其62亿参数量的模型 ChatGLM-6B。其继承了GLM之前的优势,在模型架构上进行了优化,从而使得部署和应用门槛变低,实现大模型在消费级显卡上的推理应用。目前训练代码未放出,还在内测阶段,内测申请网址:chatglm.cn

  • 6G 显卡使用 int4 量化、8G 显卡使用 int8 量化、12G及以上显卡使用 fp16 完整版;
  • 子涵在11机器上配了一套服务,可以screen -r yzhpython cli_demo.py体验;

    Dolly 2.0

    Dolly 1.0 在Alpaca的启发下,使用的是斯坦福大学 Alpaca 团队用 OpenAI API 创建的数据集,在GPT-J-6B上实现微调。但是,在 ChatGPT 的输出上训练的模型一直处于合法的灰色地带,知名指令遵循模型(Alpaca、Koala、GPT4All、Vicuna)都受到这种限制:禁止商业使用。

Dolly 2.0 是怎么诞生的?Dolly 2.0 是一个 120 亿参数的语言模型,它基于开源 EleutherAI pythia 模型系列,专门针对小型开源指令记录语料库进行了微调(databricks-dolly-15k),许可条款允许出于任何目的使用、修改和扩展,包括学术或商业应用。

「databricks-dolly-15k」数据集包含 15000 个高质量的人类生成的 prompt / 回复对,由 5000 多名 Databricks 员工在 2023 年 3 月和 4 月期间撰写,专门设计用于指令调优大型语言模型。这些训练记录自然、富有表现力,旨在代表广泛的行为,从头脑风暴、内容生成到信息提取和总结。

BELLE

belle是基于BLOOMZ、LLama优化后的模型,针对中文做了优化,模型调优仅使用由ChatGPT生产的数据(不包含任何其他数据)。项目包括:

  1. 数据开放:参考Stanford Alpaca 生成的中文数据集1M + 0.5M
  2. 基于BLOOMZ-7B1-mt优化后的模型:BELLE-7B-0.2M,BELLE-7B-0.6M,BELLE-7B-1M,BELLE-7B-2M
  3. 基于LLAMA优化后的模型:BELLE-LLAMA-7B-0.6M,BELLE-LLAMA-7B-2M
  4. 对以上模型进行量化后的轻量化模型,便于部署、推理。

该项目要求开发者仅将开源的代码、数据、模型及后续用此项目生成的衍生物用于研究目的,不得用于商业!

理论上BLOOM的多语言能力是要比LLaMA好一些的,不过我测BELLE的时候发现了一个比较搞笑的情况,我在测完一些其他case之后感觉还不错,但是我突发奇想把我测英文模型的一些case机翻过来喂给BELLE,结果BELLE就开始吐中英文混杂的句子了。当然这个问题可能也不是BELLE独有的,我还没在其他中文模型上测过。如果直接拿去应用的时候出这个问题还是挺要命的,后续可以跟进看看。

OpenChatKit

OpenChatKit由前OpenAI研究员所在的Together团队,以及LAION、Ontocord.ai团队共同打造。它的设计我觉得是很有希望的,用GPT-3的开源版本GPT-NoX-20B加上自己的数据集进行微调。同时,不同ChatGPT的强化学习,OpenChatKit采用一个60亿参数的审核模型,对不合适或者是有害的信息进行过滤,确保生成内容的安全和质量。证书是APACHE LICENSE 2.0, 真的成了直接就可以用,不受任何限制。

Vicuna和Chinese-Vicuna

斯坦福学者继推出alpaca后,联手CMU、UC伯克利等,推出一个全新模型 Vicuna-13B(俗称小羊驼、骆马),通过使用从 ShareGPT.com 收集的大约 70K 用户共享对话微调 LLaMA 基础模型创建的。

测试过程使用GPT-4作为评判标准,与 Alpaca 相比,Vicuna 能够生成更详细、结构更合理的答案(参见下面的示例),并且在超过90%的情况下实现了与ChatGPT相匹敌的能力。

UC伯克利LMSys org近期又发布了70亿参数的 Vicuna-7B,不仅体积小、效率高、能力强,而且只需两行命令就能在M1/M2芯片的Mac上运行,还能开启GPU加速!
github开源地址为:https://github.com/lm-sys/FastChat/

另一个中文版的进行了开源Chinese-Vicuna ,github地址为:
https://github.com/Facico/Chinese-Vicuna

gpt4all

基于 LLaMa 的 LLM 助手,提供训练代码、数据和演示,训练一个自己的 AI 助手。

LMFLOW

低成本效仿ChatGPT,LMFlow 项目由香港科技大学统计和机器学习实验室团队发起,致力于让使用者针对专有领域支持个性化训练。例如LLaMA-7B,一张3090耗时 5 个小时即可完成训练,成本大幅降低。
该项目还开放了网页端即刻体验问答服务 (lmflow.com)。LMFlow的出现和开源使得普通资源可以训练问答、陪伴、写作、翻译、专家领域咨询等各种任务。目前很多研究者们正在尝试用该项目训练650亿甚至更高参数量的大模型。

Lit-LLaMA

Lightning-AI 基于nanoGPT的LLaMA语言模型的实现。支持量化,LoRA微调,预训练。
目前还处于概念阶段,该项目的想法是把LLaMA的设计用自己的代码重写一边,这样绕过它的代码证书,再训练出一个完全开源版本的LLaMA。我觉得这个思路不错,但是是骡子是马还是得真的结果搞出来以后测了才知道

StackLLaMA

随着斯坦福Alpaca的出现,一大堆基于LLama的羊驼家族和扩展动物家族开始出现,终于Hugging Face研究人员近期发布了一篇博客StackLLaMA:用RLHF训练LLaMA的实践指南。同时也发布了一个70亿参数的模型——StackLLaMA。这是一个通过人类反馈强化学习在LLaMA-7B微调而来的模型。详细见其博客地址:
https://huggingface.co/blog/stackllama

关于证书

这里不得不提一下Llama的证书,分代码和模型权重两部分,它的代码是GPL 3.0的,但是权重另是一个特殊的证书,任何人不得随意发布,只允许学术用途。这意味着什么呢?直接拿Llama权重来商用肯定是不行,而且拿出来给别人下载都是不行的,已经有git上的仓库吃了DMCA被删掉了。如果使用它的代码复现,根据GPL 3.0,所有后续的项目也必须使用GPL 3.0。这一点对于很多公司乃至个人来说都是不太好接受的。这也是我为什么比较期待基于其他基干模型的方案,因为不设法绕开LLaMA(或者重新训一个开源出来),很容易后续做一些事情的时候被卡住。

说一点闲话,有的朋友可能说,那META也是秉承了CloseAI,不是,OpenAI的思想,怕别人用这个模型来干坏事才加了限制。但是仔细想一想,真的拿这玩意来干坏事的人,根本就不在乎你用啥证书,他搞到你的权重直接用就完事了。卡的还是想正经做点项目的人,说到这个我前两天看到一个好玩的,point-alpaca这个项目:

https://github.com/pointnetwork/point-alpaca

它是干什么的呢,它把整个LLaMA用alpaca的数据集训练了3个epoch(对此是否真的比lora更有效我持保留态度,我也没试)。比较好玩的是它说LLaMA的权重是META的,我们不能随便发布,那我怎么发布我的模型呢?于是它说,那我不发布整个模型,我发布我训出来的模型权重,和原版LLaMA的差,不就得了吗?

用户拿到原版LLaMA,加上我们这个差,就可以获得我们训过的版本啦(瞧这费劲的)

一些想法

其实就算是目前我觉得还是有很多事情需要社区加大力度,比方说

  • 规范针对类InstructGPT的评估标准,打出GPT-3.5和GPT-4的分数,量化开源模型的效果(实在没有人力可以干脆让GPT-4出分),目前很多开源模型只是给出模型对一些答案的示例,这样很难分辨实际效果
  • 整理目前开源的数据集,不同项目间互通有无,目前看改善数据集还是能有一些提升
  • 重炼/超越LLaMA,整出开源版。我相信这个其实已经有人在做了,我希望大佬能够加大力度。

其实需要人做的有价值的事情还有很多。


开源ChatGPT平替项目汇总
http://example.com/2023/04/23/开源ChatGPT平替项目汇总/
作者
Ning Shixian
发布于
2023年4月23日
许可协议