Downloads · 30 days
10
27% of all-time downloads
efwfe/HY-MT1.5-1.8B-onnx
HY-MT1.5-1.8B-onnx is a translation model from efwfe. Use it when you need text moved from one language to another. It is set up for onnx.
这是 Tencent HY-MT1.5-1.8B 翻译模型的 ONNX 导出版本,可直接使用 ONNX Runtime 进行高效推理,无需 PyTorch 依赖。
Downloads · 30 days
10
27% of all-time downloads
All-time downloads
37
Public
Parameters
2B
26.6 GB on disk
Likes
1
Public
Click a slice to open those files.
.engine15.3 GB · 58%
From the Hugging Face model README
这是 Tencent HY-MT1.5-1.8B 翻译模型的 ONNX 导出版本,可直接使用 ONNX Runtime 进行高效推理,无需 PyTorch 依赖。
导出为双模型架构,适配自回归文本生成的 KV Cache 推理模式:
| 模型 | 文件 | 用途 |
|---|---|---|
| Prefill | onnx/hy_mt_prefill.onnx | 一次性处理全部输入 prompt,产出初始 logits + KV Cache |
| Decode | onnx/hy_mt_decode.onnx | 逐 token 生成,复用 KV Cache |
Prefill 模型(2 输入 → 65 输出):
| 名称 | Shape | 说明 |
|---|---|---|
input_ids | [batch_size, seq_len] | tokenized 输入序列 |
attention_mask | [batch_size, seq_len] | 注意力掩码 |
logits | [batch_size, seq_len, 120818] | 每个位置的 logits |
present_key_{0..31} | [batch_size, 4, total_seq_len, 128] | 32 层 Key 缓存 |
present_value_{0..31} | [batch_size, 4, total_seq_len, 128] | 32 层 Value 缓存 |
Decode 模型(66 输入 → 65 输出):
| 名称 | Shape | 说明 |
|---|---|---|
input_ids | [batch_size, 1] | 单个 token |
attention_mask | [batch_size, total_seq_len] | 包含历史的完整注意力掩码 |
past_key_{0..31} | [batch_size, 4, past_seq_len, 128] | 32 层历史 Key 缓存 |
past_value_{0..31} | [batch_size, 4, past_seq_len, 128] | 32 层历史 Value 缓存 |
logits | [batch_size, 1, 120818] | 当前 token logits |
present_key_{0..31} | [batch_size, 4, total_seq_len, 128] | 更新后的 Key 缓存 |
present_value_{0..31} | [batch_size, 4, total_seq_len, 128] | 更新后的 Value 缓存 |
pip install onnxruntime transformers==4.56.0
import numpy as np
import onnxruntime as ort
from transformers import AutoTokenizer
# ── 加载 ──────────────────────────────────────────
tokenizer = AutoTokenizer.from_pretrained("tencent/HY-MT1.5-1.8B")
prefill = ort.InferenceSession("onnx/hy_mt_prefill.onnx",
providers=["CPUExecutionProvider"])
decode = ort.InferenceSession("onnx/hy_mt_decode.onnx",
providers=["CPUExecutionProvider"])
# ── Tokenize ──────────────────────────────────────
messages = [{"role": "user", "content": "将下面的英文翻译成中文: Hello, how are you?"}]
input_ids = tokenizer.apply_chat_template(
messages, tokenize=True, add_generation_prompt=True,
return_tensors="np",
)
# ── Prefill ───────────────────────────────────────
seq_len = input_ids.shape[1]
attn_mask = np.ones((1, seq_len), dtype=np.int64)
prefill_out = prefill.run(None, {
"input_ids": input_ids,
"attention_mask": attn_mask,
})
# 提取 KV Cache
kv = {}
for i in range(32):
kv[f"past_key_{i}"] = prefill_out[1 + 2*i]
kv[f"past_value_{i}"] = prefill_out[1 + 2*i + 1]
# 采样第一个 token
logits = prefill_out[0][0, -1, :]
next_token = int(np.argmax(logits))
# ── Decode 循环 ──────────────────────────────────
total_len = seq_len
generated = []
for _ in range(256):
total_len += 1
decode_out = decode.run(None, {
"input_ids": np.array([[next_token]], dtype=np.int64),
"attention_mask": np.ones((1, total_len), dtype=np.int64),
**kv,
})
# 更新 KV Cache
for i in range(32):
kv[f"past_key_{i}"] = decode_out[1 + 2*i]
kv[f"past_value_{i}"] = decode_out[1 + 2*i + 1]
next_token = int(np.argmax(decode_out[0][0, -1, :]))
if next_token == 120020: # EOS
break
generated.append(next_token)
# ── Detokenize ────────────────────────────────────
output = tokenizer.decode(generated, skip_special_tokens=True)
print(output)
更完整的推理脚本见 inference_onnx.py。
使用 do_constant_folding=False 导出可保证 ONNX 与 PyTorch 输出完全一致:
| 指标 | 值 |
|---|---|
| Prefill logits 最大差异 | 6.2 × 10⁻⁵ |
| Prefill logits 平均差异 | 4.4 × 10⁻⁶ |
| KV Cache 漂移(20 步后) | 1.2 × 10⁻⁴ |
| Token 一致率(Top-1) | 100% |
| Token 一致率(Top-100) | 100% |
| Logits Pearson 相关系数 | 1.000000 |
| 组件 | 版本 |
|---|---|
| PyTorch | 2.5.1 |
| Transformers | 4.56.1 |
| ONNX | 1.22.0 |
| ONNX Runtime | 1.28.0 |
| ONNX Opset | 17 |
eager(sdpa 不可被 ONNX trace)do_constant_folding=False,否则会因 seq_len 被烘焙为常量导致动态输入时数值错误)python export_onnx_full.py
导出脚本会自动验证 ONNX 与 PyTorch 输出一致性。
| 运行环境 | Prefill (16 tokens) | Decode (per token) |
|---|---|---|
| CPU (ONNX Runtime) | ~2s | ~120ms |
推荐使用 CUDAExecutionProvider 获得更好性能。
.
├── onnx
├── export_onnx_full.py # 完整导出脚本(prefill + decode)
├── inference_onnx.py # ONNX Runtime 推理脚本
├── compare_onnx_pt.py # ONNX vs PyTorch 精度对比
└── README.md
@misc{hy-mt1.5,
title={HY-MT1.5 Technical Report},
author={Mao Zheng and Zheng Li and Tao Chen and Mingyang Song and Di Wang},
year={2025},
eprint={2512.24092},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2512.24092},
}