Skip to main content

🚀 HYPER-ONNX

中文|EN

Hyper-ONNX can export pytorch models (nn.Module) in a hierarchical manner. It can keep the module hier information and make a nested onnx graph. ✨

📦 Install

Simply install from pypi:

pip install hyperonnx

Or you may install from source:

git clone https://github.com/LoSealL/hyperonnx.git
pip install -e hyperonnx[test]

🧪 Usage Example

1) Export nn.Module with specified hier info

import torch
import torchvision as tv
from torchvision.models.resnet import BasicBlock, Bottleneck, ResNet

from hyperonnx import export_hyper_onnx

model = tv.models.resnet18()
export_hyper_onnx(
    resnet,
    (torch.randn(1, 3, 224, 224),),
    "hyper-resnet18.onnx",
    input_names=["img"],
    output_names=["features"],
    hiera=[ResNet, BasicBlock, Bottleneck],
    do_optimization=False,
    dynamo=False,
)

r18-sample

2) Export any call to a model by auto tracing

from hyperonnx import auto_trace_method
from hyperonnx.transformers import patch_transformers
from transformers import (
    GenerationConfig,
    Qwen2_5OmniThinkerForConditionalGeneration,
)
from transformers.models.qwen2_5_omni.modeling_qwen2_5_omni import (
    Qwen2_5_VisionPatchEmbed,
    Qwen2_5_VisionRotaryEmbedding,
    Qwen2_5OmniAudioEncoderLayer,
    Qwen2_5OmniDecoderLayer,
    Qwen2_5OmniPatchMerger,
    Qwen2_5OmniVisionBlock,
)

thinker = Qwen2_5OmniThinkerForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2.5-Omni-3B",
    dtype="float16",
    device_map="cuda",
)
with (
    patch_transformers(),
    auto_trace_method(thinker.model.forward) as text_tracer,
    auto_trace_method(thinker.visual.forward) as visual_tracer,
    auto_trace_method(thinker.audio_tower.forward) as audio_tracer,
):
    try:
        outputs = thinker.generate(
            **inputs,  # your any input data
            max_new_tokens=2048,
            generation_config=GenerationConfig(use_cache=False),
        )
    except StopIteration:
        pass
    text_tracer.export(
        "qwen-omni-2.5-3b-text.onnx",
        input_names=["input_ids"],
        output_names=["hidden_states"],
        hiera=[
            Qwen2_5OmniDecoderLayer,
        ],
        external_data=True,
        external_directory="qwen25_omni/text",
        do_optimization=True,
    )
    visual_tracer.export(
        "qwen-omni-2.5-3b-vision.onnx",
        input_names=["hidden_states"],
        output_names=["last_hidden_state"],
        hiera=[
            Qwen2_5_VisionPatchEmbed,
            Qwen2_5_VisionRotaryEmbedding,
            Qwen2_5OmniVisionBlock,
            Qwen2_5OmniPatchMerger,
        ],
        external_data=True,
        external_directory="qwen25_omni/vision",
        do_optimization=True,
    )
    audio_tracer.export(
        "qwen-omni-2.5-3b-audio.onnx",
        input_names=["hidden_states"],
        output_names=["last_hidden_state"],
        hiera=[
            Qwen2_5OmniAudioEncoderLayer,
        ],
        external_data=True,
        external_directory="qwen25_omni/audio",
        do_optimization=True,
    )

qwen2

3) Export compiled modules with CUDA kernel bundle

Mark specific modules with compile= to torch.compile them during export. A <TypeName>.kernels/ sidecar directory is written next to each compiled module's ONNX function, containing the cubin files and a manifest.json.

export_hyper_onnx(
    model,
    (torch.randn(8, 768),),
    "model.onnx",
    hiera=[DecoderLayer, Attention],
    compile=[Attention],  # Attention gets a kernel bundle
    compile_static_grid=False,  # set True to skip grid AST extraction
    dynamo=True,
    external_data=True,
    external_directory="out/",
)

The ONNX function body remains the portable fallback. The kernel bundle is a pure sidecar — deleting it makes the model behave as if compile=None.

Note: torch.compile is cached per Python process by dynamo. If you call export_hyper_onnx(..., compile=...) twice on the same model in the same process, call torch._dynamo.reset() between calls so the compile capture fires again.

If you run into issues or want to contribute, feel free to open an Issue or PR. 💡

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hyperonnx-2.0.0.tar.gz (81.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hyperonnx-2.0.0-py3-none-any.whl (105.2 kB view details)

Uploaded Python 3

File details

Details for the file hyperonnx-2.0.0.tar.gz.

File metadata

  • Download URL: hyperonnx-2.0.0.tar.gz
  • Upload date:
  • Size: 81.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hyperonnx-2.0.0.tar.gz
Algorithm Hash digest
SHA256 374448e6f6411a69f21514f8781943e51ae3d36e22f146b620d1f26a3664e18a
MD5 b962bbf86840a12f900b1067bca315a7
BLAKE2b-256 0bc588e84f50c8187c3d6836a527dffc5b321fe45c0c0b53af381ea7f96ec187

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperonnx-2.0.0.tar.gz:

Publisher: publish.yml on LoSealL/HyperONNX

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyperonnx-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: hyperonnx-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 105.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hyperonnx-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0e6fd4601216450da631aa87453c2654a421069a38c7b1b09887f64f2475f648
MD5 7a4c56a9c59d504146a2a3150fe7d24b
BLAKE2b-256 02356c07b773e714150354ed9661cbdd052ffc2e6aac5d3886210f07fdd06f68

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyperonnx-2.0.0-py3-none-any.whl:

Publisher: publish.yml on LoSealL/HyperONNX

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

2.0.1

2 files

This release

2.0.0 This release

2 files

1.0.5

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page