[Bug]trtexec build engine succeeded on the H100 GPU but failed on the 5090 GPU
维护者通常 2 天内回复
@ptrendx 已经在做这个了。
开始于 2026年4月16日。
评估
这个 Issue 还没有评估数据。
描述
Describe the bug
Referenced Official Documentation:
https://docs.nvidia.com/deeplearning/transformer-engine/user-guide/examples/onnx/onnx_export.html
Strangely, during the process of generating the TensorRT engine, it succeeds on an H100 GPU but fails on a 5090 GPU.
Steps/Code to reproduce bug
First Step: export to onnx
import time
import torch
import torch.nn as nn
import transformer_engine.pytorch as te
from transformer_engine.pytorch.export import te_translation_table
from transformers import AutoModelForImageClassification
def _measure_time(f):
time_taken = []
num_iterations = 10
f() # warm-up
f()
for _ in range(num_iterations):
start_time = time.time()
f()
torch.cuda.synchronize()
end_time = time.time()
time_taken.append(end_time - start_time)
return round(sum(time_taken) / num_iterations, 3)
def convert_model(
model, to_transformer_engine=True, _convert_linear=True, _convert_ln=True
):
"""
Recursively converts the linear and layernorm layers of a model to their `transformers_engine` counterpart.
"""
for name, module in model.named_children():
if isinstance(module, nn.Linear) and to_transformer_engine and _convert_linear:
has_bias = module.bias is not None
params_to_gather = [module.weight]
if has_bias:
params_to_gather.append(module.bias)
if any(p % 16 != 0 for p in module.weight.shape):
return
te_module = te.Linear(
module.in_features,
module.out_features,
bias=has_bias,
params_dtype=module.weight.dtype,
)
te_module.weight.copy_(module.weight)
if has_bias:
te_module.bias.copy_(module.bias)
setattr(model, name, te_module)
# Note: @xrsrke (Phuc) found that te.LayerNorm doesn't have any real memory savings or speedups over nn.LayerNorm
elif isinstance(module, nn.LayerNorm) and to_transformer_engine and _convert_ln:
has_bias = module.bias is not None
te_module = te.LayerNorm(
module.normalized_shape[0],
eps=module.eps,
params_dtype=module.weight.dtype,
)
te_module.weight.copy_(module.weight)
if has_bias:
te_module.bias.copy_(module.bias)
setattr(model, name, te_module)
elif (
isinstance(module, te.Linear)
and not to_transformer_engine
and _convert_linear
):
has_bias = module.bias is not None
new_module = nn.Linear(
module.in_features,
module.out_features,
bias=has_bias,
params_dtype=module.weight.dtype,
)
new_module.weight.copy_(module.weight)
if has_bias:
new_module.bias.copy_(module.bias)
setattr(model, name, new_module)
elif (
isinstance(module, te.LayerNorm)
and not to_transformer_engine
and _convert_ln
):
new_module = nn.LayerNorm(
module.normalized_shape[0],
eps=module.eps,
params_dtype=module.weight.dtype,
)
new_module.weight.copy_(module.weight)
new_module.bias.copy_(module.bias)
setattr(model, name, new_module)
else:
convert_model(
module,
to_transformer_engine=to_transformer_engine,
_convert_linear=_convert_linear,
_convert_ln=_convert_ln,
)
# model_path = "/data/hukongtao/models/huggingface/dinov2-large/"
model_path = "facebook/dinov2-large"
model = AutoModelForImageClassification.from_pretrained(model_path)
print(model)
with torch.no_grad():
convert_model(model)
print(type(model.dinov2.encoder.layer[0].mlp.fc1))
model = model.eval().cuda()
inps = (torch.randn([16, 3, 256, 256], device="cuda"),)
def _inference(fp8_enabled):
with torch.no_grad(), te.autocast(enabled=fp8_enabled):
model(*inps)
te_fp32_time = _measure_time(lambda: _inference(fp8_enabled=False))
te_fp8_time = _measure_time(lambda: _inference(fp8_enabled=True))
print(f"Average inference time FP32: {te_fp32_time} ms")
print(f"Average inference time FP8: {te_fp8_time} ms")
def export(model, fname, inputs, fp8=True):
with torch.no_grad(), te.autocast(enabled=fp8):
# ! IMPORTANT !
# Transformer Engine models must have warm-up run
# before export. FP8 recipe during warm-up should
# match the recipe used during export.
model(*inputs)
# Only dynamo=True mode is supported;
# dynamo=False is deprecated and unsupported.
#
# te_translation_table contains necessary ONNX translations
# for FP8 quantize/dequantize operators.
print(f"Exporting {fname}")
with te.onnx_export(enabled=True):
torch.onnx.export(
model,
inputs,
fname,
output_names=["output"],
dynamo=True,
custom_translation_table=te_translation_table,
)
# Example usage:
export(model, "model_fp8.onnx", inps, fp8=True)
export(model, "model_fp32.onnx", inps, fp8=False)
Second step: build tensorrt engine
trtexec --onnx=model_fp8.onnx --saveEngine=model_fp8.engine > output_fp8.log 2>&1
During the second step, execution failed on the 5090 GPU but succeeded on the H100 GPU.
The failure log is as follows:
output_fp8.log
Expected behavior
Build TensorRT Engine Successfully
Environment overview (please complete the following information)
- Method of Transformer Engine install: pip3 install --no-build-isolation . # Build and install
Environment details
If NVIDIA docker image is used you don't need to specify these.
Otherwise, please provide:
- OS version: Ubuntu 22.04
- PyTorch version: 2.10.0+cu130
- Python version: 3.12
- Transformer Engine version: 2.13.0+5aa4823d
- CUDA version: 13.0
- CUDNN version
Device details
- 5090 GPU
Additional context
Add any other context about the problem here.
- 主要语言
- Python
- 星标
- 3.6k
- 派生
- 851
- 平均合并
- 5 天 1 小时
- 30 天内合并 PR
- 52
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
NVIDIA/TransformerEngine 的其他 Issue
-
[Bug] group_quantize_fp8_blockwise: mbarrier invalidated before other threads finish waiting on it未关闭
难度 2/5 1-3 小时 新手友好度 82/100
NVIDIA/TransformerEngine#3647 ·
维护者通常 2 天内回复
-
[PyTorch] fp8_cs_quantize fake implementation returns a vector inverse scale instead of a scalar可能已有人在做 @sanjana658 于 1 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 82/100
NVIDIA/TransformerEngine#3636 · 2 条评论 ·
维护者通常 2 天内回复
-
[Bug] Backend selection picks FA3 for training with head_dim_qk=192 / v_head_dim=128, but FA3 backward cannot run it可能已有人在做 @yuweih205 于 32 天前认领。 未关闭attention
难度 2/5 1-3 小时 新手友好度 85/100
NVIDIA/TransformerEngine#3481 · 4 条评论 ·
维护者通常 2 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 68/100
NVIDIA/TransformerEngine#2189 · 7 条评论 · 5 个 reaction ·
维护者通常 2 天内回复
-
[PyTorch] CUDA graph RNG registration floods training logs on automatic-registration builds可能已有人在做 @ksivaman 今天认领。 未关闭
难度 4/5 3-5 天 新手友好度 50/100
NVIDIA/TransformerEngine#3645 · 1 条评论 · 已指派 1 人 ·
维护者通常 2 天内回复
查看 NVIDIA/TransformerEngine 的全部 Issue
相似的 Issue
-
docs(types): update the collection binding note now that typed collections shipped in pycubrid 1.9.0未关闭documentation priority: low size: S
难度 2/5 1-3 小时 新手友好度 75/100
cubrid-lab/sqlalchemy-cubrid#768 ·
维护者通常 1 天内回复
-
bug help wanted
难度 2/5 1-3 小时 新手友好度 75/100
维护者通常 1 天内回复
-
documentation
难度 1/5 1 小时以内 新手友好度 65/100
ansys/pydpf-core#3547 ·
维护者通常 1 天内回复
-
core
难度 2/5 1-3 小时 新手友好度 70/100
vectorize-io/hindsight#5457 ·
维护者通常 1 天内回复
-
[Bug]: LangChain drops OpenAI Responses text blocks from session recording可能已有人在做 @ktz03 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
volcengine/OpenViking#5806 ·
维护者通常 1 天内回复