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

关于ONNX转换 #9

Open
lingffff opened this issue Apr 14, 2023 · 17 comments
Open

关于ONNX转换 #9

lingffff opened this issue Apr 14, 2023 · 17 comments

Comments

@lingffff
Copy link

Hi,
我看到目前的ONNX转换生成了很多个ONNX,使用很不方便。
是否有办法将主体部分(README图绿色部分)转换成一个大的ONNX呢?

@tpoisonooo
Copy link
Owner

单个 onnx 文件不能超过 2GB onnx/onnx#3275
想单个 onnx 结果,

  1. 首先改一下 pb 代码里的变量;
  2. 然后 torch.onnx.export 加在这里 https://github.com/tpoisonooo/transformers/blob/a515d0a77c769954ac2f0151a2a99c04d8d6cf95/src/transformers/models/llama/modeling_llama.py#L820

但中间的 for 和 if 你就要自己处理。

或者给个 zero tensor past_key,自己削掉里面的 if

@tpoisonooo
Copy link
Owner

@lingffff 目前 onnx 的设计并不完全适用 LLM

@RiskySignal
Copy link

@tpoisonooo 请教下,那现在有适合的LLM(特别是llama)在GPU上优化推理过程的方案嘛?
我查了FastTransformer、Transformer-Deploy这些方案,应该都是不支持的;

@lingffff
Copy link
Author

单个 onnx 文件不能超过 2GB onnx/onnx#3275 想单个 onnx 结果,

  1. 首先改一下 pb 代码里的变量;
  2. 然后 torch.onnx.export 加在这里 https://github.com/tpoisonooo/transformers/blob/a515d0a77c769954ac2f0151a2a99c04d8d6cf95/src/transformers/models/llama/modeling_llama.py#L820

但中间的 for 和 if 你就要自己处理。

或者给个 zero tensor past_key,自己削掉里面的 if

Hi @tpoisonooo ,

ONNX对2GB以上的模型是通过将权重拆分成单独的weights文件解决的,在使用时可以通过唯一的onnx读入(如torch.onnx.export大模型就会生成这样一系列文件)。应该有办法生成这样的ONNX?

另外,我看到README图里面绿色部分是没有if/for的,是否可以把这一部分作为整体生成上述onnx?

@tpoisonooo
Copy link
Owner

可以。 onnx 支持 for/if,但如果这么做的话。为啥不直接用 torch 呢。

@tpoisonooo
Copy link
Owner

@tpoisonooo 请教下,那现在有适合的LLM(特别是llama)在GPU上优化推理过程的方案嘛? 我查了FastTransformer、Transformer-Deploy这些方案,应该都是不支持的;

FastTransformer、 OpenAI/Triton 都支持 LLM 。

@tpoisonooo
Copy link
Owner

@RiskySignal

@lingffff
Copy link
Author

可以。 onnx 支持 for/if,但如果这么做的话。为啥不直接用 torch 呢。

ONNX作为中间格式,做部署会方便些,我在尝试往TensorRT转

@tpoisonooo
Copy link
Owner

可以。 onnx 支持 for/if,但如果这么做的话。为啥不直接用 torch 呢。

ONNX作为中间格式,做部署会方便些,我在尝试往TensorRT转

目前的 “ onnx 分散片” 是能直接转成功的。

@lingffff
Copy link
Author

可以。 onnx 支持 for/if,但如果这么做的话。为啥不直接用 torch 呢。

ONNX作为中间格式,做部署会方便些,我在尝试往TensorRT转

目前的 “ onnx 分散片” 是能直接转成功的。

感谢!我也成功转出来了,请问你试过 “ onnx 分散片” 转TRT之后,推理结果正确吗?

@lingffff
Copy link
Author

可以。 onnx 支持 for/if,但如果这么做的话。为啥不直接用 torch 呢。

ONNX作为中间格式,做部署会方便些,我在尝试往TensorRT转

目前的 “ onnx 分散片” 是能直接转成功的。

感谢!我也成功转出来了,请问你试过 “ onnx 分散片” 转TRT之后,推理结果正确吗?

我这里是能用TRT做inference了,但是decoder-merge-0的输出结果就已经不对了

@tpoisonooo
Copy link
Owner

可以。 onnx 支持 for/if,但如果这么做的话。为啥不直接用 torch 呢。

ONNX作为中间格式,做部署会方便些,我在尝试往TensorRT转

目前的 “ onnx 分散片” 是能直接转成功的。

感谢!我也成功转出来了,请问你试过 “ onnx 分散片” 转TRT之后,推理结果正确吗?

我这里是能用TRT做inference了,但是decoder-merge-0的输出结果就已经不对了

发了个 issue 给 TRT, NVIDIA/TensorRT#2928 🤗

@tpoisonooo tpoisonooo pinned this issue May 9, 2023
@chenqy4933
Copy link

@tpoisonooo 可以针对这种大模型,重新定义一种模型结构么,比如图结构用一个jeson来记录,weights单独保存在一个文件中,这样就。另外就是大模型一般都是几十层的 attention,定义一种循环的表示方式?

@xxllp
Copy link

xxllp commented May 24, 2023

@tpoisonooo 请教下,那现在有适合的LLM(特别是llama)在GPU上优化推理过程的方案嘛? 我查了FastTransformer、Transformer-Deploy这些方案,应该都是不支持的;

FastTransformer、 OpenAI/Triton 都支持 LLM 。

效果如何,有很大提升吗

@tpoisonooo
Copy link
Owner

@tpoisonooo 请教下,那现在有适合的LLM(特别是llama)在GPU上优化推理过程的方案嘛? 我查了FastTransformer、Transformer-Deploy这些方案,应该都是不支持的;

FastTransformer、 OpenAI/Triton 都支持 LLM 。

效果如何,有很大提升吗

用 FT/triton 肯定很快,手写的 90%

@tpoisonooo
Copy link
Owner

@chenqy4933 用简单的 toml+onnx 就够用了。似乎现在 onnx 也支持模型嵌套了。

@coderchem
Copy link

我们使用FT/triton已经加速了2-3倍。但是性能还是不够, @tpoisonooo 现在tensorrt结果错误的问题又最新的进展吗?

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

6 participants