Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

embedding、rerank模型加速推理 #70

Open
deku0818 opened this issue Jun 27, 2024 · 23 comments
Open

embedding、rerank模型加速推理 #70

deku0818 opened this issue Jun 27, 2024 · 23 comments

Comments

@deku0818
Copy link

使用了BCE很长时间,但是希望有更好的性能,看了此项目的Issues,发现有很多加速框架,但是没有这方面基础
不知道有没有这方面的教程,非常想学习一下
#9 (comment)

@shenlei1020
Copy link
Collaborator

感谢您的反馈~

  1. 首先bce的两个模型都是bert base规模,比其他large规模的模型,效率高大约3倍;

  2. 关于这两个模型高效推理,我们最近release出了一个版本(推理框架onnxruntime-gpu):

  1. 如果在集成上述高效推理方案有任务问题,欢迎在此issue提出!

@deku0818
Copy link
Author

感谢您的反馈~

  1. 首先bce的两个模型都是bert base规模,比其他large规模的模型,效率高大约3倍;
  2. 关于这两个模型高效推理,我们最近release出了一个版本(推理框架onnxruntime-gpu):
  1. 如果在集成上述高效推理方案有任务问题,欢迎在此issue提出!

感谢!这部分代码已经跑起来了,我发现推理的结果是不一样的,是因为模型转换丢失精度吗?

@deku0818
Copy link
Author

sentences = ["This is a test sentence.", "Another sentence for embedding."]
image
image
我进行了简单的测试,发现onnx 推理比SentenceTransformer还慢是为什么?

@shenlei1020
Copy link
Collaborator

shenlei1020 commented Jun 27, 2024

1、你的onnx模型是自己转的,还是直接下载我们开源的onnx模型?
2、如果是下载我们在qanything开源的onnx模型,是没问题的。注意是qanything最新放出来的embedding和reranker的onnx模型。
3、onnx和torch的结果稍许差异是正常的,看一下cos相似度是不是0.99,是的话就没问题。
4、推理慢的原因可能是:a、你的onnxruntime是cpu版本的,解决方案是先卸载onnxruntime,再pip install onnxruntime-gpu;b、确定onnxruntime-gpu的包是对的,用我们的推理代码,应该不会有问题的,注意看一下CUDAExecutionProvider是否成功。

@deku0818
Copy link
Author

1、你的onnx模型是自己转的,还是直接下载我们开源的onnx模型? 2、如果是下载我们在qanything开源的onnx模型,是没问题的。注意是qanything最新放出来的embedding和reranker的onnx模型。 3、onnx和torch的结果稍许差异是正常的,看一下cos相似度是不是0.99,是的话就没问题。 4、推理慢的原因可能是:a、你的onnxruntime是cpu版本的,解决方案是先卸载onnxruntime,再pip install onnxruntime-gpu;b、确定onnxruntime-gpu的包是对的,用我们的推理代码,应该不会有问题的,注意看一下CUDAExecutionProvider是否成功。

感谢指导,已经定位到原因了,应该是是cuda libcublasLt.so.11的问题,导致只使用了CPU

@deku0818
Copy link
Author

image
image
快了3倍

@deku0818
Copy link
Author

余弦相似度: 0.9999987920724557

@deku0818
Copy link
Author

image image 快了3倍

后面简单跑了下,平均快了将近20倍

@kbaicai
Copy link

kbaicai commented Jul 25, 2024

1、你的onnx模型是自己转的,还是直接下载我们开源的onnx模型? 2、如果是下载我们在qanything开源的onnx模型,是没问题的。注意是qanything最新放出来的embedding和reranker的onnx模型。 3、onnx和torch的结果稍许差异是正常的,看一下cos相似度是不是0.99,是的话就没问题。 4、推理慢的原因可能是:a、你的onnxruntime是cpu版本的,解决方案是先卸载onnxruntime,再pip install onnxruntime-gpu;b、确定onnxruntime-gpu的包是对的,用我们的推理代码,应该不会有问题的,注意看一下CUDAExecutionProvider是否成功。

请问 QAnything 最新的放出来的是指 docker 版本的(triton)还是python 版本的?还是两个都是最新,只不过一个是 triton 推理,一个是 onnxruntime-gpu 推理?

@bash99
Copy link

bash99 commented Aug 8, 2024

image image 快了3倍

你这边onnx比sentence_transformer快,请问都是跑在gpu上的吗?

我部署了 infinity-emb 加速推理框架,似乎inaai/jina-reranker-v2-base-multilingual的onnx的速度还不如torch引擎?

然后本地用netease-youdao/Rerank 下的onnx模型 和 HuggingFace的 maidalun1020/bce-reranker-base_v1模型对比(后者用 sentence_transformer 加载,指定了fp16模式)
执行起来两者速度差不多,是不是因为onnx缺省跑在32bit精度下?

@bash99
Copy link

bash99 commented Aug 8, 2024

感谢您的反馈~

  1. 首先bce的两个模型都是bert base规模,比其他large规模的模型,效率高大约3倍;
  2. 关于这两个模型高效推理,我们最近release出了一个版本(推理框架onnxruntime-gpu):
  1. 如果在集成上述高效推理方案有任务问题,欢迎在此issue提出!

这两个高效推理方案有无单独可部署的应用?甚至是支持动态批次的推理加速服务软件?

@shenlei1020
Copy link
Collaborator

bce-embedding高效推理:https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/embedding/embedding_onnx_backend.py

bce-reranker高效推理(包含我们长passages精排方案,被一些其他开源项目采用):https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/rerank/rerank_onnx_backend.py

现成的高效推理代码,直接抄过去就行了

@bash99
Copy link

bash99 commented Aug 12, 2024

bce-embedding高效推理:https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/embedding/embedding_onnx_backend.py

bce-reranker高效推理(包含我们长passages精排方案,被一些其他开源项目采用):https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/rerank/rerank_onnx_backend.py

现成的高效推理代码,直接抄过去就行了

我抄过去之后,rerank 本地测试没比sentence_transformer快啊,本地卡是3060,环境是windows 10/wsl2。

修正:换到服务器环境 2080ti + cuda 12.4下,并发到2确实会快(3060上只快一点),不过并发4没太多提升了,可能更好的显卡高并发会更明显。

测试代码单文件 test.py

测试结果:RTX 3060 / wsl2
onnx backend
函数 test_reranker_speed 执行耗时: 5.512723922729492 秒 并发1
函数 test_reranker_speed 执行耗时: 4.440540552139282 秒 并发2
函数 test_reranker_speed 执行耗时: 4.043043375015259 秒 并发4
sentence_transformer backend
函数 test_reranker_speed 执行耗时: 5.733941078186035 秒 并发1
函数 test_reranker_speed 执行耗时: 5.786724328994751 秒 并发2
函数 test_reranker_speed 执行耗时: 5.8787829875946045 秒 并发4

RTX 2080ti / ubuntu 22.04
onnx backend
函数 test_reranker_speed 执行耗时: 4.926323652267456 秒 并发1
函数 test_reranker_speed 执行耗时: 2.642716407775879 秒 并发2
函数 test_reranker_speed 执行耗时: 2.3108112812042236 秒 并发4
sentence_transformer backend
函数 test_reranker_speed 执行耗时: 3.9571597576141357 秒 并发1
函数 test_reranker_speed 执行耗时: 3.4588193893432617 秒 并发2
函数 test_reranker_speed 执行耗时: 4.589118242263794 秒 并发4

@shenlei1020
Copy link
Collaborator

确认一下你用onnx推理是用的onnxruntime-gpu,而不是cpu版本,看一下providers参数

@bash99
Copy link

bash99 commented Aug 13, 2024

确认一下你用onnx推理是用的onnxruntime-gpu,而不是cpu版本,看一下providers参数

推理时我观察到 nvidia-smi 显示的gpu usage是99%,没注意cpu占用。

另外sentence_transformer是用torch.float_16 模式加载的,缺省模式会慢一倍多。

@lycfight
Copy link

lycfight commented Aug 15, 2024

确认一下你用onnx推理是用的onnxruntime-gpu,而不是cpu版本,看一下providers参数

安装onnxruntime-gpu,仍未gpu运行。

[E:onnxruntime:Default, provider_bridge_ort.cc:1480 TryGetProviderInfo_CUDA] /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc:1193 onnxruntime::Provider& onnxruntime::ProviderLibrary::Get() [ONNXRuntimeError] : 1 : FAIL : Failed to load library libonnxruntime_providers_cuda.so with error: libcublasLt.so.11: cannot open shared object file: No such file or directory

[W:onnxruntime:Default, onnxruntime_pybind_state.cc:747 CreateExecutionProviderInstance] Failed to create CUDAExecutionProvider. Please reference https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements to ensure all dependencies are met.

缺少cudatoolkit
参考(https://blog.csdn.net/jinxianwei1999/article/details/134705262)

@estuday
Copy link

estuday commented Sep 3, 2024

1、你的onnx模型是自己转的,还是直接下载我们开源的onnx模型? 2、如果是下载我们在qanything开源的onnx模型,是没问题的。注意是qanything最新放出来的embedding和reranker的onnx模型。 3、onnx和torch的结果稍许差异是正常的,看一下cos相似度是不是0.99,是的话就没问题。 4、推理慢的原因可能是:a、你的onnxruntime是cpu版本的,解决方案是先卸载onnxruntime,再pip install onnxruntime-gpu;b、确定onnxruntime-gpu的包是对的,用我们的推理代码,应该不会有问题的,注意看一下CUDAExecutionProvider是否成功。

你好,我在qanything上没找到开源的onnx模型,但在huggingface上发现了一个6个月前上传的,可以使用吗

@EvanSong77
Copy link

bce-embedding高效推理:https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/embedding/embedding_onnx_backend.py

bce-reranker高效推理(包含我们长passages精排方案,被一些其他开源项目采用):https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/rerank/rerank_onnx_backend.py

现成的高效推理代码,直接抄过去就行了

您好,我在进行压测的时候发现onnx模型显存会不断增加不会释放,这种情况请问如何解决啊

@akai-shuuichi
Copy link

能否再将onnx模型转换为TensorRT再进一步加速呢?

@EvanSong77
Copy link

能否再将onnx模型转换为TensorRT再进一步加速呢?

不建议用TensorRT了,兼容性问题较多,性能提示不是很明显,建议等这个vLLM-encoder分支合并(目前没有合并只支持单线程推理,性能非常好),使用kv cache,性能比onnx好很多

@EvanSong77
Copy link

bce-embedding高效推理:https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/embedding/embedding_onnx_backend.py

bce-reranker高效推理(包含我们长passages精排方案,被一些其他开源项目采用):https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/rerank/rerank_onnx_backend.py

现成的高效推理代码,直接抄过去就行了

您好,我在进行压测的时候发现onnx模型显存会不断增加不会释放,这种情况请问如何解决啊

已解决

@Odimmsun
Copy link

bce-embedding高效推理:https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/embedding/embedding_onnx_backend.py

bce-reranker高效推理(包含我们长passages精排方案,被一些其他开源项目采用):https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/rerank/rerank_onnx_backend.py

现成的高效推理代码,直接抄过去就行了

您好,我在进行压测的时候发现onnx模型显存会不断增加不会释放,这种情况请问如何解决啊

已解决

您好,求教如何解决的,我好像也有类似的问题

@EvanSong77
Copy link

bce-embedding高效推理:https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/embedding/embedding_onnx_backend.py

bce-reranker高效推理(包含我们长passages精排方案,被一些其他开源项目采用):https://github.com/netease-youdao/QAnything/blob/qanything-python/qanything_kernel/connector/rerank/rerank_onnx_backend.py

现成的高效推理代码,直接抄过去就行了

您好,我在进行压测的时候发现onnx模型显存会不断增加不会释放,这种情况请问如何解决啊

已解决

您好,求教如何解决的,我好像也有类似的问题

增加一个运行时缓存处理策略,microsoft/onnxruntime#19445
然后最好设置一下最大显存,https://blog.csdn.net/xiao_ling_yun/article/details/139989573
建议你采用固定batch的方式进行推理

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants