一代人有一代人的量化要看(大嘘)
def stat_input_hook(m, x, y, name):
if isinstance(x, tuple):
x = x[0]
stat_tensor(name, x)
stat_weight(name, m.weight)
入参里的m, x, y似乎是固定的;在推理前注册这个hook:
for name, m in model.named_modules():
if isinstance(m, nn.Linear):
hooks.append(
m.register_forward_hook(
functools.partial(stat_input_hook, name=name))
)
在推理结束后再删除这个hook:
for h in hooks:
h.remove()
在hook里打断点观察,发现y就是m(x)。
[ ] 没看dataset里具体是怎么load数据的,看起来是直接采样了几个东西
[ ] 为什么在初始化tokenizer和model后要再搞个lm_model?这个是干什么的?