采用混合质量数据训练的高性能开源 语言模型
OpenChat是一个创新的开源语言模型库,采用C-RLFT策略从混合质量数据中学习。该模型在7B规模下实现了与ChatGPT相当的性能,无需偏好标签。项目致力于开发高性能、商用级的开源大语言模型,并持续进步。OpenChat支持多GPU部署,提供兼容OpenAI的API服务,适用于编码、聊天等多种任务。
7B
模型也能在**消费级GPU(如RTX 3090)**上运行,达到与ChatGPT
相当的卓越性能。[2024/05/22] 我们发布了基于Llama-3的版本OpenChat 3.6 20240522,超越了官方Llama 3 8B Instruct和开源微调/合并版本。
[2024/01/06] 我们发布了第二次更新,OpenChat 3.5 0106,进一步提升了编码和整体性能 🏆。
[2023/12/10] 我们发布了第一次更新,OpenChat 3.5 1210,编码能力提升 了15分 🚀。
[2023/11/01] 我们发布了OpenChat-3.5-7B模型,在多个基准测试上超越了ChatGPT 🔥。
[2023/09/21] 我们发布了论文OpenChat: 利用混合质量数据推进开源语言模型。
[2023/09/03] 我们发布了OpenChat V3.2 SUPER模型。
[2023/08/04] 我们推出了一个在线演示,展示最新版本OpenChat 3.2。
[2023/07/30] 我们很高兴推出OpenChat V3模型系列,基于Llama 2,现在可以免费用于商业用途!
[2023/07/07] 我们发布了OpenChat V2模型系列。
[2023/07/01] 我们发布了OpenChat V1模型系列。
注意:请在此仓库的根目录运行以下命令。
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仓库运行。
</details>模型 | 参数量 | 平均分 | MT-Bench | HumanEval | BBH MC | AGIEval | TruthfulQA | MMLU | GSM8K | BBH CoT |
---|---|---|---|---|---|---|---|---|---|---|
OpenChat-3.5-0106 | 7B | 64.5 | 7.8 | 71.3 | 51.5 | 49.1 | 61.0 | 65.8 | 77.4 | 62.2 |
ChatGPT (3月)* | ???B | 61.5 | 7.94 | 48.1 | 47.6 | 47.1 | 57.7 | 67.3 | 74.9 | 70.1 |
OpenHermes 2.5 | 7B | 59.3 | 7.54 | 48.2 | 49.4 | 46.5 | 57.5 | 63.8 | 73.5 | 59.9 |
OpenOrca Mistral | 7B | 52.7 | 6.86 | 38.4 | 49.4 | 42.9 | 45.9 | 59.3 | 59.1 | 58.1 |
Zephyr-β^ | 7B | 34.6 | 7.34 | 22.0 | 40.6 | 39.0 | 40.8 | 39.8 | 5.1 | 16.0 |
Mistral | 7B | - | 6.84 | 30.5 | 39.0 | 38.0 | - | 60.1 | 52.2 | - |
开源SOTA** | 13B-70B | 61.4 | 7.71 | 73.2 | 49.7 | 41.7 | 62.3 | 63.7 | 82.3 | 41.4 |
WizardLM 70B | WizardCoder 34B | Orca 13B | Orca 13B | Platypus2 70B | WizardLM 70B | MetaMath 70B | Flan-T5 11B |
🔥 OpenChat-3.5-0106 (7B)现在在所有4个基准测试上都超过了Grok-0 (33B),并在平均分和3/4的基准测试上超过了Grok-1 (314B)。
许可证 | 参数量 | 平均分 | MMLU | HumanEval | MATH | GSM8k | |
---|---|---|---|---|---|---|---|
OpenChat-3.5-0106 | Apache-2.0 | 7B | 61.0 | 65.8 | 71.3 | 29.3 | 77.4 |
Grok-0 | 专有 | 33B | 44.5 | 65.7 | 39.7 | 15.7 | 56.8 |
Grok-1 | 专有 | 314B | 55.8 | 73 | 63.2 | 23.9 | 62.9 |
^: Zephyr-β经常无法遵循少样本CoT指令,可能是因为它只用聊天数据对齐,而没有在少样本数据上训练。
**: Mistral和开源SOTA的结果取自指令微调模型论文和官方仓库报告的结果。
所有模型都在聊天模式下评估(即应用相应的对话模板)。所有零样本基准测试遵循AGIEval论文和Orca论文中的相同设置。CoT任务使用与Chain-of-Thought Hub相同的配置,HumanEval使用EvalPlus评估,MT-bench使用FastChat运行。要复现我们的结果,请按照以下说明操作。
</details> <details> <summary>复现基准测试</summary>推理和编码:
注意:请在此仓库的根目录运行以下命令。
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随时间的变化,结果可能会有所不同。
</details>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
pip3 install ochat
[!重要] 如果你在使用pip时遇到包兼容性问题,可以尝试下面的conda方法或查看这个issue
conda create -y --name openchat python=3.11 conda activate openchat pip3 install ochat
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
</details>git clone https://github.com/imoneoi/openchat cd openchat pip3 install --upgrade pip # 启用PEP 660支持 pip3 install -e . # 可编辑模式,你可以在这个克隆的仓库中进行修改
⚡ 我们的API服务器已经可以用于生产环境,并且兼容OpenAI API协议。它经过高度优化,使用vLLM可以动态批处理请求。
📎 注意:对于20系列或更老的 不支持bfloat16
的GPU,在服务器参数中添加--dtype float16
。
模型类型 | 模型仓库 | 许可证 |
---|---|---|
openchat_3.6 | openchat/openchat-3.6-8b-20240522 | Llama 3 |
openchat_3.5 | openchat/openchat-3.5-0106 | Apache 2.0 |
python -m ochat.serving.openai_api_server --model MODEL_REPO
# N是张量并行的GPU数量 python -m ochat.serving.openai_api_server --model MODEL_REPO --engine-use-ray --worker-use-ray --tensor-parallel-size N
使用 -h
查看更多设置
<details> <summary>部署为在线服务</summary>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 = "}] }'
启动API服务器后,OpenChat提供了一个易于交互的用户界面。点击此处查看Web界面
[!警告] 建议使用我们优化过的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_REPO
、MODEL_TYPE
和BATCH_SIZE
。
基础模型 | 大小 | 权重 (带EOT标记) | 模型类型 | 每GPU推荐批量大小 (8xA100 80GB) |
---|---|---|---|---|
Llama 3 | 8B | imone/Llama-3-8B-fixed-special-embedding | openchat_3.6 | 40960 |
Mistral | 7B | imone/Mistral_7B_with_EOT_token | openchat_v3.2_mistral | 77824 |
注意:OpenChat对话模板需要<|eot_id|>, <|start_header_id|>, <|end_header_id|>
(Llama 3) <|end_of_turn|>
(Mistral)特殊标记。指定的基础模型必须包含这些已初始化嵌入的标记。我们提供的权重是原始基础权重加上这些初始化嵌入的标记。如果你想手动添加它们,请使用scripts
目录中的init_special_embedding_llama3.py
或mistral_add_tokens.py
。
首先,确保你的环境中可以使用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
应设置为对话所属的类(例如GPT3
或GPT4
)。weight
为人类消息设为0
,助手回复设为w
,其中w
是该类的权重(例如,根据我们的C-RLFT论文,GPT3
为0.1
,GPT4
为1
)。
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训练器 。
对于超参数,我们建议首先将批量大小设置为推荐的批量大小。如果出现内存不足(OOM)的情况,请尝试将其设置为显存能容纳的最大值,并且是2048的倍数。 其他超参数已经被仔细选择为默认值。此外,学习率是根据反平方根规则自动确定的。
<details> <summary>训练命令(点击展开)</summary></details>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}
}
项目负责人:
主要贡献者:
赞助商:
特别感谢:
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号