3bca068261d6eb1e5b285a2931b74299af02ec4c
ParlzMAI · ParlzAIPlatformPAP
ParlzMAI(
pmai):纯 C 的 MoE 推理服务 + 自研 AI 框架 ParlzAIPlatformPAP。 自研模型格式.pap、兼容 GGUF(llama.cpp),在 WSL(自带 GPU) 上真实训练出 0.1B MoE 模型并端到端生成。
项目性质
- 纯 C 推理引擎(
src/)+ Python 训练框架(platform/)+ 统一 CLI 入口pmai。 - 支持两种模型:自研 GPT+MoE 架构(
.pap)与 llama/Mixtral 架构(GGUF)。 - 自定义
.pap格式(PAP1魔数 + 配置 + byte-level BPE 词表 + 命名张量,支持 f32/fp16/q8 量化)。 - 训练端可训 0.1B 级全层 MoE 模型,导出
.pap或标准.gguf。
架构
┌──────────────────────────────────────────────┐
│ pmai (统一 CLI) │
│ 生成 · --interactive 对话 · --serve HTTP/SSE │
│ --inspect GGUF · --output 落盘 │
├──────────────────────────────────────────────┤
│ 推理引擎 (src/) C │
│ GPT: RMSNorm · Attention+KV · MoE(top-k) │
│ llama: RoPE · GQA · SwiGLU · Mixtral MoE │
│ 加载器: .pap(多dtype)/GGUF(多量化) │
│ 分词器: byte-level BPE / GPT-2 BPE │
│ 采样: top-k/temperature │
├──────────────────────────────────────────────┤
│ 训练框架 (platform/) Python │
│ GPT+MoE/pt · BPE · .pap/GGUF 读写 · 量化 │
├──────────────────────────────────────────────┤
│ WSL2(Ubuntu 22.04) + GPU RTX5060/CUDA │
└──────────────────────────────────────────────┘
目录结构
src/ ParlzMAI C 引擎
core/ tensor/matrix + transformer(GPT) + KVCache
model/ config + tokenizer + model(.pap) + gguf(容器/反量化) + llama(架构)
infer/ sample(top-k) + generate
server/ HTTP 服务 (libmicrohttpd + SSE)
utils/ math/mempool/logger
platform/ ParlzAIPlatformPAP (Python)
tokenizer.py pap_format.py gguf_format.py model.py llama_model.py llama_tokenizer.py
train.py export_gguf.py quant_pap.py verify.py verify_llama.py make_random.py
data/ 语料 (tinyshakespeare.txt) models/ .pap/.gguf 模型
output/ 构建产物 (pmai / pmai-llama / libmoe_*) scripts/ 脚本
构建与运行(WSL,Ubuntu-22.04)
cd /mnt/f/ParlzMAI
cmake -S . -B build && cmake --build build -j
ctest --test-dir build # 单元测试
# 构建产物统一在 output/ 目录:pmai(统一入口) / pmai-llama(llama 运行器)
./output/pmai --model models/moe-0.1b-fp16.pap --prompt "ROMEO:" --n_tokens 120 --temperature 0.8 --top_k 40
./output/pmai --model models/moe-0.1b-fp16.pap --interactive # 对话式
./output/pmai --model models/moe-0.1b-fp16.pap --serve --port 8080 # HTTP/SSE
./output/pmai --model models/moe-0.1b-fp16.pap --prompt "QUEEN:" --output output/out.txt
./output/pmai --inspect models/moe-0.1b.gguf # 查看 GGUF
训练(GPU)
/opt/pap-venv/bin/python platform/train.py --data data/tinyshakespeare.txt \
--out models/moe-0.1b.pap --vocab 2048 --layers 6 --d_model 512 --heads 8 \
--experts 16 --top_k 2 --d_expert 1024 --max_seq 256 --steps 2500 --batch 8
# 约 109M 参数(0.1B),全层 MoE
量化 / 格式转换
| 操作 | 命令 |
|---|---|
.pap → fp16 (≈2×) |
python platform/quant_pap.py --src a.pap --dst a-fp16.pap --dtype fp16 |
.pap → q8 (≈3.8×) |
python platform/quant_pap.py --src a.pap --dst a-q8.pap --dtype q8 |
.pap → .gguf |
python platform/export_gguf.py --src a.pap --dst a.gguf --dtype fp16 |
实测(自研 0.1B = 109,238,784 参数):
| 文件 | 体积 | 相对 f32 | 贪心输出 |
|---|---|---|---|
moe-0.1b.pap (f32) |
437.0 MB | 1.0× | 基准 |
moe-0.1b-fp16.pap |
218.5 MB | 2.0× | 一致 |
moe-0.1b-q8.pap |
116.1 MB | 3.76× | 一致 |
moe-0.1b.gguf(fp16) |
218.5 MB | 2.0× | 一致 |
一致性验证
# GPT-MoE:C vs torch 贪心
/opt/pap-venv/bin/python platform/verify.py --pap models/_smoke.pap # [MATCH] YES
# llama 架构:C vs torch 贪心(合成 MoE GGUF round-trip)
/opt/pap-venv/bin/python platform/verify_llama.py # [MATCH] YES
# llama BPE 分词器 vs llama-cpp-python(真实 Qwen2-MoE 词表)+ C 端对拍
/opt/pap-venv/bin/python -c "..." # 逐 token MATCH
./output/test_llmtok models/qwen25moe.gguf 'Hello' # C 端分词器:与参考一致
Git 仓库
- 代码已本地提交(59 文件,已排除
wsl/、models/*.pap|*.gguf、output/、build/等大件/产物)。 - 远端已配置:
origin=https://github.com/JGZYES/ParlzMAI.git、parlz=https://git.parlz.com/JGZ_YES/ParlzMAI.git。 - ⚠️ 推送需认证:本机无 GitHub PAT / SSH key,
git push被要求登录。配置后:或提供 token:git push -u origin main git push -u parlz maingit push https://<TOKEN>@github.com/JGZYES/ParlzMAI.git main。
项目状态
✅ 已实现(已验证)
环境与基建
- WSL2 专用镜像 Ubuntu 22.04 + 工具链(gcc/cmake/make/pip)。
- GPU 直通:RTX 5060 / 8GB,CUDA 可用;venv
/opt/pap-venv(torch 2.14+cu130 / numpy)。 - llama-cpp-python(参考/逐 token 对照)+ HF 镜像(可下载真实模型)。
推理引擎(C,src/)
- ✅ tensor / matrix / math / mempool / logger;
-Wall -Wextra干净编译;ctest 全绿。 - ✅ GPT-MoE 前向:RMSNorm、带 KV Cache 注意力、MoE(router+Top-K+专家加权)、GFU FFN。
- ✅ llama/Mixtral 架构:RoPE(NeoX) + GQA + SwiGLU + Mixtral MoE(重归一化 Top-k) —— C 与 PyTorch 贪心逐 token 一致(
[MATCH] YES)。 - ✅ byte-level BPE(GPT/自研两端一致)与 GPT-2 byte-level BPE 分词器(
platform/llama_tokenizer.py,与 llama-cpp-python 逐 token MATCH,含中文)。 - ✅
.pap加载器(多 dtype f32/fp16/q8 反量化);GGUF 加载器(容器解析、元数据查询、F32/F16/BF16/Q4_0/Q5_0/Q5_1/Q8_0 反量化)。 - ✅ 真实 GGUF 兼容:顺序探测(元数据/张量在前)+ 版本自适应(v1 用 u32、v2+ 用 u64)。
- ✅ 采样(top-k/temperature)+ 自回归生成。
CLI(pmai,构建到 output/)
- ✅
--prompt生成、--interactive对话(输入一行→流式生成→exit 退出)、--serveHTTP/SSE(POST /api/generate、GET /api/models、GET /health)、--inspect查看任意 GGUF、--output <file>落盘(默认存output/,交互自动output/chat-<ts>.txt)。 - ✅
pmai-llama:llama 架构 GGUF 运行器(加载 + 生成 id)。
训练框架(Python,platform/)
- ✅ BPE 训练/编码(O(n log n));GPT+MoE(PyTorch);
.pap/gguf读写;量化(fp16 ≈2×、q8 ≈3.76×);导出.pap/.gguf。 - ✅ 真实训练并验证:GPU 训练 0.1B(109M)MoE(tiny_shakespeare,2500 步 ≈11 分钟,loss 7.79→3.73),产出
.pap(437MB)/fp16(218MB)/q8(116MB)/.gguf(218MB)。
⬜ 未实现 / 待办(如实)
| 类别 | 内容 |
|---|---|
| qwen2moe 架构运行 | 真实 Qwen2.5-MoE-2X1.5B(Q4_K_M) 需:K 系反量化(Q4_K/Q5_K/Q6_K/Q8_K/Q2_K/Q3_K,已取到 llama.cpp 源码未移植) + qwen2moe 分支(共享专家 ffn_*_shexp / 3D 路由专家 ffn_*_exps / 双重 router / 注意力 bias)。未发布未经验证实现。 |
| C 端 llama 分词器 | llama_tokenizer.py 已验证,但 C 端未接入 → pmai/pmai-llama 对 llama 系列暂输出 id、非文本。 |
| llama 真实文本生成对拍 | 需上两条都完成后,用 pmai-llama 与 llama-cpp-python 逐 token 一致才算跑通。 |
| 推理增强 | 无 batch 推理、无 prefill 批量化、无 mmap 大模型加载、无专家预加载/热切换。 |
| Phase 3 剩余 | HTTP/SSE/健康检查已做;缺 WebSocket、线程池/请求调度、并发限流。 |
| Phase 4 运维 | 无 config.yaml、无 QPS/延迟监控、无优雅关闭/热重载、无模型下载工具、无 wrk/ab 基准、无 OpenAPI 文档。 |
| 精简 | GGUF v1 旧格式模型(如 klosax 的 v1 目录)未能完全解析(不影响现代 v2/v3)。 |
| Tokenizer 特殊 token | n_special=0,未内置 `< |
| 交互上下文 | --interactive 为无状态(每轮仅用当前输入,不携带上文)。 |
| 训练质量 | 语料 1MB、2500 步,仅“莎士比亚腔”,要更连贯需更大语料 + 长训练。 |
下一步(按优先级)
- C 端 llama BPE 分词器 →
pmai/pmai-llama对任何 llama/GPT-2 系 GGUF 输出真实文本(边界清晰、可逐 token 验证)。 - K 系反量化移植(Q4_K/Q5_K/Q6_K/Q8_K 等,从 llama.cpp 源码逐行核对)。
- qwen2moe 架构分支 + 与 llama-cpp-python 端到端对拍 →
pmai-llama真跑Qwen2.5-MoE-2X1.5B。 - 批推理 / mmap / QPS 监控 / config.yaml / 模型下载。
环境备注
- 构建/训练跑在 WSL
Ubuntu-22.04:wsl -d Ubuntu-22.04。 - 项目 Windows
F:\ParlzMAI↔ WSL/mnt/f/ParlzMAI。 - 预处理缓存
data/tinyshakespeare.txt.papcache(BPE,避免重跑 ~4.6 分钟)。
语言
C
63%
Python
33.8%
CMake
2.4%
Shell
0.8%