diff --git a/assets/docs/architecture.md b/assets/docs/architecture.md new file mode 100644 index 0000000..2f6c658 --- /dev/null +++ b/assets/docs/architecture.md @@ -0,0 +1,220 @@ +## 1. 为什么我要做这个项目? + +现在市面上有很多大模型,比如GPT、LLaMA这些,动不动就是几十亿甚至上千亿参数。但说实话,这些模型对硬件要求太高了,普通开发者根本玩不起。我就想:**能不能做一个既好用又能在普通电脑上跑起来的模型呢?** 这其实也是目前大部分人的期望, 能有一个可以本地部署的ai小型项目,实现完全私有化并且有一定的智能能力。 + +于是就有了这个KHAOSZ项目,1B参数,中英双语,支持对话、文本生成、RAG检索,而且训练代码都是开源的! + +## 2. 系统架构 + +系统分为以下板块 + +```mermaid +graph LR + %% 样式定义 + classDef config fill:#e1f5fe,stroke:#01579b; + classDef trainer fill:#f3e5f5,stroke:#4a148c; + classDef data fill:#e8f5e8,stroke:#1b5e20; + classDef model fill:#fff3e0,stroke:#e65100; + classDef inference fill:#fce4ec,stroke:#880e4f; + classDef parallel fill:#e0f2f1,stroke:#004d40; + + %% 配置模块 + subgraph Config["Config(配置模块)"] + C1[model_config.py] + C2[train_config.py] + C3[scheduler_config.py] + end + class Config config; + + %% 训练器模块 + subgraph Trainer["Trainer(训练器模块)"] + T1[trainer.py] + T2[train_content.py] + T3[schedule.py] + T4[strategy.py] + T5[train_callback.py] + end + class Trainer trainer; + + %% 数据模块 + subgraph Data["Data(数据模块)"] + D1[dataset.py] + D2[sampler.py] + D3[mmap.py] + D4[tokenizer.py] + D5[checkpoint.py] + end + class Data data; + + %% 模型模块 + subgraph Model["Model(模型模块)"] + M1[transformer.py] + M2[module.py] + end + class Model model; + + %% 推理模块 + subgraph Inference["Inference(推理模块)"] + I1[generator.py] + I2[core.py] + end + class Inference inference; + + %% 并行模块 + subgraph Parallel["Parallel(并行模块)"] + P1[setup.py] + P2[module.py] + end + class Parallel parallel; + + %% 配置依赖 + C2 -.-> T1 + C1 -.-> M1 + C3 -.-> T3 + + %% 训练器内部依赖 + T1 --> T5 + T1 --> T2 + T2 --> T3 + T2 --> T4 + + %% 数据流 + D1 --> D2 + D1 --> D3 + D1 --> D4 + D1 --> D5 + + %% 模型依赖 + M1 --> M2 + + %% 推理依赖 + I1 --> I2 + + %% 跨模块依赖 + T2 -.-> M1 + I1 -.-> M1 + T2 -.-> D1 + T1 -.-> P1 +``` + + +### 1. 配置管理(/config/) +- **模型配置**:定义模型结构参数(如层数、头数、维度等),通过 `ModelConfig` 统一管理。 +- **训练配置**:设置训练参数(如批次大小、训练阶段 PT/SFT/DPO、优化器等),由 `TrainConfig` 加载。 +- **调度配置**:控制学习率策略(如余弦退火)和训练进度。 + +### 2. 硬件与并行(/parallel/) +- **分布式初始化**:通过 `setup_parallel` 函数,根据配置初始化多卡/多机训练环境。 + +### 3. 数据处理(/data/) +- **高效加载**:使用内存映射(mmap)技术加载超大语料,避免内存溢出,实现零拷贝读取。 + +### 4. 模型与训练(/model/, /trainer/) +- **统一模型架构**:基于 Transformer,支持灵活配置不同规模(如7B、13B)。 +- **策略化训练器**:`Trainer` 根据训练阶段(PT/SFT/DPO)自动切换训练策略,复用同一训练循环。 +- **训练上下文管理**:统一管理模型、优化器、调度器和指标,支持多阶段无缝衔接。 + +### 5. 推理服务(/inference/, /utils/) +- **统一生成接口**:提供同步、批量、流式生成方法,适配所有训练阶段。 +- **KV缓存优化**:在自回归生成中缓存 Key/Value,昇腾XPU下利用高速片上内存加速。 +- **RAG支持**:结合检索器和嵌入模型,从外部知识库注入相关信息,提升回答质量。 +- **智能文本分割**: + - **结构优先分割**:按标题、段落等切分; + - **语义分割**:基于句子嵌入相似度,确保片段语义完整,提升微调效果。 + + +## 3. 训练流程 + +常见大语言模型(Large Language Model, LLM)的训练流程通常包含三个阶段:**预训练(Pre-training, PT)**、**监督微调(Supervised Fine-Tuning, SFT)** 以及 **基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)**。本系统设计支持全流程无缝衔接,通过模块化策略实现不同训练阶段的高效切换与状态管理,确保模型能力从通用语言理解逐步对齐至符合人类偏好的对话与指令执行。 + +### **2.1 预训练阶段** + +预训练阶段旨在构建模型的基础语言能力与通用知识表示。该阶段在大规模、无标注的语料库(通常涵盖数百GB至数TB的文本数据)上进行自监督学习。模型架构基于标准的Transformer Decoder,通过掩码语言建模(如因果语言建模)目标进行训练,使模型能够学习词汇、语法、语义及蕴含于文本中的世界知识。 + +**核心公式:因果语言建模(Causal Language Modeling)** + +$$ +L_{\text{PT}} = - \sum_{t=1}^{T} \log P(x_t \mid x_{\lt t}; \theta) +$$ + +**符号说明:** + +- $T$:序列长度 +- $x_t$:序列中第 $ t $ 个词元(token) +- $x_{