Skip to content

Commit d898a0f

Browse files
authored
ci(TRI-1406): prepare server for 26.06 (versions, TRT 11 QA compat, enroot env fix) (#8828)
1 parent 8f90112 commit d898a0f

13 files changed

Lines changed: 326 additions & 145 deletions

TRITON_VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.70.0dev
1+
2.70.0

build.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@
7575
"triton_container_version": "26.06dev",
7676
"upstream_container_version": "26.05",
7777
"ort_version": "1.24.4",
78-
"ort_openvino_version": "2026.1.0",
79-
"standalone_openvino_version": "2026.1.0",
78+
"ort_openvino_version": "2026.2.0",
79+
"standalone_openvino_version": "2026.2.0",
8080
"dcgm_version": "4.5.3-1",
8181
"rhel_py_version": "3.12.3",
8282
}

qa/common/gen_common.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,28 @@ def np_to_torch_dtype(np_dtype):
146146
return None
147147

148148

149+
def trt_set_dynamic_range(tensor, lo, hi):
150+
"""Set ITensor.dynamic_range on TRT versions that support it.
151+
152+
Removed in TensorRT 11+ (strongly-typed networks). Silently skip on
153+
versions where the attribute is gone so the QA model-gen scripts stay
154+
compatible with both old and new TRT."""
155+
try:
156+
tensor.dynamic_range = (lo, hi)
157+
except AttributeError:
158+
pass # ITensor.dynamic_range removed in TensorRT 11+ (strongly-typed)
159+
160+
161+
def trt_cast_tensor(network, tensor, target_dtype):
162+
"""Insert an explicit dtype cast that works on both TRT 8.5+ (add_cast)
163+
and older TRT (add_identity + set_output_type). Returns the cast layer."""
164+
if hasattr(network, "add_cast"):
165+
return network.add_cast(tensor, target_dtype)
166+
layer = network.add_identity(tensor)
167+
layer.set_output_type(0, target_dtype)
168+
return layer
169+
170+
149171
def openvino_save_model(model_version_dir, model):
150172
import openvino as ov
151173

qa/common/gen_qa_dyna_sequence_implicit_models.py

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@
3030
import os
3131

3232
import numpy as np
33-
from gen_common import np_to_model_dtype, np_to_onnx_dtype, np_to_trt_dtype
33+
from gen_common import (
34+
np_to_model_dtype,
35+
np_to_onnx_dtype,
36+
np_to_trt_dtype,
37+
trt_set_dynamic_range,
38+
)
3439

3540
FLAGS = None
3641
np_dtype_string = np.dtype(object)
@@ -388,7 +393,10 @@ def create_plan_modelfile(models_dir, model_version, max_batch, dtype, shape):
388393
not_start = network.add_elementwise(
389394
constant_1.get_output(0), start0, trt.ElementWiseOperation.SUB
390395
)
391-
not_start.set_output_type(0, trt_dtype)
396+
# set_output_type was removed from all layers in TensorRT 11; the
397+
# elementwise output already has trt_dtype, so this was a no-op.
398+
if hasattr(not_start, "set_output_type"):
399+
not_start.set_output_type(0, trt_dtype)
392400

393401
input_state_cond_temp = network.add_elementwise(
394402
ready0, not_start.get_output(0), trt.ElementWiseOperation.SUM
@@ -527,7 +535,10 @@ def create_plan_rf_modelfile(models_dir, model_version, max_batch, dtype, shape)
527535
not_start = network.add_elementwise(
528536
constant_1.get_output(0), start0, trt.ElementWiseOperation.SUB
529537
)
530-
not_start.set_output_type(0, trt_dtype)
538+
# set_output_type was removed from all layers in TensorRT 11; the
539+
# elementwise output already has trt_dtype, so this was a no-op.
540+
if hasattr(not_start, "set_output_type"):
541+
not_start.set_output_type(0, trt_dtype)
531542

532543
input_state_cond_temp = network.add_elementwise(
533544
ready0, not_start.get_output(0), trt.ElementWiseOperation.SUM
@@ -552,11 +563,19 @@ def create_plan_rf_modelfile(models_dir, model_version, max_batch, dtype, shape)
552563

553564
out0.get_output(0).name = "OUTPUT"
554565
network.mark_output(out0.get_output(0))
555-
out0.get_output(0).dtype = trt_dtype
566+
# ITensor.dtype setter removed in TRT 11; elementwise output already has
567+
# trt_dtype.
568+
try:
569+
out0.get_output(0).dtype = trt_dtype
570+
except AttributeError:
571+
pass # ITensor.dtype setter removed in TensorRT 11+
556572

557573
out0_state.get_output(0).name = "OUTPUT_STATE"
558574
network.mark_output(out0_state.get_output(0))
559-
out0_state.get_output(0).dtype = trt_dtype
575+
try:
576+
out0_state.get_output(0).dtype = trt_dtype
577+
except AttributeError:
578+
pass # ITensor.dtype setter removed in TensorRT 11+
560579

561580
in0.allowed_formats = 1 << int(trt_memory_format)
562581
in_state0.allowed_formats = 1 << int(trt_memory_format)
@@ -566,21 +585,23 @@ def create_plan_rf_modelfile(models_dir, model_version, max_batch, dtype, shape)
566585
out0_state.get_output(0).allowed_formats = 1 << int(trt_memory_format)
567586

568587
if trt_dtype == trt.int8:
569-
in0.dynamic_range = (-128.0, 127.0)
570-
in_state0.dynamic_range = (-128.0, 127.0)
571-
out0.dynamic_range = (-128.0, 127.0)
572-
out0_state.dynamic_range = (-128.0, 127.0)
573-
start0.dynamic_range = (-128.0, 127.0)
574-
ready0.dynamic_range = (-128.0, 127.0)
575-
588+
trt_set_dynamic_range(in0, -128.0, 127.0)
589+
trt_set_dynamic_range(in_state0, -128.0, 127.0)
590+
trt_set_dynamic_range(out0, -128.0, 127.0)
591+
trt_set_dynamic_range(out0_state, -128.0, 127.0)
592+
trt_set_dynamic_range(start0, -128.0, 127.0)
593+
trt_set_dynamic_range(ready0, -128.0, 127.0)
576594
flags = 1 << int(trt.BuilderFlag.DIRECT_IO)
577-
flags |= 1 << int(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
595+
# TensorRT 11 removed PREFER_PRECISION_CONSTRAINTS / INT8 / FP16
596+
# BuilderFlags (strongly-typed networks). Older TRT still has them.
597+
if hasattr(trt.BuilderFlag, "PREFER_PRECISION_CONSTRAINTS"):
598+
flags |= 1 << int(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
578599
if hasattr(trt.BuilderFlag, "REJECT_EMPTY_ALGORITHMS"):
579600
flags |= 1 << int(trt.BuilderFlag.REJECT_EMPTY_ALGORITHMS)
580601

581-
if trt_dtype == trt.int8:
602+
if trt_dtype == trt.int8 and hasattr(trt.BuilderFlag, "INT8"):
582603
flags |= 1 << int(trt.BuilderFlag.INT8)
583-
elif trt_dtype == trt.float16:
604+
elif trt_dtype == trt.float16 and hasattr(trt.BuilderFlag, "FP16"):
584605
flags |= 1 << int(trt.BuilderFlag.FP16)
585606

586607
config = builder.create_builder_config()

qa/common/gen_qa_dyna_sequence_models.py

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
np_to_torch_dtype,
3737
np_to_trt_dtype,
3838
openvino_save_model,
39+
trt_set_dynamic_range,
3940
)
4041

4142
FLAGS = None
@@ -101,15 +102,26 @@ def create_plan_shape_tensor_modelfile(
101102
resized_out0 = resize_layer.get_output(0)
102103

103104
shape_out0.get_output(0).name = "SHAPE_OUTPUT"
104-
shape_out0.get_output(0).dtype = trt.int64
105+
# ITensor.dtype setter removed in TRT 11; shape/elementwise/resize
106+
# outputs already have the correct dtype.
107+
try:
108+
shape_out0.get_output(0).dtype = trt.int64
109+
except AttributeError:
110+
pass # ITensor.dtype setter removed in TensorRT 11+
105111
network.mark_output_for_shapes(shape_out0.get_output(0))
106112

107113
out0.name = "OUTPUT"
108-
out0.dtype = trt.int32
114+
try:
115+
out0.dtype = trt.int32
116+
except AttributeError:
117+
pass # ITensor.dtype setter removed in TensorRT 11+
109118
network.mark_output(out0)
110119

111120
resized_out0.name = "RESIZED_OUTPUT"
112-
resized_out0.dtype = trt_dtype
121+
try:
122+
resized_out0.dtype = trt_dtype
123+
except AttributeError:
124+
pass # ITensor.dtype setter removed in TensorRT 11+
113125
network.mark_output(resized_out0)
114126

115127
shape_in0.allowed_formats = 1 << int(trt_memory_format)
@@ -121,20 +133,22 @@ def create_plan_shape_tensor_modelfile(
121133
resized_out0.allowed_formats = 1 << int(trt_memory_format)
122134

123135
if trt_dtype == trt.int8:
124-
dummy_in0.dynamic_range = (-128.0, 127.0)
125-
resized_out0.dynamic_range = (-128.0, 127.0)
126-
start0.dynamic_range = (-128.0, 127.0)
127-
end0.dynamic_range = (-128.0, 127.0)
128-
ready0.dynamic_range = (-128.0, 127.0)
129-
136+
trt_set_dynamic_range(dummy_in0, -128.0, 127.0)
137+
trt_set_dynamic_range(resized_out0, -128.0, 127.0)
138+
trt_set_dynamic_range(start0, -128.0, 127.0)
139+
trt_set_dynamic_range(end0, -128.0, 127.0)
140+
trt_set_dynamic_range(ready0, -128.0, 127.0)
130141
flags = 1 << int(trt.BuilderFlag.DIRECT_IO)
131-
flags |= 1 << int(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
142+
# TensorRT 11 removed PREFER_PRECISION_CONSTRAINTS / INT8 / FP16
143+
# BuilderFlags (strongly-typed networks). Older TRT still has them.
144+
if hasattr(trt.BuilderFlag, "PREFER_PRECISION_CONSTRAINTS"):
145+
flags |= 1 << int(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
132146
if hasattr(trt.BuilderFlag, "REJECT_EMPTY_ALGORITHMS"):
133147
flags |= 1 << int(trt.BuilderFlag.REJECT_EMPTY_ALGORITHMS)
134148

135-
if trt_dtype == trt.int8:
149+
if trt_dtype == trt.int8 and hasattr(trt.BuilderFlag, "INT8"):
136150
flags |= 1 << int(trt.BuilderFlag.INT8)
137-
elif trt_dtype == trt.float16:
151+
elif trt_dtype == trt.float16 and hasattr(trt.BuilderFlag, "FP16"):
138152
flags |= 1 << int(trt.BuilderFlag.FP16)
139153

140154
min_prefix = []
@@ -353,29 +367,36 @@ def create_plan_rf_modelfile(models_dir, model_version, max_batch, dtype, shape)
353367
out0.get_output(0).name = "OUTPUT"
354368
network.mark_output(out0.get_output(0))
355369

356-
out0.get_output(0).dtype = trt_dtype
370+
# ITensor.dtype setter removed in TRT 11; elementwise output already has
371+
# trt_dtype.
372+
try:
373+
out0.get_output(0).dtype = trt_dtype
374+
except AttributeError:
375+
pass # ITensor.dtype setter removed in TensorRT 11+
357376

358377
in0.allowed_formats = 1 << int(trt_memory_format)
359378
start0.allowed_formats = 1 << int(trt_memory_format)
360379
ready0.allowed_formats = 1 << int(trt_memory_format)
361380
out0.get_output(0).allowed_formats = 1 << int(trt_memory_format)
362381

363382
if trt_dtype == trt.int8:
364-
in0.dynamic_range = (-128.0, 127.0)
365-
out0.dynamic_range = (-128.0, 127.0)
366-
start0.dynamic_range = (-128.0, 127.0)
367-
end0.dynamic_range = (-128.0, 127.0)
368-
ready0.dynamic_range = (-128.0, 127.0)
369-
corrid0.dynamic_range = (-128.0, 127.0)
370-
383+
trt_set_dynamic_range(in0, -128.0, 127.0)
384+
trt_set_dynamic_range(out0, -128.0, 127.0)
385+
trt_set_dynamic_range(start0, -128.0, 127.0)
386+
trt_set_dynamic_range(end0, -128.0, 127.0)
387+
trt_set_dynamic_range(ready0, -128.0, 127.0)
388+
trt_set_dynamic_range(corrid0, -128.0, 127.0)
371389
flags = 1 << int(trt.BuilderFlag.DIRECT_IO)
372-
flags |= 1 << int(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
390+
# TensorRT 11 removed PREFER_PRECISION_CONSTRAINTS / INT8 / FP16
391+
# BuilderFlags (strongly-typed networks). Older TRT still has them.
392+
if hasattr(trt.BuilderFlag, "PREFER_PRECISION_CONSTRAINTS"):
393+
flags |= 1 << int(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
373394
if hasattr(trt.BuilderFlag, "REJECT_EMPTY_ALGORITHMS"):
374395
flags |= 1 << int(trt.BuilderFlag.REJECT_EMPTY_ALGORITHMS)
375396

376-
if trt_dtype == trt.int8:
397+
if trt_dtype == trt.int8 and hasattr(trt.BuilderFlag, "INT8"):
377398
flags |= 1 << int(trt.BuilderFlag.INT8)
378-
elif trt_dtype == trt.float16:
399+
elif trt_dtype == trt.float16 and hasattr(trt.BuilderFlag, "FP16"):
379400
flags |= 1 << int(trt.BuilderFlag.FP16)
380401

381402
min_shape = []

qa/common/gen_qa_identity_models.py

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
np_to_onnx_dtype,
3838
np_to_trt_dtype,
3939
openvino_save_model,
40+
trt_set_dynamic_range,
4041
)
4142

4243
FLAGS = None
@@ -552,14 +553,18 @@ def create_plan_dynamic_rf_modelfile(
552553
out_node = network.add_identity(in_node)
553554

554555
out_node.get_output(0).name = "OUTPUT{}".format(io_num)
555-
out_node.get_output(0).dtype = trt_dtype
556+
# Identity preserves input dtype; the ITensor.dtype setter was
557+
# removed in TensorRT 11. Older TRT versions still accept it.
558+
try:
559+
out_node.get_output(0).dtype = trt_dtype
560+
except AttributeError:
561+
pass # ITensor.dtype setter removed in TensorRT 11+
556562
network.mark_output(out_node.get_output(0))
557563
out_node.get_output(0).allowed_formats = 1 << int(trt_memory_format)
558564

559565
if trt_dtype == trt.int8:
560-
in_node.dynamic_range = (-128.0, 127.0)
561-
out_node.get_output(0).dynamic_range = (-128.0, 127.0)
562-
566+
trt_set_dynamic_range(in_node, -128.0, 127.0)
567+
trt_set_dynamic_range(out_node.get_output(0), -128.0, 127.0)
563568
min_shape = []
564569
opt_shape = []
565570
max_shape = []
@@ -583,14 +588,17 @@ def create_plan_dynamic_rf_modelfile(
583588
profile.set_shape("INPUT{}".format(io_num), min_shape, opt_shape, max_shape)
584589

585590
flags = 1 << int(trt.BuilderFlag.DIRECT_IO)
586-
flags |= 1 << int(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
591+
# TensorRT 11 removed PREFER_PRECISION_CONSTRAINTS / INT8 / FP16
592+
# BuilderFlags (strongly-typed networks). Older TRT still has them.
593+
if hasattr(trt.BuilderFlag, "PREFER_PRECISION_CONSTRAINTS"):
594+
flags |= 1 << int(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
587595
if hasattr(trt.BuilderFlag, "REJECT_EMPTY_ALGORITHMS"):
588596
flags |= 1 << int(trt.BuilderFlag.REJECT_EMPTY_ALGORITHMS)
589597
datatype_set = set([trt_dtype])
590598
for dt in datatype_set:
591-
if dt == trt.int8:
599+
if dt == trt.int8 and hasattr(trt.BuilderFlag, "INT8"):
592600
flags |= 1 << int(trt.BuilderFlag.INT8)
593-
elif dt == trt.float16:
601+
elif dt == trt.float16 and hasattr(trt.BuilderFlag, "FP16"):
594602
flags |= 1 << int(trt.BuilderFlag.FP16)
595603
config = builder.create_builder_config()
596604
config.flags = flags
@@ -668,18 +676,26 @@ def create_plan_shape_tensor_modelfile(
668676

669677
dummy_out_node.name = "DUMMY_OUTPUT{}".format(io_num)
670678

671-
dummy_out_node.dtype = trt_dtype
679+
# The ITensor.dtype setter was removed in TensorRT 11; resize and
680+
# shape layers already produce the correct dtype, so suppress the
681+
# AttributeError instead of changing the older-TRT behavior.
682+
try:
683+
dummy_out_node.dtype = trt_dtype
684+
except AttributeError:
685+
pass # ITensor.dtype setter removed in TensorRT 11+
672686
network.mark_output(dummy_out_node)
673687
dummy_out_node.allowed_formats = 1 << int(trt_memory_format)
674688

675-
out_node.get_output(0).dtype = trt.int64
689+
try:
690+
out_node.get_output(0).dtype = trt.int64
691+
except AttributeError:
692+
pass # ITensor.dtype setter removed in TensorRT 11+
676693
network.mark_output_for_shapes(out_node.get_output(0))
677694
out_node.get_output(0).allowed_formats = 1 << int(trt_memory_format)
678695

679696
if trt_dtype == trt.int8:
680-
in_node.dynamic_range = (-128.0, 127.0)
681-
out_node.get_output(0).dynamic_range = (-128.0, 127.0)
682-
697+
trt_set_dynamic_range(in_node, -128.0, 127.0)
698+
trt_set_dynamic_range(out_node.get_output(0), -128.0, 127.0)
683699
config = builder.create_builder_config()
684700

685701
min_prefix = []
@@ -707,14 +723,17 @@ def create_plan_shape_tensor_modelfile(
707723
config.add_optimization_profile(profile)
708724

709725
flags = 1 << int(trt.BuilderFlag.DIRECT_IO)
710-
flags |= 1 << int(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
726+
# TensorRT 11 removed PREFER_PRECISION_CONSTRAINTS / INT8 / FP16
727+
# BuilderFlags (strongly-typed networks). Older TRT still has them.
728+
if hasattr(trt.BuilderFlag, "PREFER_PRECISION_CONSTRAINTS"):
729+
flags |= 1 << int(trt.BuilderFlag.PREFER_PRECISION_CONSTRAINTS)
711730
if hasattr(trt.BuilderFlag, "REJECT_EMPTY_ALGORITHMS"):
712731
flags |= 1 << int(trt.BuilderFlag.REJECT_EMPTY_ALGORITHMS)
713732
datatype_set = set([trt_dtype])
714733
for dt in datatype_set:
715-
if dt == trt.int8:
734+
if dt == trt.int8 and hasattr(trt.BuilderFlag, "INT8"):
716735
flags |= 1 << int(trt.BuilderFlag.INT8)
717-
elif dt == trt.float16:
736+
elif dt == trt.float16 and hasattr(trt.BuilderFlag, "FP16"):
718737
flags |= 1 << int(trt.BuilderFlag.FP16)
719738
config.flags = flags
720739

0 commit comments

Comments
 (0)