19
19
import onnxscript .utils .utils as utils
20
20
from onnxscript .ir import _tape
21
21
22
- DEFAULT_CONSTANT_FOLD_INPUT_SIZE_LIMIT = 1024
22
+ DEFAULT_CONSTANT_FOLD_INPUT_SIZE_LIMIT = 512
23
23
24
- DEFAULT_CONSTANT_FOLD_OUTPUT_SIZE_LIMIT = 1024 * 1024
24
+ DEFAULT_CONSTANT_FOLD_OUTPUT_SIZE_LIMIT = 512 * 512
25
25
26
26
27
27
_NON_DETERMINISTIC_OPS = frozenset (
@@ -944,21 +944,21 @@ def new_constant(self, node: ir.Node, value) -> ir.Node | None:
944
944
tensor .name = irvalue .name
945
945
irvalue .const_value = tensor
946
946
947
- if value .nbytes > self .output_size_limit :
947
+ if value .size > self .output_size_limit :
948
948
# Handle examples like Transpose(weight) to be folded even if the size is large,
949
949
# as long as weight has no other uses. This won't increase model size.
950
950
removed_input_size = 0
951
951
for input in node .inputs :
952
952
if (input is not None ) and (len (input .uses ()) == 1 ):
953
953
array = _get_numpy_value (input )
954
954
if array is not None :
955
- removed_input_size += array .nbytes
956
- increased_size = value .nbytes - removed_input_size
955
+ removed_input_size += array .size
956
+ increased_size = value .size - removed_input_size
957
957
if increased_size > 0 :
958
958
logger .info (
959
959
"Skip storing constant folded nvalue %s due to large size %s." ,
960
960
irvalue .name ,
961
- value .nbytes ,
961
+ value .size ,
962
962
)
963
963
return None
964
964
@@ -1029,9 +1029,8 @@ def process_node(self, node: ir.Node) -> Replacement | None:
1029
1029
return None
1030
1030
1031
1031
input_tensors = [x .const_value if x is not None else None for x in node .inputs ]
1032
-
1033
1032
if any (
1034
- tensor .nbytes > self .input_size_limit
1033
+ tensor .size > self .input_size_limit
1035
1034
for tensor in input_tensors
1036
1035
if tensor is not None
1037
1036
):
@@ -1048,7 +1047,7 @@ def process_node(self, node: ir.Node) -> Replacement | None:
1048
1047
# Skip folding large tensors
1049
1048
if logger .isEnabledFor (logging .DEBUG ):
1050
1049
input_sizes = [
1051
- tensor .nbytes for tensor in input_tensors if tensor is not None
1050
+ tensor .size for tensor in input_tensors if tensor is not None
1052
1051
]
1053
1052
logger .debug (
1054
1053
"Skipping constant folding for node %s due to large input size: %s" ,
@@ -1190,10 +1189,10 @@ def fold_constants(
1190
1189
model: The ONNX model to optimize.
1191
1190
onnx_shape_inference: Whether to enable ONNX shape inference during
1192
1191
constant folding. Defaults to False.
1193
- input_size_limit: The maximum size (in bytes) of input tensors
1192
+ input_size_limit: The maximum size of input tensors
1194
1193
that can be considered for constant folding. Defaults to
1195
1194
`DEFAULT_CONSTANT_FOLD_INPUT_SIZE_LIMIT`.
1196
- output_size_limit: The maximum size (in bytes) of output tensors
1195
+ output_size_limit: The maximum size of output tensors
1197
1196
that can be stored after constant folding. Defaults to
1198
1197
`DEFAULT_CONSTANT_FOLD_OUTPUT_SIZE_LIMIT`.
1199
1198
always_fold_ops: A collection of op types that should always be folded,
0 commit comments