llama.onnx icon indicating copy to clipboard operation
llama.onnx copied to clipboard

关于ONNX转换

Open lingffff opened this issue 3 years ago • 17 comments

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

lingffff avatar Apr 14 '23 08:04 lingffff

单个 onnx 文件不能超过 2GB https://github.com/onnx/onnx/issues/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 avatar Apr 17 '23 03:04 tpoisonooo

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

tpoisonooo avatar Apr 17 '23 03:04 tpoisonooo

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

RiskySignal avatar Apr 17 '23 03:04 RiskySignal

单个 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?

lingffff avatar Apr 17 '23 07:04 lingffff

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

tpoisonooo avatar Apr 17 '23 09:04 tpoisonooo

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

FastTransformer、 OpenAI/Triton 都支持 LLM 。

tpoisonooo avatar Apr 17 '23 09:04 tpoisonooo

@RiskySignal

tpoisonooo avatar Apr 17 '23 09:04 tpoisonooo

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

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

lingffff avatar Apr 17 '23 09:04 lingffff

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

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

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

tpoisonooo avatar Apr 18 '23 08:04 tpoisonooo

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

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

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

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

lingffff avatar Apr 28 '23 08:04 lingffff

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

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

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

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

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

lingffff avatar Apr 28 '23 09:04 lingffff

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

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

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

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

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

发了个 issue 给 TRT, https://github.com/NVIDIA/TensorRT/issues/2928 🤗

tpoisonooo avatar May 04 '23 10:05 tpoisonooo

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

chenqy4933 avatar May 19 '23 10:05 chenqy4933

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

FastTransformer、 OpenAI/Triton 都支持 LLM 。

效果如何,有很大提升吗

xxllp avatar May 24 '23 02:05 xxllp

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

FastTransformer、 OpenAI/Triton 都支持 LLM 。

效果如何,有很大提升吗

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

tpoisonooo avatar Jun 01 '23 09:06 tpoisonooo

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

tpoisonooo avatar Jun 01 '23 09:06 tpoisonooo

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

coderchem avatar Jun 02 '23 03:06 coderchem