模型的generate方法 #611
jingyaogong
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
收到了几次这样的问题反馈:
代码里调用的
model.generate()的这个generate函数到底在哪?之前版本为了精简代码,移除了自定义的
generate实现,默认依赖transformers的GenerationMixin如果想自己掌控采样的逻辑,可在
MiniMindForCausalLM类中添加如下方法:好处是
GenerationMixin的生成框架(例如transformers>=4.48升级后,past_key_values初始化发生变动,这边必须同步适配)坏处是
transformers未来更新后很可能需要手动适配GenerationMixin接口后续
目前这个实现足以覆盖日常使用场景。长期来看有两条路:
generate,保持代码简洁GenerationMixin适配本身不难(无非是循环调用 forward 进行逐 token 的自回归采样),但会让 model 结构变得臃肿(甚至比模型全部代码还长,具体可以参考 https://github.com/huggingface/transformers/blob/main/src/transformers/generation/utils.py#L2252 ),不利于维护和学习。
未来会根据具体情况选择保留与否——尽可能维护一个自己实现的
generate,但当更多特性加入、臃肿程度超过权衡点时,会直接继承GenerationMixin。保留此条 discussion 用于解释这个问题
Beta Was this translation helpful? Give feedback.
All reactions