code: def export_and_validate_model(
      model, tokenizer, onnx_file_path, num_beams, max_length
  ):
      model.eval()
  
      ort_sess = None
      bart_script_model = torch.jit.script(
          BARTBeamSearchGenerator(model)
      )
  
      with torch.no_grad():
          ARTICLE_TO_SUMMARIZE = (
              "My friends are cool but they eat too many carbs."
          )
          inputs = tokenizer(
              [ARTICLE_TO_SUMMARIZE],
              max_length=1024,
              return_tensors="pt",
          ).to(model.device)
  
          summary_ids = model.generate(
              inputs["input_ids"],
              attention_mask=inputs["attention_mask"],
              num_beams=num_beams,
              max_length=max_length,
              early_stopping=True,
              decoder_start_token_id=model.config.decoder_start_token_id,
          )
  
          torch.onnx.export(
              bart_script_model,
              (
                  inputs["input_ids"],
                  inputs["attention_mask"],
                  num_beams,
                  max_length,
                  model.config.decoder_start_token_id,
              ),
              onnx_file_path,
              opset_version=14,
              input_names=[
                  "input_ids",
                  "attention_mask",
                  "num_beams",
                  "max_length",
                  "decoder_start_token_id",
              ],
              output_names=["output_ids"],
              dynamic_axes={
                  "input_ids": {0: "batch", 1: "seq"},
                  "output_ids": {0: "batch", 1: "seq_out"},
              },
              example_outputs=summary_ids,
          )
  
          logger.info("Model exported to {}".format(onnx_file_path))
  
          new_onnx_file_path = remove_dup_initializers(
              os.path.abspath(onnx_file_path)
          )
  
          logger.info(
              "Deduplicated and optimized model written to {}".format(
                  new_onnx_file_path
              )
          )
  
          ort_sess = onnxruntime.InferenceSession(new_onnx_file_path)
          ort_out = ort_sess.run(
              None,
              {
                  "input_ids": inputs["input_ids"].cpu().numpy(),
                  "attention_mask": inputs["attention_mask"]
                  .cpu()
                  .numpy(),
                  "num_beams": np.array(num_beams),
                  "max_length": np.array(max_length),
                  "decoder_start_token_id": np.array(
                      model.config.decoder_start_token_id
                  ),
              },
          )
  
          np.testing.assert_allclose(
              summary_ids.cpu().numpy(),
              ort_out[0],
              rtol=1e-3,
              atol=1e-3,
          )
  
          logger.info(
              "Model outputs from torch and ONNX Runtime are similar."
          )
          logger.info("Success.")
  
file_path: H2O/h2o_flexgen/benchmark/third_party/transformers/examples/research_projects/onnx/summarization/run_onnx_exporter.py
imports: import argparse
  import logging
  import os
  import sys
  import numpy
  import torch
  import onnxruntime
  import transformers
  from bart_onnx.generation_onnx import BARTBeamSearchGenerator
  from bart_onnx.reduce_onnx_size import remove_dup_initializers
  from transformers import BartForConditionalGeneration, BartTokenizer
label_desc: Use image node_id 3 for calling a global function with example usage: export_and_validate_model(model, tokenizer, onnx_file_path, num_beams, max_length) without return types