thunlp / InfLLM

The code of our paper "InfLLM: Unveiling the Intrinsic Capacity of LLMs for Understanding Extremely Long Sequences with Training-Free Memory"
MIT License
269 stars 21 forks source link

是否支持多batch推理? #34

Closed ChuanhongLi closed 4 months ago

ChuanhongLi commented 4 months ago

您好,请问下,是否支持多batch推理?

guyan364 commented 4 months ago

inf llm attention 本身支持,batch size 会 map 到 num units 但是我们之前测试 batch 推理性能一般,所以没有提供这个接口。

如果需要 batch 推理,我推荐你为不同的数据使用不同的 ContextManager。 这样可以支持 left padding 的主流推理设置。 在 append 到 context manager 的时候,skip 前面的 padding。 需要修改 inf_llm/attention/inf_llm.py(为每个数据使用单独 ContextManager) 以及 inf_llm/utils/patch_hf.py (需要给出 left padding 的位置,或许可以使用 attention_mask)

另外 greedy search 没有写 batch 的输入,需要写一下 left padding

ChuanhongLi commented 4 months ago

inf llm attention 本身支持,batch size 会 map 到 num units 但是我们之前测试 batch 推理性能一般,所以没有提供这个接口。

如果需要 batch 推理,我推荐你为不同的数据使用不同的 ContextManager。 这样可以支持 left padding 的主流推理设置。 在 append 到 context manager 的时候,skip 前面的 padding。 需要修改 inf_llm/attention/inf_llm.py(为每个数据使用单独 ContextManager) 以及 inf_llm/utils/patch_hf.py (需要给出 left padding 的位置,或许可以使用 attention_mask)

另外 greedy search 没有写 batch 的输入,需要写一下 left padding

感谢回复! 试问下,能否共享下你们之前测试batch推理时用的测试代码(如果方便的话),我们也跑下我们模型的性能,或者可以一起基于你们测试代码尝试优化一下?

guyan364 commented 4 months ago

感谢回复! 试问下,能否共享下你们之前测试batch推理时用的测试代码(如果方便的话),我们也跑下我们模型的性能,或者可以一起基于你们测试代码尝试优化一下?

好的 generator.txt 这份代码使用 right padding 进行推理,为了保证所有 decoding 部分进行 per token 的查询,如果有一组数据开始生成,就会整体使用 1 的 chunk size,如果使用 left padding 应该效率会高一些

ChuanhongLi commented 4 months ago

感谢回复! 试问下,能否共享下你们之前测试batch推理时用的测试代码(如果方便的话),我们也跑下我们模型的性能,或者可以一起基于你们测试代码尝试优化一下?

好的 generator.txt 这份代码使用 right padding 进行推理,为了保证所有 decoding 部分进行 per token 的查询,如果有一组数据开始生成,就会整体使用 1 的 chunk size,如果使用 left padding 应该效率会高一些

谢谢!我用 prompt = ['你好!', '你好,请问你可以做什么?'] 进行测试,第一个问题输出的全是<|im_start|>,第二个问题输出正常;如果是改为 prompt = ["你好,请问你可以做什么?", "你好,请问你可以做什么?"],则两个输出都正常;貌似是只要输入的prompt长度不一致,就有点问题;请问你们之前有碰到过这个问题吗?

ChuanhongLi commented 4 months ago

感谢回复! 试问下,能否共享下你们之前测试batch推理时用的测试代码(如果方便的话),我们也跑下我们模型的性能,或者可以一起基于你们测试代码尝试优化一下?

好的 generator.txt 这份代码使用 right padding 进行推理,为了保证所有 decoding 部分进行 per token 的查询,如果有一组数据开始生成,就会整体使用 1 的 chunk size,如果使用 left padding 应该效率会高一些

谢谢!我用 prompt = ['你好!', '你好,请问你可以做什么?'] 进行测试,第一个问题输出的全是<|im_start|>,第二个问题输出正常;如果是改为 prompt = ["你好,请问你可以做什么?", "你好,请问你可以做什么?"],则两个输出都正常;貌似是只要输入的prompt长度不一致,就有点问题;请问你们之前有碰到过这个问题吗?

Qwen batch推理的问题,已经正常,谢谢!