Initial TileLang inference learning framework
这个仓库是一个面向学习的推理引擎实验框架:用真实 vLLM、真实 Qwen 模型和真实 MetaX C500 环境,演示如何把 TileLang decode attention kernel 接进 vLLM attention backend。
目标不是做一个完整生产 serving 系统,而是让新人能沿着一条清晰路径理解:
当前主线很简单:
vllm_metax
CUSTOM
FLASH_ATTN
在当前机器上,1.5B、3B、7B 模型都已经放在 /data/huggingface_home/models。第一次上手建议只跑单卡 1.5B。
/data/huggingface_home/models
# 1. 进入项目 cd /data/pd-sep-tutorial-metax # 2. 验证 TileLang kernel correctness python tests/test_compile_tilelang.py # 3. 用 CUSTOM backend 跑单卡 1.5B python serve.py \ --profile single \ --attention-backend CUSTOM \ --max-tokens 32 \ --temperature 0.0 \ --prompt '请用一句话介绍人工智能。' \ --enforce-eager # 4. 用 FLASH_ATTN baseline 对比 python serve.py \ --profile single \ --attention-backend FLASH_ATTN \ --max-tokens 32 \ --temperature 0.0 \ --prompt '请用一句话介绍人工智能。' \ --enforce-eager
看到类似下面的中文输出,就说明端到端链路已经跑通:
人工智能是模拟人类智能的技术,使计算机能够执行需要人类智能的任务...
# 内置学习 prompt,适合快速 smoke test python serve.py --profile single --auto --max-tokens 64 --enforce-eager # 交互式聊天 python serve.py --profile single --interactive --max-tokens 128 --enforce-eager # 双卡 3B python serve.py --profile dual --attention-backend CUSTOM --max-tokens 32 --enforce-eager # 四卡 7B python serve.py --profile quad --attention-backend CUSTOM --max-tokens 32 --enforce-eager # batch decode 基础路径 python serve.py --profile single --attention-backend CUSTOM --max-tokens 8 --batch-size 2 --repeat 2 --enforce-eager
serve.py --profile ... 会自动设置模型路径、tensor parallel 和默认 max_model_len。
serve.py --profile ...
max_model_len
single
/data/huggingface_home/models/Qwen2.5-1.5B-Instruct
dual
/data/huggingface_home/models/Qwen2.5-3B-Instruct
quad
/data/huggingface_home/models/Qwen2.5-7B-Instruct
也可以显式覆盖:
python serve.py --model /path/to/model --tp 1 --max-model-len 512 --attention-backend CUSTOM
当前机器可以直接验证模型目录:
du -sh /data/huggingface_home/models/Qwen2.5-1.5B-Instruct \ /data/huggingface_home/models/Qwen2.5-3B-Instruct \ /data/huggingface_home/models/Qwen2.5-7B-Instruct
换新机器时,推荐下载到固定目录:
mkdir -p /data/huggingface_home/models huggingface-cli download Qwen/Qwen2.5-1.5B-Instruct --local-dir /data/huggingface_home/models/Qwen2.5-1.5B-Instruct huggingface-cli download Qwen/Qwen2.5-3B-Instruct --local-dir /data/huggingface_home/models/Qwen2.5-3B-Instruct huggingface-cli download Qwen/Qwen2.5-7B-Instruct --local-dir /data/huggingface_home/models/Qwen2.5-7B-Instruct
下载后检查:
python -c 'from pathlib import Path; root=Path("/data/huggingface_home/models"); names=["Qwen2.5-1.5B-Instruct","Qwen2.5-3B-Instruct","Qwen2.5-7B-Instruct"]; [print(name, "OK" if (root/name/"config.json").exists() else "MISSING") for name in names]'
serve.py 会输出这些学习指标:
serve.py
latency_ms
llm.generate()
tokens
e2e_tok/s
ttft_ms
decode_tok/s
推荐用 bench.py 做可复现对比:
bench.py
# 1. 跑 1.5B / 3B / 7B 的 CUSTOM vs FLASH_ATTN python bench.py \ --profiles single dual quad \ --backends CUSTOM FLASH_ATTN \ --max-tokens 8 \ --repeat 3 \ --timeout 900 \ --json benchmark_results.json # 2. 扫 batch size python bench.py \ --profiles single \ --backends CUSTOM FLASH_ATTN \ --max-tokens 8 \ --repeat 5 \ --warmup-runs 2 \ --batch-sizes 1 2 4 \ --timeout 900 \ --json benchmark_batch_results.json # 3. 从已有 JSON 生成 Markdown 表格 python bench.py --report-from benchmark_results.json --markdown report.md
--repeat 会在同一个 vLLM engine 内连续生成,用来区分 cold first run 和 warm steady state。--warmup-runs 控制 warm_summary 丢弃多少个初始 repeat。
--repeat
--warmup-runs
warm_summary
2026-06-11 的短输出 benchmark 摘要:
batch decode 摘要:
完整 benchmark 说明见 docs/benchmark.md。
. ├── serve.py # 主入口:generate / auto / interactive / batch ├── bench.py # benchmark runner + JSON/Markdown report ├── profiles.py # 1.5B / 3B / 7B profile 与模型路径 ├── vllm_integration/ │ └── tilelang_backend.py # vLLM CUSTOM backend:prefill fallback + TileLang decode ├── tilelang_kernels/ │ └── attention/ │ ├── flash_attn_tilelang.py # TileLang FlashAttention,对照与 prefill 实验 │ └── page_attn_tilelang.py # TileLang PageAttention decode kernel ├── tests/ │ └── test_compile_tilelang.py # attention kernel correctness test └── docs/ ├── architecture.md # 架构和 decode contract └── benchmark.md # benchmark 方法和记录
建议按这个顺序读代码:
TileLangAttentionImpl.forward()
已经完成:
batch=2
batch=4
还在继续优化:
# 打印 decode block table、seq len 等信息 TILELANG_DEBUG_DECODE=1 python serve.py --profile single --attention-backend CUSTOM --max-tokens 8 --enforce-eager # 实验性启用 TileLang prefill;默认关闭 TILELANG_ENABLE_PREFILL=1 python serve.py --profile single --attention-backend CUSTOM --max-tokens 8 --enforce-eager
常见判断:
Using AttentionBackendEnum.CUSTOM backend.
bench.py --repeat
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
MetaX TileLang Inference Learning Framework
这个仓库是一个面向学习的推理引擎实验框架:用真实 vLLM、真实 Qwen 模型和真实 MetaX C500 环境,演示如何把 TileLang decode attention kernel 接进 vLLM attention backend。
目标不是做一个完整生产 serving 系统,而是让新人能沿着一条清晰路径理解:
当前主线很简单:
vllm_metaxMaca FlashAttention fallbackCUSTOMattention backendFLASH_ATTNbaseline 对比Quick Start
在当前机器上,1.5B、3B、7B 模型都已经放在
/data/huggingface_home/models。第一次上手建议只跑单卡 1.5B。看到类似下面的中文输出,就说明端到端链路已经跑通:
Common Runs
Model Profiles
serve.py --profile ...会自动设置模型路径、tensor parallel 和默认max_model_len。single/data/huggingface_home/models/Qwen2.5-1.5B-Instructdual/data/huggingface_home/models/Qwen2.5-3B-Instructquad/data/huggingface_home/models/Qwen2.5-7B-Instruct也可以显式覆盖:
Model Setup
当前机器可以直接验证模型目录:
换新机器时,推荐下载到固定目录:
下载后检查:
Benchmarks
serve.py会输出这些学习指标:latency_msllm.generate()端到端耗时tokense2e_tok/sttft_msdecode_tok/s推荐用
bench.py做可复现对比:--repeat会在同一个 vLLM engine 内连续生成,用来区分 cold first run 和 warm steady state。--warmup-runs控制warm_summary丢弃多少个初始 repeat。2026-06-11 的短输出 benchmark 摘要:
single/ 1.5B / TP=1dual/ 3B / TP=2quad/ 7B / TP=4batch decode 摘要:
完整 benchmark 说明见 docs/benchmark.md。
Project Map
Learning Path
建议按这个顺序读代码:
TileLangAttentionImpl.forward()如何分 prefill/decode。Current Status
已经完成:
CUSTOMbackend 端到端生成。batch=2接近 baseline,batch=4仍有约 11% 差距。bench.py支持 cold/warm JSON 记录、batch sweep 和 Markdown report。还在继续优化:
Debug Flags
常见判断:
Using AttentionBackendEnum.CUSTOM backend.表示 vLLM 已选中自定义 backend。bench.py --repeat的 warm summary。