Chinese-Mixtral-8x7B

GitHub
653 33 较难 1 次阅读 1周前Apache-2.0开发框架语言模型
AI 解读 由 AI 自动生成,仅供参考

Chinese-Mixtral-8x7B 是一款基于 Mixtral-8x7B 模型进行中文扩词表增量预训练的大型语言模型,旨在提升中文自然语言处理任务中的生成与理解能力。它通过扩展词表并结合大规模中文语料进行训练,显著增强了对中文文本的编解码效率和语义理解水平。

这款模型主要解决了传统大模型在中文场景下表现不足的问题,尤其在处理复杂语义、长文本生成及多任务推理时更具优势。它适合研究人员和开发者使用,特别是在需要高性能中文生成或理解能力的场景中,如对话系统、内容创作、信息抽取等。

其独特之处在于采用了 MoE(Mixture of Experts)架构,并结合 QLoRA 技术进行训练,使得模型在保持强大性能的同时,也提供了灵活的部署方式,包括完整模型和轻量级适配器版本。用户可根据需求选择下载和使用。需要注意的是,作为基座模型,它尚未经过指令微调,因此在实际应用中可能需要进一步优化以满足特定任务需求。

使用场景

某大型电商平台的客服团队正在处理大量用户咨询,其中涉及大量中文内容,包括商品咨询、退换货流程、订单查询等。他们希望借助 AI 模型实现智能客服系统,以提高响应速度和准确率。

没有 Chinese-Mixtral-8x7B 时

  • 客服团队依赖人工处理大部分咨询请求,导致响应时间长且效率低下。
  • 现有的英文模型在处理中文语义时存在理解偏差,影响了回答的准确性。
  • 缺乏对复杂问题(如多步骤退货流程)的推理能力,导致用户满意度下降。
  • 部分任务需要多个模型配合完成,增加了系统复杂性和维护成本。
  • 模型无法有效支持中文长文本生成,限制了对话的自然流畅性。

使用 Chinese-Mixtral-8x7B 后

  • 智能客服系统能够快速响应用户咨询,显著缩短了平均回复时间。
  • 基于扩词表的中文预训练增强了模型对中文语义的理解,提升了回答的准确性。
  • 模型具备较强的推理能力,可以处理复杂的多步骤问题,如退货流程和订单状态查询。
  • 支持端到端的中文对话生成,减少了对多个模型的依赖,简化了系统架构。
  • 大规模中文语料训练使模型在生成长文本时更加自然流畅,提升了用户体验。

Chinese-Mixtral-8x7B 提供了高效、精准的中文语言处理能力,显著提升了智能客服系统的性能与用户体验。

运行环境要求

操作系统
  • Linux
  • macOS
GPU

需要 NVIDIA GPU,显存 8GB+,CUDA 11.7+

内存

16GB+

依赖
notes建议使用 conda 管理环境,首次运行需下载约 5GB 模型文件。训练时需要安装 DeepSpeed 和 Flash Attention 库,且需使用 QLoRA 进行训练以减少显存占用。
python3.10
torch==2.0.1
transformers==4.36.2
datasets
evaluate
peft
accelerate
gradio
optimum
sentencepiece
trl
bitsandbytes
Chinese-Mixtral-8x7B hero image

快速开始

中文-Mixtral-8x7B

🎉 新闻

  • [2024-02-09] 发布基于Chinese-Mixtral-8x7B指令微调的模型:活字 3.0;开源指令微调代码。
  • [2024-01-18] 发布Chinese-Mixtral-8x7B基座模型;开源增量预训练代码。

🚀 介绍

本项目基于Mistral发布的模型Mixtral-8x7B进行了中文扩词表增量预训练,希望进一步促进中文自然语言处理社区对MoE模型的研究。我们扩充后的词表显著提高了模型对中文的编解码效率,并通过大规模开源语料对扩词表模型进行增量预训练,使模型具备了强大的中文生成和理解能力。

项目开源内容:

  • 中文Mixtral-8x7B扩词表大模型
  • 扩词表增量预训练代码

请注意,Chinese-Mixtral-8x7B仍然可能生成包含事实性错误的误导性回复或包含偏见/歧视的有害内容,请谨慎鉴别和使用生成的内容,请勿将生成的有害内容传播至互联网。

📥 模型下载

本项目使用QLoRA进行训练,LoRA权重与合并权重后的模型分别开源,您可以根据自己的需求选择下载:

模型名称 模型大小 下载地址 备注
Chinese-Mixtral-8x7B 88GB HuggingFace
ModelScope
中文扩词表完整模型,可以直接使用
Chinese-Mixtral-8x7B-adapter 2.7GB HuggingFace LoRA权重,需要与原版Mixtral-8x7B进行合并才可以使用,合并脚本请参考这里

💻 模型推理

Chinese-Mixtral-8x7B支持完整的Mixtral-8x7B模型生态,包括使用vLLMFlash Attention 2进行加速,使用bitsandbytes进行模型量化等。以下是使用Chinese-Mixtral-8x7B进行推理的代码示例。

使用Flash Attention 2:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "HIT-SCIR/Chinese-Mixtral-8x7B"
tokenizer = AutoTokenizer.from_pretrained(model_id)

model = AutoModelForCausalLM.from_pretrained(model_id, attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16, device_map="auto")

text = "我的名字是"
inputs = tokenizer(text, return_tensors="pt").to(0)

outputs = model.generate(**inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

使用4bit量化:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "HIT-SCIR/Chinese-Mixtral-8x7B"
tokenizer = AutoTokenizer.from_pretrained(model_id)

model = AutoModelForCausalLM.from_pretrained(model_id, load_in_4bit=True, device_map="auto")

text = "我的名字是"
inputs = tokenizer(text, return_tensors="pt").to(0)

outputs = model.generate(**inputs, max_new_tokens=20)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

请注意,Chinese-Mixtral-8x7B为基座模型,没有经过指令微调,因此指令遵循能力有限。您可以参考微调一节对模型进行微调。

📈 模型性能

模型综合能力

我们分别使用以下评测数据集对Chinese-Mixtral-8x7B进行评测:

  • C-Eval:一个全面的中文基础模型评估套件。它包含了13948个多项选择题,涵盖了52个不同的学科和四个难度级别。
  • CMMLU:一个综合性的中文评估基准,专门用于评估语言模型在中文语境下的知识和推理能力,涵盖了从基础学科到高级专业水平的67个主题。
  • MMLU:一个包含57个多选任务的英文评测数据集,涵盖了初等数学、美国历史、计算机科学、法律等,难度覆盖高中水平到专家水平,是目前主流的LLM评测数据集之一。
  • HellaSwag:一个极具挑战的英文NLI评测数据集,每一个问题都需要对上下文进行深入理解,而不能基于常识进行回答。

根据Mistral发布的技术报告,Mixtral-8x7B在推理时将激活13B参数。下表为Chinese-Mixtral-8x7B与其他13B规模的中文扩词表模型在各个评测数据集上的5-shot结果:

模型名称 增量训练语料 C-Eval
(中文)
CMMLU
(中文)
MMLU
(英文)
HellaSwag
(英文)
IDEA-CCNL/Ziya2-13B-Base 650B Token 59.29 60.93 59.86 58.90
TigerResearch/tigerbot-13b-base-v3 500B Token 50.52 51.65 53.46 59.16
Linly-AI/Chinese-LLaMA-2-13B-hf 11B Token 42.57 41.95 51.32 59.05
hfl/chinese-llama-2-13b 约30B Token(120GB) 41.90 42.08 51.92 59.28
Chinese-Mixtral-8x7B(本项目) 42B Token 52.08 51.08 69.80 65.69

在中文知识和理解方面,我们的Chinese-Mixtral-8x7B与TigerBot-13B-Base-v3性能相当。由于Chinese-Mixtral-8x7B的训练数据量仅为TigerBot-13B-Base-v3的8%,我们的模型仍有进一步提升的空间。与此同时,得益于原版Mixtral-8x7B模型强大的性能,我们的Chinese-Mixtral-8x7B达到了各个扩词表模型的最强英文水平。

由于不同版本的评测脚本实现细节有细微差异,为了保证评测结果的一致性和公平性,我们的评测脚本统一使用EleutherAI发布的lm-evaluation-harness,commit hash为28ec7fa

模型生成效果

下表为各个扩词表模型的生成效果。由于部分模型的预训练语料未使用eos_token进行分隔,我们采用了max_tokens = 100对生成文本进行截断。我们的采样参数为temperature = 0.8, top_p = 0.9

中文编解码效率

针对中文编解码效率,我们使用各个扩词表模型的分词器对SkyPile数据集的一个切片(2023-06_zh_head_0000.jsonl)进行编码,对比了各个分词器输出的中文文本Token量:

模型名称 模型类别 词表大小 中文文本Token量 编解码效率
meta-llama/Llama-2-13B-hf LLaMA 32000 780M
mistralai/Mixtral-8x7B-v0.1 Mixtral 32000 606M
Linly-AI/Chinese-LLaMA-2-13B-hf LLaMA 40076 532M
IDEA-CCNL/Ziya2-13B-Base LLaMA 39424 532M
hfl/chinese-llama-2-13b LLaMA 55296 365M
TigerResearch/tigerbot-13b-base-v3 LLaMA 65112 342M
Chinese-Mixtral-8x7B(本项目) Mixtral 57000 355M

在约1.4GB的测试文本中,我们的Chinese-Mixtral-8x7B中文编解码效率仅次于TigerBot-13B-Base-v3,较原模型提高了41.5%。这有利于加速中文文本的推理速度,并在In-Context Learning、Chain-of-Thought等场景中节省序列长度,有利于提高复杂推理任务的性能。

⚙️ 训练细节

词表扩充

我们使用sentencepiece在12G知乎数据和2G悟道数据上训练中文BPE词表。我们在训练词表时分别枚举了中文单字Token数量以及中文总Token数量,并对二者进行组合,得到了数百个大小、内容各异的词表。为了得到最适合的词表,我们通过Zheng Bo等人提出的ALP计算这些词表的中文词汇能力。ALP通过计算特定语言的子词切分粒度,并对词表的中低频子词进行惩罚,是一种方便快捷的衡量特定语言词汇能力的指标。

我们在书籍和百科语料上评估了不同词表的ALP值。图示中,四条曲线分别代表四种中文单字Token数量的词表(4451、5435、6414和7434)。为了避免词表过小导致中文压缩率过低,以及词表过大导致embedding层过于稀疏,我们选取ALP曲线的拐点,对应向词表中新增25000个中文Token。在此基础上,我们选择了四条曲线中ALP最大者,即新增6414个中文单字Token的词表,作为最终Chinese-Mixtral-8x7B选用的词表。

在获得新词表后,我们需要对embedding和lm_head层进行扩充和初始化。我们使用新Token在旧embedding层中的词嵌入平均值对扩充部分进行初始化。在我们的前期实验中,这种方法略优于HuggingFace的默认实现,即使用固定的正态分布进行初始化。

增量预训练

Mixtral-8x7B模型参数量为46.7B,全参数训练需要同时使用多种并行策略,在训练资源受限的情况下时间成本过高。因此我们采用HuggingFace官方推荐的方法,使用QLoRA对模型进行训练。QLoRA在LoRA低秩分解的基础上,通过引入4位量化、双重量化和利用NVIDIA统一内存进行分页,进一步减少了训练所需显存,同时保持了与全参数训练相当的性能。

我们参考Yiming Cui等人对LoRA的设置,对原模型所有Linear层应用低秩分解,并将扩增后的embedding和lm_head层的参数设置为可训练。对于模型主体,我们采用NF4格式进行量化,这种格式可以使得量化后的数据与量化前具有同等的数据分布,模型的权重信息损失更少。

环境准备

我们建议使用Python 3.10 + torch 2.0.1

# Pytorch + Transformers
$ pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2
$ pip install transformers==4.36.2 datasets evaluate peft accelerate gradio optimum sentencepiece trl
$ pip install jupyterlab scikit-learn pandas matplotlib tensorboard nltk rouge bitsandbytes fire
# CUDA Toolkit
$ conda install nvidia/label/cuda-11.7.1::cuda
# DeepSpeed
$ git clone https://github.com/microsoft/DeepSpeed.git
$ cd DeepSpeed
$ DS_BUILD_FUSED_ADAM=1 pip3 install .
# Flash Attention
$ pip install flash-attn --no-build-isolation

数据集下载

我们基于现有的开源数据集训练了Chinese-Mixtral-8x7B,数据集包括:

数据集名称 数据集语言 使用数据量 备注
Skywork/SkyPile-150B 中文 30B 仅使用2022 + 2023年的数据
DKYoon/SlimPajama-6B 英文 12B 数据集重复2 Epoch

通过data/download.py将数据集下载到data中。针对Slimpajama数据集,需要使用data/parquet2jsonl.py将原始数据集转换为jsonl格式。

下载后的数据集为多个jsonl文件的分片,使用cat将多个分片合并为一个jsonl文件。

$ cat *.jsonl > all.jsonl

通过split将jsonl切分为train和valid集合。本项目中train和valid的行数比例为999:1。

$ wc -l all.jsonl                          # 计算数据集总行数
$ split -l <lines> all.jsonl               # 按999:1计算train/valid行数,进行切分
$ mv xaa DKYoon-SlimPajama-6B-train.jsonl  # 重命名
$ mv xab DKYoon-SlimPajama-6B-dev.jsonl

数据集预处理

将数据集名称和路径注册到data/datasets.toml中:

[DKYoon-SlimPajama-6B]              # 数据集名称
splits = ["train", "dev"]           # 数据集train/valid集合
root = "{DATA_DIR}/en/{name}"       # 数据集根目录
doc = "{name}-{split}"              # 数据集文件名
encoded = "encoded-{name}-{split}"  # 预处理保存位置

使用data/preprocess_datasets.py对数据集进行子词切分,从而加快训练速度。

$ python data/preprocess_datasets.py --ds_name SkyPile-150B-2023 --tokenizer_name_or_path tokenizer/Mixtral-8x7B-v0.1-vocab
$ python data/preprocess_datasets.py --ds_name DKYoon-SlimPajama-6B --tokenizer_name_or_path tokenizer/Mixtral-8x7B-v0.1-vocab

在进行子词切分后,可以使用data/utils.py查看各个数据集的token总量:

$ python data/utils.py

开始训练

训练启动脚本为scripts/train.sh。可以通过修改其中的TRAIN_DATASETS修改训练数据集和数据集比例:

TRAIN_DATASETS=(
    1:SkyPile-150B-2022     # 使用全量SkyPile-150B-2022
    0.1:SkyPile-150B-2023   # 使用SkyPile-150B-2023的10%数据
    1:DKYoon-SlimPajama-6B  # 使用全量DKYoon-SlimPajama-6B
)

如果您使用SLURM集群管理系统,可以通过sbatch进行提交:

$ sbatch scripts/train-pt.sh

如果没有SLURM或希望通过命令行启动训练,您可以直接提取scripts/train-pt.sh中的torchrun开始训练。

微调

数据集准备

微调需要的数据集格式与预训练类似,数据集文件需要为jsonl格式:每行一个json,其中需要包含"text"字段,将instruction、input和output全部按照您需要的模板进行拼接。

然后需要将数据集名称和路径注册到data/datasets.toml中:

[ShareGPT-Chinese]              # 数据集名称
splits = ["train"]              # 数据集train/valid集合
root = "{DATA_DIR}/sft/{name}"  # 数据集根目录
doc = "{name}-{split}"          # 数据集文件名

开始训练

训练启动脚本为scripts/train-sft.sh。可以通过修改其中的TRAIN_DATASETS修改训练数据集和数据集比例:

TRAIN_DATASETS=(
    1.0:ShareGPT-Chinese  # 使用全量ShareGPT-Chinese
    0.5:ShareGPT-English  # 使用ShareGPT-English的50%数据
)

如果您使用SLURM集群管理系统,可以通过sbatch进行提交:

$ sbatch scripts/train-sft.sh

如果没有SLURM或希望通过命令行启动训练,您可以直接提取scripts/train-sft.sh中的torchrun开始训练。

✒️ 引用

如果您觉得本项目对您的研究有所帮助或使用了本项目的代码,请引用本项目:

@misc{Chinese-Mixtral-8x7B,
    author = {HIT-SCIR},
    title = {Chinese-Mixtral-8x7B: An Open-Source Mixture-of-Experts LLM},
    year = {2024},
    publisher = {GitHub},
    journal = {GitHub repository},
    howpublished = {\url{https://github.com/HIT-SCIR/Chinese-Mixtral-8x7B}}
}

🌟 Star History

Star History Chart

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架