一个用 Gleam 编写的极简命令行估算器,用于根据内存规格粗略估算本地推理大语言模型 (LLM) 的理论 tokens/s 上限。(目前算力不是瓶颈,主要是内存速度瓶颈)。多通道自行乘以通道数在输入。
适合做“我这台机器大概能跑多快”级别的第一反应估算;忽略了 KV cache、计算算力、框架/调度开销等大量现实因素,请勿当作实测值。
- 交互输入内存速度 (MT/s),即时输出多个主流参数规模模型的估算吞吐
- 简单清晰的公式,可按需自行修改常量(模型集合、效率、量化精度等)
- 纯 CLI,依赖极少,适合快速试验或嵌入更大工具链
作为库添加(当前主要是 CLI,用作库可直接调用 llm_calc.main
或自行复制核心逻辑):
gleam add llm_calc@1
或克隆仓库本地运行:
git clone <repo-url>
cd llm_calc
gleam run
交互:
gleam run
请输入内存速度 MT/s (例如 3200): 3200
估算 tokens/s:
7B: 128.0 tok/s
12B: 74.66666666666667 tok/s
32B: 28.0 tok/s
70B: 12.8 tok/s
(数值示例因效率或常量调整可能不同,仅供格式参考)
设:
- 内存速度:
S
(MT/s) - 通道数:
C
(当前代码固定 2,可修改) - 单次传输字节:DDR4/DDR5 按 64 bit = 8 bytes 近似
- 有效利用率:
E
(默认 0.7,粗略折算开销) - 模型参数规模(十亿):
M
(Billion params) - 每参数字节:
B
(int4 量化近似 0.5 byte/param)
步骤:
- 原始带宽 (GB/s):
Raw = S * 1_000_000 * 8 * C / 1_000_000_000
- 有效带宽:
BW = Raw * E
- 每生成 1 token 需读参数:
Bytes_per_token = M * 1_000_000_000 * B
- Tokens/s:
TPS = BW * 1_000_000_000 / Bytes_per_token
假设完全受内存带宽限制、前向一次全参遍历、忽略算力瓶颈与缓存命中;真实场景中实际速度通常更低。
在 src/llm_calc.gleam
中可修改:
models
:需要估算的参数规模数组bytes_per_param
:不同量化精度(例如 int8=1.0, fp16=2.0, bf16≈2.0, fp32=4.0)efficiency
:经验效率系数- 通道数:当前硬编码为
2
,可改为从输入中读取
- 从命令行参数读取 MT/s、通道数、效率、量化精度
- 支持自定义模型规模列表
- 输出对齐/表格化 & JSON 模式
- 增加基于算力 (FLOPS) 的上限估算并取 min(bandwidth, compute)
- 发布描述与仓库信息到
gleam.toml
- Fork & 创建分支
- 修改 / 添加测试
- 运行
gleam test
确认通过 - 提交 PR 并说明动机
任何改进(文档、国际化、参数可配置化)都欢迎。
gleam run # 运行交互 CLI
gleam test # 运行测试
尚未在 gleam.toml
中声明,请根据需要添加(例如 Apache-2.0 / MIT)。
Hex 文档(若已发布):https://hexdocs.pm/llm_calc
欢迎提出 issue 讨论改进思路。