文件
JGZYES 28535b1c74 ParlzMAI: pure-C MoE inference + ParlzAIPlatformPAP framework
- pmai unified CLI (generate/chat/interactive/http/inspect/output/config)
- GPT+MoE transformer, .pap (f32/fp16/q8) + GGUF loader (order+version adaptive)
- llama/Mixtral arch: RoPE+GQA+SwiGLU+MoE (C==torch verified)
- C llama BPE tokenizer (validated vs llama-cpp-python)
- training framework + 0.1B/0.22B MoE models; quantization fp16/q8
- build artifacts to output/; HTTP API; config.yaml; scripts; openapi
2026-09-07 07:16:58 +08:00

41 行
1.4 KiB
Python

# -*- coding: utf-8 -*-
"""生成一个随机小模型并导出 .pap,用于 C 与 torch 的对拍验证(不训练)。"""
import os
import model as model_mod
import pap_format
import tokenizer as tok
def main(out: str = "/mnt/f/ParlzMAI/models/_smoke.pap"):
# 纯字节词表(num_merges=0),最干净
vocab = [bytes([b]) for b in range(256)]
merges = []
cfg = {"vocab_size": 256, "n_layer": 2, "d_model": 64, "n_head": 4,
"d_ff": 128, "moe_n_experts": 4, "moe_top_k": 2, "d_expert": 128,
"max_seq_len": 32, "rmsnorm_eps": 1e-5, "moe_mask": [1, 0]}
model = model_mod.ParlzGPTMoE(cfg)
tens = model_mod.export_tensors(model)
pcfg = pap_format.ModelConfig()
pcfg.vocab_size = cfg["vocab_size"]
pcfg.n_layer = cfg["n_layer"]
pcfg.d_model = cfg["d_model"]
pcfg.n_head = cfg["n_head"]
pcfg.d_ff = cfg["d_ff"]
pcfg.moe_n_experts = cfg["moe_n_experts"]
pcfg.moe_top_k = cfg["moe_top_k"]
pcfg.d_expert = cfg["d_expert"]
pcfg.max_seq_len = cfg["max_seq_len"]
pcfg.num_merges = len(merges)
pcfg.tie_weights = 0
pcfg.rmsnorm_eps = cfg["rmsnorm_eps"]
pcfg.moe_mask = list(cfg["moe_mask"])
os.makedirs(os.path.dirname(out), exist_ok=True)
pap_format.save_pap(out, pcfg, vocab, merges, tens)
print(f"exported random model -> {out}")
if __name__ == "__main__":
main()