D-FINE engine with fp16 has a degraded performance with TensorRT > 10.4
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Tranquilla
- Stack tecnologico
- python
- Ambito
- machine-learning, performance
Direzione di ricerca
Inizia riproducendo l’esportazione D-FINE fp16 con TensorRT 10.4 e 10.6 utilizzando la funzione build_engine mostrata. Esamina la gestione della precisione di NORMALIZATION, STRICT_TYPES e i flag di precisione, quindi confronta la precisione e le prestazioni dell’engine. Il lavoro è completato quando viene identificata la regressione tra le versioni di TensorRT e viene documentato o implementato un fix validato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hi,
Thanks for the great library.
I wanted to test DEIMv2 and Edgecrafter, but I need to use tensorrt >= 10.6.
So, I installed this repo with tensorrt==10.6, but D-FINE precision drops significantly.
Do you have any idea why this is happening? I read that I had to export the layernorms on FP32 and the other layers in FP16 to make D-FINE work, but it didn't work.
Here is my exportation code
from importlib.metadata import version
from packaging.version import Version
required_version = Version('10.4')
installed_version = Version(version('tensorrt'))
def build_engine(model_path, engine_path, use_fp16=False):
logger = trt.Logger([trt.Logger.INFO](http://trt.logger.info/))
builder = trt.Builder(logger)
EXPLICIT_BATCH = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)
network = builder.create_network(EXPLICIT_BATCH)
config = builder.create_builder_config()
if use_fp16:
config.set_flag(trt.BuilderFlag.FP16)
# MY ADDITION
if installed_version > required_version:
config.clear_flag(trt.BuilderFlag.OBEY_PRECISION_CONSTRAINTS)
config.set_flag(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
for layer_idx in range(network.num_layers):
layer = network[layer_idx]
if layer.type == trt.LayerType.NORMALIZATION:
layer.precision = trt.float32
layer.set_output_type(0, trt.float32)
parser = trt.OnnxParser(network, logger)
config.set_flag(trt.BuilderFlag.STRICT_TYPES)
with open(model_path, "rb") as f:
model_data = f.read()
if not parser.parse(model_data):
print("Failed to parse ONNX model")
for error in range(parser.num_errors):
print(parser.get_error(error))
return None
# Create optimization profile to fix dynamic batch dimensions
profile = builder.create_optimization_profile()
# Handle dynamic input shapes - fix batch size to 1
for i in range(network.num_inputs):
input_tensor = network.get_input(i)
input_shape = input_tensor.shape
print(f"Input {i} ({[input_tensor.name](http://input_tensor.name/)}): {input_shape}")
# Check if batch dimension is dynamic (typically -1)
if input_shape[0] == -1:
# Fix batch size to 1
fixed_shape = (1,) + tuple(input_shape[1:])
print(f" Setting fixed batch shape: {fixed_shape}")
# Set min, optimal, and max shapes all to batch size 1
profile.set_shape([input_tensor.name](http://input_tensor.name/), fixed_shape, fixed_shape, fixed_shape)
# Add the optimization profile to the configuration
config.add_optimization_profile(profile)
config.set_flag(trt.BuilderFlag.STRICT_TYPES)
print(f"Building engine from {model_path} to {engine_path}")
engine = builder.build_serialized_network(network, config)
if engine is None:
print("Failed to build engine")
return None
print(f"Engine built successfully")
with open(engine_path, "wb") as f:
f.write(engine)
return engine
- Lingua principale
- Python
- Stelle
- 45
- Fork
- 3
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di roboflow/single_artifact_benchmarking
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
roboflow/single_artifact_benchmarking#4 · 1 commento ·
Tutte le issue di roboflow/single_artifact_benchmarking
Issue simili
-
area:core-platform effort:S priority:P3 risk:night-safe status:ready type:test
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
randomparity/kdive#3620 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
FinanceFlash/unvibecode#760 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
google-research/google-research#3470 ·
I maintainer di solito rispondono entro 21 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
mrvautin/ha-workouts#11 ·