输入
NVIDIA 的 DGX Spark 性能文章报告,Llama 3.3 70B 的 QLoRA 微调(PyTorch,序列长度 2048,批大小 8,跑 64 步)的「peak tokens/sec」是每秒 759.79 个 token。文章把它定义为批大小 × 步数 × 序列长度 ÷ 总训练时间。时间等于 token 数除以吞吐,费用等于时间乘以小时价。我们用写这篇文章时单节点的按需价,每小时 0.75 美元。
tokens = 100_000_000
tokens_per_second = 759.79 # NVIDIA:Llama 3.3 70B QLoRA,序列 2048,批大小 8,64 步
hours = tokens / tokens_per_second / 3600
print(round(hours, 1), round(hours * 0.75, 2)) # 36.6 小时,$27.42估算
| 训练 token 数 | 估算耗时 | 估算费用 |
|---|---|---|
| 1000 万 | 约 3.7 小时 | 约 $2.74 |
| 1 亿 | 约 36.6 小时 | 约 $27.42 |
| 10 亿 | 约 366 小时 | 约 $274 |
另外两次公布的微调,用同样的算术
NVIDIA 在同一篇文章里还公布了另外两次微调。下面是按各自公布的吞吐,训练 10 亿个 token 要多久。
| 训练任务 | 公布的 tokens 每秒 | 小时数 | 费用 |
|---|---|---|---|
| Llama 3.2 3B,全量微调 | 13,519.54 | 约 20.5 | 约 $15.41 |
| Llama 3.1 8B,LoRA | 6,969.59 | 约 39.9 | 约 $29.89 |
| Llama 3.3 70B,QLoRA | 759.79 | 约 366 | 约 $274 |
为什么实际结果可能不同
- 这个数字来自一个配置下只跑 64 步的测量,是一个数据点,不是保证。
- 估算只算了训练本身。加载模型、评估、保存检查点和试验设置都要额外的时间。
- 你的序列长度和批大小可能不同,吞吐会随之变化。
- 软件版本会改变结果。公布的数字对应的是测量当时的版本。
用这张表来定预算。然后先用几千个 token 做一次短测试,按你自己实测的吞吐来外推。
实际中的 token
训练用的 token 不等于字。中文通常一个字对应一个或多个 token,具体取决于分词器;英文平均每个词略多于一个 token。要统计你自己的数据集,请用你打算训练的模型的分词器跑一遍。
常见问题
微调一个 70B 模型要花多少钱?
按 NVIDIA 公布的每秒 759.79 个 token 和每小时 0.75 美元算,1 亿个训练 token 约 36.6 小时、约 27 美元。实际可能不同,所以先测一小段。