Copyright (C) 2025 The HYPERONNX Authors.
Project description
🚀 HYPER-ONNX
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,
)
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,
)
If you run into issues or want to contribute, feel free to open an Issue or PR. 💡
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hyperonnx-1.0.4.tar.gz.
File metadata
- Download URL: hyperonnx-1.0.4.tar.gz
- Upload date:
- Size: 4.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.33.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc605ef0e3dbf1d1238d3a7dc7f4ffc04b4cd33a3cc1ad1a8f3a57ebbcdab7e8
|
|
| MD5 |
1a612b2bfb853a6d4dbd65b2a906f0d4
|
|
| BLAKE2b-256 |
32908880b50c83622b1ca2c2da2bd7615946868c855031916ac897ed82d0082f
|
File details
Details for the file hyperonnx-1.0.4-py3-none-any.whl.
File metadata
- Download URL: hyperonnx-1.0.4-py3-none-any.whl
- Upload date:
- Size: 46.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.33.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
627e5f95c2aff25a25fe7efb8698e367a023f5e626424397b9fd2f5fa314a980
|
|
| MD5 |
abdf5e3bc4d010911c833d6354b0718e
|
|
| BLAKE2b-256 |
eeca85f080d202b2bf5a96928f29ef8360094997f8de2c0d1095b27e2d2b47f1
|