in src/optimum/nvidia/utils/onnx.py [0:0]
def to_onnx(network, path: Path):
inputs = []
for i in range(network.num_inputs):
network_input = network.get_input(i)
inputs.append(
helper.make_tensor_value_info(
network_input.name,
trt_dtype_to_onnx(network_input.dtype),
list(network_input.shape),
)
)
outputs = []
for i in range(network.num_outputs):
network_output = network.get_output(i)
outputs.append(
helper.make_tensor_value_info(
network_output.name,
trt_dtype_to_onnx(network_output.dtype),
list(network_output.shape),
)
)
nodes = []
for i in range(network.num_layers):
layer = network.get_layer(i)
layer_inputs = []
for j in range(layer.num_inputs):
ipt = layer.get_input(j)
if ipt is not None:
layer_inputs.append(layer.get_input(j).name)
layer_outputs = [layer.get_output(j).name for j in range(layer.num_outputs)]
nodes.append(
helper.make_node(
str(layer.type),
name=layer.name,
inputs=layer_inputs,
outputs=layer_outputs,
domain="com.nvidia",
)
)
onnx_model = helper.make_model(
helper.make_graph(nodes, "attention", inputs, outputs, initializer=None),
producer_name="NVIDIA",
)
onnx.save(onnx_model, path)