Skip to content

Instantly share code, notes, and snippets.

@KerfuffleV2
Last active June 14, 2023 15:24
Show Gist options
  • Save KerfuffleV2/d072237b4a9386e80cdc302f923843db to your computer and use it in GitHub Desktop.
Save KerfuffleV2/d072237b4a9386e80cdc302f923843db to your computer and use it in GitHub Desktop.
Super quick and dirty ggml perp calculations
from decimal import Decimal
QO = ('q2_k', 'q3_ks', 'q3_km', 'q3_kl', 'q4_0', 'q4_1', 'q4_ks', 'q4_km', 'q5_0', 'q5_1', 'q5_ks', 'q5_km', 'q6_k', 'q8_0', 'f16',)
QS = {
'7B':{
'q2_k':( 6.7764, '2.67',),
'q3_ks':( 6.4571,'2.75'),
'q3_km':( 6.1503, '3.06'),
'q3_kl':(6.0869,'3.35'),
'q4_0':( 6.1565, '3.5'),
'q4_1':( 6.0912, '3.9'),
'q4_ks':( 6.0215, '3.56'),
'q4_km':(5.9601,'3.80'),
'q5_0':( 5.9862, '4.3'),
'q5_1':( 5.9481, '4.7'),
'q5_ks':( 5.9419, '4.33'),
'q5_km':(5.9208,'4.45'),
'q6_k':( 5.911, '5.15'),
'q8_0':( 5.907, '6.7'),
'f16':( 5.9066, '13.0'),
},
'13B': {
'q2_k':(5.8545, '5.13'),
'q3_ks':(5.6033, '5.27'),
'q3_km':( 5.4498, '5.88'),
'q3_kl':(5.4063,'6.45'),
'q4_0':( 5.3860, '6.8'),
'q4_1':( 5.3608, '7.6'),
'q4_ks':( 5.3404, '6.8'),
'q4_km':(5.3002,'7.32'),
'q5_0':( 5.2856, '8.3'),
'q5_1':( 5.2706, '9.1'),
'q5_ks':( 5.2785, '8.36'),
'q5_km':(5.2638,'8.60'),
'q6_k':( 5.2568, '9.95'),
'q8_0':( 5.2548, '13'),
'f16':( 5.2543, '25.0'),
},
'33B': {
'q2_k':( 4.7950, '12.93'),
'q3_ks':( 4.5048, '13.29'),
'q3_km':( 4.3594, '14.82'),
'q3_kl':( 4.3094,'16.25'),
'q4_ks':( 4.2486, '17.16'),
'q4_km':( 4.2081,'18.44'),
'q5_ks':( 4.1778, '21.05'),
'q5_km':(4.1675,'21.65'),
'q6_k':( 4.1598, '25.05'),
'f16':( 4.1557, '63.00'),
},
'65B': {
'q2_k':(4.1017, '25.65'),
'q3_ks':(3.8682, '26.35'),
'q3_km':( 3.6991, '29.40'),
'q4_km':(3.5836,'36.60'),
'q5_km':(3.5511,'43.00'),
'q6_k':( 3.5433, '49.75'),
'f16':( 3.5393, '125.00'),
},
}
PERPREF = Decimal(QS['7B']['f16'][0] - QS['13B']['f16'][0])
def percent(val, tot):
return Decimal(100.0) * (val / tot)
def calc(k):
vals = QS[k]
print('| name | +ppl | +ppl % | +ppl 13b to 7b % | size | size 16bit % | +ppl per -1G |')
print(('|-' * 7) + '|')
fqppl,fqsizestr = vals['f16']
fqsize = Decimal(fqsizestr)
result = []
for name in QO:
row = vals.get(name, None)
if row is None:
continue
ppl,sizestr = row
size = Decimal(sizestr)
sizereduction = fqsize - size
relppl = Decimal(ppl - fqppl)
pplperreduc = relppl / sizereduction if name != 'f16' else Decimal(0.0)
result.append({
'name': name,
'ppl': ppl,
'relppl': relppl,
'pplperc': percent(relppl, PERPREF),
'abspplperc': percent(Decimal(ppl), Decimal(fqppl)) - Decimal('100'),
'size': size,
'sizeperc': percent(size, fqsize),
'sizereduction': sizereduction,
'pplperreduc': pplperreduc,
})
return result
def render(vals):
for v in vals:
print('| {name:8} | {relppl:.4f} | {abspplperc:.3f}% | {pplperc:.3f}% | {size:<.2f}G | {sizeperc:<.2f}% | {pplperreduc:.6f} |'.format(**v))
for k in ('7B', '13B', '33B', '65B'):
print(f'\n\n## {k}\n')
render(calc(k))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment