在线计算器

LlamaFactory 显存档位对照

同一张官方表里的两套口径,一起摆出来,差多少直接算给你看。

表里的数字全是官方估算值

LlamaFactory README 在这张硬件表上方原文标注了 * estimated(估算)。表内所有数值均为官方估算,不是实测显存占用。

表里有具名列的四个档位

7B 正好命中表里的具名列,所以「表内值」有数,可以和公式值逐行对照。 这一档下,6 行里有 6 行两个口径对不上。

方法Bits通用列公式公式值表内值差值(表内 − 公式)
Full (bf16 或 fp16)3218x126 GB120 GB6 GB-4.8%
Full (pure_bf16)168x56 GB60 GB+4 GB+7.1%
Freeze / LoRA / GaLore / APOLLO / BAdam / OFT162x14 GB16 GB+2 GB+14.3%
QLoRA / QOFT8x7 GB10 GB+3 GB+42.9%
QLoRA / QOFT4x/23.5 GB6 GB+2.5 GB+71.4%
QLoRA / QOFT2x/41.75 GB4 GB+2.25 GB+128.6%

这一档下,两个口径逐条对不上

  • Full (bf16 或 fp16)32 bits):表内 120 GB,按通用列 18x 算是 126 GB,表内值低于公式值 6 GB。
  • Full (pure_bf16)16 bits):表内 60 GB,按通用列 8x 算是 56 GB,表内值高于公式值 4 GB。
  • Freeze / LoRA / GaLore / APOLLO / BAdam / OFT16 bits):表内 16 GB,按通用列 2x 算是 14 GB,表内值高于公式值 2 GB。
  • QLoRA / QOFT8 bits):表内 10 GB,按通用列 x 算是 7 GB,表内值高于公式值 3 GB。
  • QLoRA / QOFT4 bits):表内 6 GB,按通用列 x/2 算是 3.5 GB,表内值高于公式值 2.5 GB。
  • QLoRA / QOFT2 bits):表内 4 GB,按通用列 x/4 算是 1.75 GB,表内值高于公式值 2.25 GB。

这里只陈述差异本身,不推断哪一列「才是对的」,也不解释差异的来由——README 没有说,我们也没有跑过。

它算不出什么

这张表没有建模序列长度、batch size、梯度检查点、优化器状态卸载、并行策略与多模态输入,因此它算不出「你的卡够不够」。本工具不做这个判断。

数据来源:LlamaFactory README 的 Hardware Requirement 表,六行方法与四个具名列的数值均照抄自该表, 未做换算或修正;公式值 = 参数量 × 该行通用列系数(18x / 8x / 2x / x / x/2 / x/4)。 参数量输入上限 2000B,只为兜住误输入。

这个工具算的是什么

它做的事情只有一件:把 LlamaFactory README 的 Hardware Requirement 表原样搬过来, 按你填的参数量,同时给出两个数——一个是该表具名列里那格的原值, 一个是用该表通用列给出的系数乘出来的值——然后把两者的差算出来。

听上去有点绕,但这正是它存在的理由。那张表本身就有两套写法: 一套是按几个常见参数量分好的具名列,格子里直接是 GB 数; 另一套是一列通用表达式,写成参数量乘以某个系数的形式,供表里没列到的参数量套用。

问题在于,这两套写法算出来的结果对不上,而且不是个别格子对不上。 你在网上看到的「某某参数量微调需要多少显存」,很可能就是从其中一列抄的—— 抄哪一列,结论差得不小。这个页面就是把两列摆在一起,让这件事变得可见。

数字从哪来

全部来自 LlamaFactory 仓库 README 的硬件需求表。 表里的方法档位、Bits 列、通用列的系数表达式、以及各具名列的 GB 数值, 都是逐格转录的,没有做任何换算、四舍五入或者「修正」。 公式值那一列是页面现算的,算法就是参数量乘以该行通用列的系数,没有第二套模型。

还有一处必须一起搬过来的东西:README 在这张表的上方标了 * estimated。 也就是说,表里所有数值都是官方给的估算,不是实测占用。 这句限定最容易在转述中掉队,所以工具把它放在最顶上,不折叠也不隐藏。

本站没有运行过 LlamaFactory 的任何一次训练。这个页面上不存在任何来自我们自己机器的数字, 也不会有「实测下来大约是多少」这类说法——没测就是没测。

怎么用

第一步,填参数量或者点快捷按钮。 几个快捷按钮对应的正是表里有具名列的那几个档位。 点中它们时,表内值那一列会出现原始格子的数值,差值列同时高亮; 填其它数值时,具名列没有对应格子,表内值那列会明确写「表内无此档」。

第二步,横着看一行,别只看一个数。 一行里公式值和表内值同时在,差值列就是它们的差与相对比例。 你要拿去引用的时候,把这两个数连同 estimated 的限定一起引, 比单独甩一个 GB 数负责得多。

第三步,竖着看一列,判断量级关系。 从全参微调往下到低比特量化档,量级差异是这张表最有价值的信息之一—— 它告诉你换方法档位能省下的是一个数量级还是几个百分点。 两套口径里,档位从上往下都是逐行降的,先后顺序不会因为你抄了哪一列而颠倒; 但具体差几倍,两列算出来并不相同——要引用倍数,就得说清是按哪一列算的。

第四步,看到别人给的显存数字,回来对一下。 很多二手结论没写清楚出处。放到这里比一比,多半能认出它抄的是哪一列, 顺带也能发现对方有没有把 estimated 这个前提一起带上。

它算不了什么

它算不出「你的卡够不够」。 这张表没有建模序列长度、batch size、梯度检查点、优化器状态卸载、并行策略与多模态输入, 而这几项恰恰是把显存峰值推上去的主要力量。同一个参数量、同一个方法档位, 序列长度翻一倍,或者把梯度检查点关掉,实际占用就不是这个量级了。

所以这个页面不提供显卡型号库、不给推荐档位、不做「能不能跑」的判断。 不是做不出界面,是做出来就是在拿一张标了 estimated 的表去替你下一个它承担不起的结论。

它也不解释两套口径为什么对不上。 README 没有给出解释,我们没有跑过对应代码,所以页面只陈述差异的方向和大小, 不推断哪一列「才是对的」、不编造成因。看到有人言之凿凿地解释这个差异, 先问一句依据是哪个文件的哪一行。

想按顺序把 LlamaFactory 的数据格式、方法档位和训练参数过一遍, 可以从 LlamaFactory 专题进去读。

常见问题

为什么同一张表要给两套口径,直接给一个数不行吗?

LlamaFactory README 的 Hardware Requirement 表里,既有按参数量具名的那几列原始格子,也有一列写成系数表达式的通用列。把通用列的系数乘上具名列对应的参数量,得到的结果与具名列格子里的数值逐格都对不上。这个页面把两套口径同时列出来,并把差值算给你看。只保留其中一套,等于我们替官方判定了「哪一列才算数」——README 没有给出这个结论,本站也没有跑过 LlamaFactory 的任何一次训练,给不出依据。所以这里只陈述差异,不解释原因、不站队。

表里的数字是实测显存占用吗?

不是。README 在这张硬件表的上方原文标注了 * estimated,也就是「估算」。工具顶部把这句限定固定显示出来,正是因为它极容易在转述中被丢掉——一旦丢掉,读者就会把估算值当成实测基准去采购显卡或者据此判断某个方案跑不跑得动。本站没有运行过 LlamaFactory,页面上不会出现任何来自我们自己测试的数字,表里的每一格都照抄自该 README,未做换算或修正。

我填了一个不在具名列里的参数量,为什么「表内值」是空的?

因为那一列本来就没有格子可抄。具名列只覆盖表里列出的那几个参数量档位(工具里的快捷按钮就是它们),其余任何数值都不在表内。这时页面只能给出按通用列系数算出的公式值,「表内值」一列会明确写成「表内无此档」,差值列自然也没有内容。这是刻意的:与其把最近的档位拿来近似,不如老实告诉你这里没有官方原值——近似出来的数看起来像事实,实际上是我们编的。

算出来的 GB 数,能判断我的显卡够不够吗?

不能,这个页面也不做这个判断。这张表没有建模序列长度、batch size、梯度检查点、优化器状态卸载、并行策略与多模态输入,而这些恰恰是决定显存峰值的主要因素。同样是同一个参数量同一个方法档位,序列长度翻倍或者关掉梯度检查点,实际占用就会显著变化。所以页面里不会出现显卡型号库,也不会给「推荐档位」或者「这张卡能不能跑」的结论。它的用途是把两套官方口径摆在一起、把差值显式化,帮你判断读到的某个显存数字是从哪一列抄来的。

那这个工具到底该怎么用?

三种典型用法。第一,你在别处看到「某某参数量做 QLoRA 要多少 GB」,回到这里对一下,看它是通用列公式值还是具名列表内值——两者对不上,来源不同结论就不同。第二,你要做技术选型汇报,把两套口径连同 estimated 标注一起贴上去,比只贴一个数字更经得起追问。第三,你想快速看清各方法档位之间的量级关系,比如全参微调与低比特量化档之间差多少倍。要注意的是,两套口径里档位的先后顺序一致(从上往下逐行降),但具体差几倍两列算出来并不相同,引用倍数时同样要说清是按哪一列算的。

想把 LlamaFactory 真正调明白?

从数据格式到方法档位,奇连 AI 的 LlamaFactory 专题按顺序排好了。

进专题