Skip to content

Use keyword argument for export_dir in ONNX export calls to avoid positional misbinding. #798

@jatin5jan

Description

@jatin5jan

Describe the bug
For efficient transformer branch release/v1.20.0

In several classes, ONNX export forwards export_dir positionally to _export(...).
However, _export’s signature places export_dir as the 6th parameter—after export_kwargs and onnx_transform_kwargs**, So the positional value binds to the wrong parameter (export_kwargs) and the actual export_dir remains None`.
As a result, a user-specified export directory is ignored, and exports go to the default location (QEFF_HOME / <model_name> with -<model_hash> suffix).

_export signature:

    def _export(
        self,
        example_inputs: Dict[str, torch.Tensor],
        output_names: List[str],
        dynamic_axes: Dict[str, Dict[int, str]],
        export_kwargs: Optional[Dict[str, any]] = None,
        onnx_transform_kwargs: Optional[Dict[str, any]] = None,
        export_dir: Optional[str] = None,
    ) 

In several places export_dir is passed positionally:

self.vision_model.export(inputs["vision"],output_names["vision"], dynamic_axes["vision"], export_dir)
self.lang_model.export(inputs["lang"], output_names["lang"], dynamic_axes["lang"], export_dir)

 def export(self, inputs, output_names, dynamic_axes, export_dir=None):
      return self._export(inputs, output_names, dynamic_axes, export_dir)

List of classes where this pattern appears:

QEffVisionEncoderForTextImageToTextModel,
QEffCausalLMForTextImageToTextModel,
_QEffAutoModelForImageTextToTextDualQPC

Other classes like _QEFFAutoModelForImageTextToTextSingleQPC already use the correct, safe pattern:

    def export(
        self,
        export_dir: Optional[str] = None,
        **kwargs,
    ) -> str:
        inputs = self.model.get_dummy_inputs()
        dynamic_axes = self.model.get_onnx_dynamic_axes()
        output_names = self.model.get_output_names()
        return self._export(inputs, output_names, dynamic_axes, export_dir=export_dir)

Use keyword argument for export_dir in ONNX export calls to avoid positional misbinding.

To Reproduce

  1. Call any affected export(...) with a non-default export_dir, e.g. /home/tmp.
  2. Observe that the resulting ONNX artifacts are produced under the default path (QEFF_HOME / <model_name>-/...) instead of the provided /home/tmp/-/....
    This happens because the positional argument is bound to export_kwargs, while export_dir remains None.

Expected behavior
All onnx export calls should use the keyword arguments for export_dir.
export_dir=export_dir

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions