wangzhaode / llm-export

llm-export can export llm model to onnx.
Apache License 2.0
187 stars 21 forks source link

microsoft/phi-2 #9

Closed Moxoo closed 8 months ago

Moxoo commented 8 months ago

大佬,后续有支持microsoft/phi-2的打算吗,如果导出microsoft/phi-2需要MNN新版python库支持吗

wangzhaode commented 8 months ago

这个模型没开源吧?有开源的消息嘛

Moxoo commented 8 months ago

这个模型没开源吧?有开源的消息嘛

https://huggingface.co/microsoft/phi-2 我也刚看到,应该是这个吧

wangzhaode commented 8 months ago

ok 模型已下载 确实可用 我明天支持一下

Moxoo commented 8 months ago

这个实现的话要参考哪些资料,主要是源码里的modeling_xxx.py吗,模型的结构是怎么看的,求大佬指点一下

wangzhaode commented 8 months ago

对 差不多你可以断点看一下具体的modeling代码 然后实现一个load函数基本就可以了

也可以直接print一下model就能看到具体的结构

Moxoo commented 8 months ago

对 差不多你可以断点看一下具体的modeling代码 然后实现一个load函数基本就可以了

也可以直接print一下model就能看到具体的结构

按照上面的方法确实看到了模型的结构,差不多把load函数写出来了,不过每个模型的past_kv_shape是怎么来的,还有block_dynamic_axes、model_dynamic_axes以及get_attention_mask和get_position_ids函数

Moxoo commented 8 months ago

@wangzhaode 大佬,phi支持是已经完成了吗 我拉了下最新的代码 跑不起来 oVyDfQxLpI

wangzhaode commented 8 months ago

master代码还不是完整版 现在模型在测试了

wangzhaode commented 8 months ago

现在可以测试和导出了 但是onnx的计算不对

Moxoo commented 8 months ago

好的大佬。 我昨天断点调试phi源码,看到有个init_shapes是[1,长度,2,32,80],导出代码里的past_kv_shape应该就是由这个决定的吧? 但是block和model的动态轴以及get_attention_mask、get_position_ids、forward这几个函数是怎么确定的? 5lPGyXWkW8

wangzhaode commented 8 months ago

git_attention_mask 返回的值 对应phi-2里面的causal_mask,因为第一个词和后续词生成的规则不一样所以在外部传入保证到处后的onnx正确; get_position_ids 返回值是为了对q, kv加入位置编码;位置编码需要知道当前生成的是第几个token,这个信息需要从外部传入;

wangzhaode commented 8 months ago

phi-2转到onnx目前应该没问题了,不过转mnn使用int4量化精度丢失太严重了

wangzhaode commented 8 months ago

使用对称量化转换出来的目前可以用,onnx导出也没问题了