Project Icon

openchat

采用混合质量数据训练的高性能开源语言模型

OpenChat是一个创新的开源语言模型库,采用C-RLFT策略从混合质量数据中学习。该模型在7B规模下实现了与ChatGPT相当的性能,无需偏好标签。项目致力于开发高性能、商用级的开源大语言模型,并持续进步。OpenChat支持多GPU部署,提供兼容OpenAI的API服务,适用于编码、聊天等多种任务。

OpenChat: 利用混合质量数据推进开源语言模型

💻在线演示 | 🤗Huggingface | 📃论文 | 💭Discord

  • OpenChat 是一个创新的开源语言模型库,使用C-RLFT进行微调 - 这是一种受离线强化学习启发的策略。
  • 我们的模型从混合质量数据中学习,无需偏好标签,即使是7B模型也能在**消费级GPU(如RTX 3090)**上运行,达到与ChatGPT相当的卓越性能。
  • 尽管我们采用简单的方法,但我们致力于开发高性能、具有商业可行性的开源大型语言模型,并持续朝着这一愿景取得重大进展。

DOI

✨ 新闻

阅读更多

🏷️ 基准测试 - OpenChat 3.6

复现基准测试

注意:请在此仓库的根目录运行以下命令。

python -m ochat.evaluation.run_eval --condition "GPT4 Correct" --model openchat/openchat-3.6-8b-20240522 --eval_sets fs_cothub/mmlu fs_cothub/gsm8k fs_cothub/math
python -m ochat.evaluation.run_eval --condition "GPT4" --model openchat/openchat-3.6-8b-20240522 --eval_sets zs/gpqa

HumanEval使用官方的EvalPlus仓库运行。

🏷️ 基准测试 - OpenChat 3.5

模型参数量平均分MT-BenchHumanEvalBBH MCAGIEvalTruthfulQAMMLUGSM8KBBH CoT
OpenChat-3.5-01067B64.57.871.351.549.161.065.877.462.2
ChatGPT (3月)*???B61.57.9448.147.647.157.767.374.970.1
OpenHermes 2.57B59.37.5448.249.446.557.563.873.559.9
OpenOrca Mistral7B52.76.8638.449.442.945.959.359.158.1
Zephyr-β^7B34.67.3422.040.639.040.839.85.116.0
Mistral7B-6.8430.539.038.0-60.152.2-
开源SOTA**13B-70B61.47.7173.249.741.762.363.782.341.4
WizardLM 70BWizardCoder 34BOrca 13BOrca 13BPlatypus2 70BWizardLM 70BMetaMath 70BFlan-T5 11B

🔥 OpenChat-3.5-0106 (7B)现在在所有4个基准测试上都超过了Grok-0 (33B),并在平均分和3/4的基准测试上超过了Grok-1 (314B)。

许可证参数量平均分MMLUHumanEvalMATHGSM8k
OpenChat-3.5-0106Apache-2.07B61.065.871.329.377.4
Grok-0专有33B44.565.739.715.756.8
Grok-1专有314B55.87363.223.962.9
评估详情 *: ChatGPT (3月)的结果来自GPT-4技术报告、Chain-of-Thought Hub和我们的评估。

^: Zephyr-β经常无法遵循少样本CoT指令,可能是因为它只用聊天数据对齐,而没有在少样本数据上训练。

**: Mistral和开源SOTA的结果取自指令微调模型论文和官方仓库报告的结果。

所有模型都在聊天模式下评估(即应用相应的对话模板)。所有零样本基准测试遵循AGIEval论文和Orca论文中的相同设置。CoT任务使用与Chain-of-Thought Hub相同的配置,HumanEval使用EvalPlus评估,MT-bench使用FastChat运行。要复现我们的结果,请按照以下说明操作。

复现基准测试

推理和编码:

注意:请在此仓库的根目录运行以下命令。

python -m ochat.evaluation.run_eval --condition "GPT4 Correct" --model openchat/openchat-3.5-0106 --eval_sets coding fs_cothub/bbh fs_cothub/mmlu zs/agieval zs/bbh_mc_orca zs/truthfulqa_orca
python ochat/evaluation/view_results.py
python ochat/evaluation/convert_to_evalplus.py

然后所有humaneval代码样本都放在ochat/evaluation/evalplus_codegen中。使用以下命令,使用Docker作为沙箱来评估名为samples.jsonl的单个代码样本。

docker run -v $(pwd):/app ganler/evalplus:latest --dataset humaneval --samples samples.jsonl

数学推理:

注意:请在此仓库的根目录运行以下命令。

python -m ochat.evaluation.run_eval --condition "Math Correct" --model openchat/openchat-3.5-0106 --eval_sets fs_cothub/gsm8k zs/math
python ochat/evaluation/view_results.py

MT-Bench:

请先启动本地API服务器,然后下载FastChat并运行以下命令。

注意:由于非零温度和GPT-4 API随时间的变化,结果可能会有所不同。

cd fastchat/llm_judge
python gen_api_answer.py --model openchat-3.5-0106 --max-tokens 4096 --parallel 128 --openai-api-base http://localhost:18888/v1
python gen_judgment.py --model-list openchat-3.5-0106 --parallel 8 --mode single

⬇️ 安装

[!注意] 需要安装pytorchCUDA来运行OpenChat

pip

pip3 install ochat

[!重要] 如果你在使用pip时遇到包兼容性问题,可以尝试下面的conda方法或查看这个issue

conda

conda create -y --name openchat python=3.11
conda activate openchat

pip3 install ochat

Windows (WSL 1.x, Ubuntu-22.04)

sudo apt update
sudo apt install build-essential

sudo apt install -y curl
curl -o miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash miniconda.sh

# 如果下面的conda命令不起作用,请重启WSL终端

conda create -y --name openchat python=3.11
conda activate openchat

pip3 install ochat

从源代码安装

克隆此仓库并以可编辑模式从源代码安装openchat
git clone https://github.com/imoneoi/openchat
cd openchat

pip3 install --upgrade pip  # 启用PEP 660支持
pip3 install -e .  # 可编辑模式,你可以在这个克隆的仓库中进行修改

🚀 部署API服务器

⚡ 我们的API服务器已经可以用于生产环境,并且兼容OpenAI API协议。它经过高度优化,使用vLLM可以动态批处理请求。

📎 注意:对于20系列或更老的不支持bfloat16的GPU,在服务器参数中添加--dtype float16

当前支持的模型列表

模型类型模型仓库许可证
openchat_3.6openchat/openchat-3.6-8b-20240522Llama 3
openchat_3.5openchat/openchat-3.5-0106Apache 2.0

单GPU (如RTX 3090, 4090)

python -m ochat.serving.openai_api_server --model MODEL_REPO

多GPU (张量并行)

# N是张量并行的GPU数量
python -m ochat.serving.openai_api_server --model MODEL_REPO --engine-use-ray --worker-use-ray --tensor-parallel-size N

使用 -h 查看更多设置

python -m ochat.serving.openai_api_server --model MODEL_REPO -h
部署为在线服务

如果你想将服务器部署为在线服务,可以使用 --api-keys sk-KEY1 sk-KEY2 ... 指定允许的API密钥,并使用 --disable-log-requests --disable-log-stats --log-file openchat.log 只将日志记录到文件中。出于安全考虑,我们建议在服务器前面使用HTTPS网关

请求示例

启动后,服务器在 localhost:18888 监听请求,并兼容OpenAI ChatCompletion API规范

💡 默认模式 (GPT4 Correct): 最适合编码、聊天和一般任务

curl http://localhost:18888/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_TYPE",
    "messages": [{"role": "user", "content": "你是一个名为OpenChat的大型语言模型。写一首诗来描述你自己"}]
  }'

🧮 数学推理模式: 专为解决数学问题而设计

curl http://localhost:18888/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_TYPE",
    "condition": "Math Correct",
    "messages": [{"role": "user", "content": "10.3 − 7988.8133 = "}]
  }'

🌐 Web界面 - OpenChat-UI

启动API服务器后,OpenChat提供了一个易于交互的用户界面。点击此处查看Web界面

🤗 使用Transformers进行推理

[!警告] 建议使用我们优化过的API服务器进行部署。使用Transformers进行推理会更慢。

💡 默认模式 (GPT4 Correct): 最适合编码、聊天和一般任务

GPT4 Correct User: 你好<|end_of_turn|>GPT4 Correct Assistant: 你好<|end_of_turn|>GPT4 Correct User: 今天过得怎么样?<|end_of_turn|>GPT4 Correct Assistant:

🧮 数学推理模式: 专为解决数学问题而设计

Math Correct User: 10.3 − 7988.8133=<|end_of_turn|>Math Correct Assistant:

⚠️ 注意: 记得将<|end_of_turn|>设置为生成结束标记。

默认(GPT4 Correct)模板也可以作为集成的tokenizer.chat_template使用,可以用来替代手动指定模板。

🛠️ 训练

OpenChat训练系统使用无填充训练和Multipack Sampler,相比传统的填充训练达到了3~10倍的加速。

选择基础模型

OpenChat支持Llama 3和Mistral模型。请先选择一个适合你需求的基础模型。每个基础模型都有对应的权重仓库、模型类型和推荐的批量大小,如下所示,它们应该填入后面说明中的BASE_REPOMODEL_TYPEBATCH_SIZE

基础模型大小权重 (带EOT标记)模型类型每GPU推荐批量大小 (8xA100 80GB)
Llama 38Bimone/Llama-3-8B-fixed-special-embeddingopenchat_3.640960
Mistral7Bimone/Mistral_7B_with_EOT_tokenopenchat_v3.2_mistral77824

注意:OpenChat对话模板需要<|eot_id|>, <|start_header_id|>, <|end_header_id|> (Llama 3) <|end_of_turn|> (Mistral)特殊标记。指定的基础模型必须包含这些已初始化嵌入的标记。我们提供的权重是原始基础权重加上这些初始化嵌入的标记。如果你想手动添加它们,请使用scripts目录中的init_special_embedding_llama3.pymistral_add_tokens.py

安装DeepSpeed和Flash Attention

首先,确保你的环境中可以使用CUDA nvcc编译器。如果没有,请安装与PyTorch使用的版本匹配的CUDA工具包。

接下来,安装构建依赖:

pip install packaging ninja

最后,安装这些包:

pip install deepspeed flash-attn

准备你的数据

要使用OpenChat训练器,请将你的SFT数据准备成JSON Lines格式,其中每一行对应一个Conversation对象:

class Message(BaseModel):
    role: str     # 必须是"user"或"assistant"
    content: str  # 消息内容
    weight: Optional[float] = None  # 此消息的损失权重。通常用户为0,助手为1,以仅监督助手的回复


class Conversation(BaseModel):
    items: List[Message]  # 对话中的所有消息
    condition: str = ""  # C-RLFT条件,可以是任何字符串或空
    system: str = ""  # 此对话的系统消息

对于基本的SFT,将人类消息的weight设为0,助手回复的设为1

SFT示例:

{"items":[{"role":"user","content":"你好","weight":0.0},{"role":"assistant","content":"你好","weight":1.0},{"role":"user","content":"今天过得怎么样?","weight":0.0},{"role":"assistant","content":"我很好。","weight":1.0}],"system":""}
{"items":[{"role":"user","content":"你是谁?","weight":0.0},{"role":"assistant","content":"我是OpenChat。","weight":1.0}],"system":"你是一个名为OpenChat的有帮助的助手。"}

对于C-RLFT,condition应设置为对话所属的类(例如GPT3GPT4)。weight为人类消息设为0,助手回复设为w,其中w是该类的权重(例如,根据我们的C-RLFT论文,GPT30.1,GPT41)。

C-RLFT示例:

{"items":[{"role":"user","content":"什么是C-RLFT?","weight":0.0},{"role":"assistant","content":"C-RLFT是一种使用混合质量数据改进开源LLM的方法。","weight":1.0}],"condition":"GPT4","system":""}
{"items":[{"role":"user","content":"什么是C-RLFT?","weight":0.0},{"role":"assistant","content":"我不知道。","weight":0.1}],"condition":"GPT3","system":""}

预先标记化数据集

然后你需要使用以下命令预先标记化数据集(请指定一个文件名作为PRETOKENIZED_DATA_OUTPUT_PATH来存储预先标记化的数据集):

python -m ochat.data.generate_dataset --model-type MODEL_TYPE --model-path BASE_REPO --in-files data.jsonl --out-prefix PRETOKENIZED_DATA_OUTPUT_PATH

启动OpenChat训练器

现在您可以使用以下命令启动OpenChat训练器。

  • 13B模型需要八张80GB显存的A/H100 GPU
  • 7B模型可以用四张80GB显存的A/H100 GPU或八张40GB显存的A/H100 GPU进行训练。

对于超参数,我们建议首先将批量大小设置为推荐的批量大小。如果出现内存不足(OOM)的情况,请尝试将其设置为显存能容纳的最大值,并且是2048的倍数。 其他超参数已经被仔细选择为默认值。此外,学习率是根据反平方根规则自动确定的。

训练命令(点击展开)
NUM_GPUS=8

deepspeed --num_gpus=$NUM_GPUS --module ochat.training_deepspeed.train \
          --model_path BASE_REPO \
          --data_prefix PRETOKENIZED_DATA_OUTPUT_PATH \
          --save_path PATH_TO_SAVE_MODEL \
          --batch_max_len BATCH_SIZE \
          --epochs 5 \
          --save_every 1 \
          --deepspeed \
          --deepspeed_config ochat/training_deepspeed/deepspeed_config.json

您可以在PATH_TO_SAVE_MODEL中找到所有epoch的检查点。然后您可以评估每个epoch并选择最佳的一个。

局限性

基础模型的局限性:尽管OpenChat具有先进的功能,但它仍然受到其基础模型固有局限性的约束。这些局限性可能会影响模型在以下领域的表现:

  • 复杂推理
  • 数学和算术任务
  • 编程和编码挑战

虚构不存在的信息:OpenChat有时可能会生成不存在或不准确的信息,也称为"幻觉"。用户应该意识到这种可能性,并验证从模型获得的任何关键信息。

安全性:OpenChat有时可能会生成有害、仇恨言论、带有偏见的回应,或回答不安全的问题。在需要安全和受监管回应的使用场景中,应用额外的AI安全措施至关重要。

许可证

代码以Apache License 2.0分发。

引用

@article{wang2023openchat,
  title={OpenChat: Advancing Open-source Language Models with Mixed-Quality Data},
  author={Wang, Guan and Cheng, Sijie and Zhan, Xianyuan and Li, Xiangang and Song, Sen and Liu, Yang},
  journal={arXiv preprint arXiv:2309.11235},
  year={2023}
}

💌联系方式

项目负责人:

  • Guan Wang [imonenext at gmail dot com]
  • Alpay Ariyak [aariyak at wpi dot edu]

主要贡献者:

  • Xianyuan Zhan(清华大学)
  • Qiying Yu(清华大学)
  • Changling Liu(GPT Desk Pte. Ltd.)
  • LDJ
  • AutoMeta(Alignment Lab AI)

赞助商:

特别感谢:

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号