Skip to content

dbian/llm_calc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

llm_calc

一个用 Gleam 编写的极简命令行估算器,用于根据内存规格粗略估算本地推理大语言模型 (LLM) 的理论 tokens/s 上限。(目前算力不是瓶颈,主要是内存速度瓶颈)。多通道自行乘以通道数在输入。

Package Version Hex Docs

适合做“我这台机器大概能跑多快”级别的第一反应估算;忽略了 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)

步骤:

  1. 原始带宽 (GB/s):Raw = S * 1_000_000 * 8 * C / 1_000_000_000
  2. 有效带宽:BW = Raw * E
  3. 每生成 1 token 需读参数:Bytes_per_token = M * 1_000_000_000 * B
  4. 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

🤝 贡献

  1. Fork & 创建分支
  2. 修改 / 添加测试
  3. 运行 gleam test 确认通过
  4. 提交 PR 并说明动机

任何改进(文档、国际化、参数可配置化)都欢迎。

🧪 开发

gleam run    # 运行交互 CLI
gleam test   # 运行测试

📄 许可证

尚未在 gleam.toml 中声明,请根据需要添加(例如 Apache-2.0 / MIT)。

🔗 文档

Hex 文档(若已发布):https://hexdocs.pm/llm_calc


欢迎提出 issue 讨论改进思路。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published