# ModelTranslator **Repository Path**: FasterEdge/ModelTranslator ## Basic Information - **Project Name**: ModelTranslator - **Description**: 模型转换工具 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-31 - **Last Updated**: 2026-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
logo

ModelTranslator

多格式模型转换工具(uv 环境)

### 一、简介 `ModelTranslator` 是一个基于 [uv](https://docs.astral.sh/uv/) 管理的 **多格式模型转换工具**,支持常见深度学习模型格式之间的互转。转换过程**全部委托给已有的成熟库**(torch / onnx / onnxruntime / tensorflow / tf2onnx / openvino / coremltools / trtexec / llama.cpp 等),本项目只负责格式识别与转换编排,不重复造轮子。 - ✅ 支持 10+ 常见模型格式,任意组合互转 - ✅ 依赖**按需拉取**:CLI 本体仅几 MB,转换后端按需安装 - ✅ 支持 `--auto-install` 自动安装缺失依赖 - ✅ 支持 Docker 运行,开箱即用 ### 二、快速开始 ```bash # 1. 安装(默认只装 CLI,很轻量) uv sync # 2. 查看支持格式与转换路径 uv run model-translator list # 3. 转换:PyTorch -> ONNX(缺依赖时自动提示,或加 --auto-install 自动装) uv run model-translator convert model.pt model.onnx --input-shape 1,3,224,224 --auto-install # 4. Docker 方式 docker build -t model-translator . docker run --rm -v $(pwd):/workspace model-translator list ``` ### 三、支持的格式 | 格式 key | 名称 | 扩展名 | 说明 | |---------|------|--------|------| | `pytorch` | PyTorch | `.pt` `.pth` | PyTorch 权重/模型 | | `torchscript` | TorchScript | `.pt` | TorchScript 序列化模型 | | `onnx` | ONNX | `.onnx` | 开放神经网络交换格式 | | `tensorflow` | TensorFlow SavedModel | `.pb` / 目录 | SavedModel 模型 | | `keras` | Keras | `.h5` `.keras` | Keras HDF5 模型 | | `tflite` | TensorFlow Lite | `.tflite` | 轻量推理格式 | | `openvino` | OpenVINO IR | `.xml` | OpenVINO 中间表示 | | `tensorrt` | TensorRT | `.engine` `.trt` | NVIDIA 推理引擎 | | `coreml` | CoreML | `.mlmodel` `.mlpackage` | Apple CoreML | | `ggml` | GGUF | `.gguf` `.bin` | 大语言模型量化格式 | | `mindspore` | MindSpore | `.ckpt` `.mindir` | 华为 MindSpore 模型 | > 用 `uv run model-translator info ` 可检测任意文件的格式。 ### 四、支持的转换路径 | 源格式 | 目标格式 | 依赖库 | 底层实现 | |--------|---------|--------|---------| | PyTorch | ONNX | torch + onnx | `torch.onnx.export` | | PyTorch | TorchScript | torch | `torch.jit.trace/script` | | ONNX | OpenVINO | openvino | `ov.convert_model` | | ONNX | CoreML | coremltools | `coremltools.convert` | | ONNX | TensorRT | trtexec | 调用 NVIDIA `trtexec` | | SavedModel | TFLite | tensorflow | `TFLiteConverter` | | Keras | TFLite | tensorflow | `TFLiteConverter` | | SavedModel | ONNX | tensorflow + tf2onnx | `tf2onnx.convert` | | Keras | ONNX | tensorflow + tf2onnx | `tf2onnx.convert` | | CoreML | ONNX | coremltools | coremltools 7+ 转 ONNX | | safetensors | GGUF | llama.cpp | `convert_hf_to_gguf.py` | ### 五、CLI 命令参考 #### `list` 列出支持的格式与全部转换路径。 ``` uv run model-translator list ``` #### `info` 检测文件/目录对应的模型格式。 ``` uv run model-translator info ``` #### `convert` 模型转换,是核心命令。 ``` uv run model-translator convert [选项] ``` | 选项 | 说明 | |------|------| | `--to / -t ` | 目标格式 key(默认按输出扩展名推断) | | `--input-shape ` | 示例输入 shape,如 `1,3,224,224`(PyTorch 需要) | | `--opset ` | ONNX opset 版本(默认 13) | | `--input-names ` | ONNX 输入名,逗号分隔 | | `--output-names ` | ONNX 输出名,逗号分隔 | | `--dynamic-axes` | ONNX 导出动态轴(batch 维度) | | `--fp16` | TensorRT 使用 FP16 | | `--quantize int8` | TFLite 量化方式 | | `--script ` | 自定义 Python 脚本(定义 `load_model(path)` 返回模型),用于加载 PyTorch state_dict | | `--auto-install` | 缺依赖时自动按需安装(`uv sync --extra <所需分组>`) | **示例:** ```bash # PyTorch -> ONNX uv run model-translator convert model.pt model.onnx --input-shape 1,3,224,224 # PyTorch -> TorchScript uv run model-translator convert model.pt model_scripted.pt --input-shape 1,3,224,224 # PyTorch(state_dict) -> ONNX,用脚本恢复模型结构 uv run model-translator convert weights.pth model.onnx \ --script ./load_my_model.py --input-shape 1,3,224,224 # ONNX -> OpenVINO / CoreML / TensorRT uv run model-translator convert model.onnx model.xml uv run model-translator convert model.onnx model.mlpackage uv run model-translator convert model.onnx model.engine --fp16 # SavedModel/Keras -> TFLite / ONNX uv run model-translator convert saved_model_dir model.tflite uv run model-translator convert model.h5 model.tflite --quantize int8 uv run model-translator convert saved_model_dir model.onnx # 缺依赖时自动按需安装 uv run model-translator convert model.pt model.onnx --input-shape 1,3,224,224 --auto-install ``` ### 六、依赖按需拉取 本项目把 CLI 本体作为唯一必装依赖(click + filetype,仅几 MB),所有转换后端都放在 [pyproject.toml](pyproject.toml) 的 `optional-dependencies` 分组中: | 分组 | 包含的库 | 体积 | |------|---------|------| | `onnx` | onnx / onnxruntime / onnxscript | 中等 | | `torch` | torch | 较大(数百 MB+) | | `tensorflow` | tensorflow / tf2onnx | 最大(1GB+) | | `openvino` | openvino | 中等 | | `coreml` | coremltools(仅 macOS) | 较大 | | `all` | 以上全部 | 非常大(不推荐) | **两种按需用法:** ```bash # 方式 1:手动按需安装 uv sync --extra torch --extra onnx # 方式 2:转换时自动安装(--auto-install) uv run model-translator convert model.pt model.onnx --input-shape 1,3,224,224 --auto-install ``` > 运行 `convert` 时若缺依赖,会提示**精确的按需安装命令**(如 `uv sync --extra torch --extra onnx`),不会要求你一次拉取全部后端。 ### 七、Docker 运行 ```bash cd ModelTranslator # 构建镜像(默认只装 onnx 后端,轻量) docker build -t model-translator . # 按需组合后端 docker build --build-arg 'UV_EXTRAS=onnx openvino' -t model-translator . # 全部后端(体积很大,一般不需要) docker build --build-arg 'UV_EXTRAS=all' -t model-translator-full . # 查看支持格式 docker run --rm -v $(pwd):/workspace model-translator list # 挂载目录并转换(输入输出均在 /workspace 下) docker run --rm -v $(pwd):/workspace model-translator \ convert /workspace/model.pt /workspace/model.onnx --input-shape 1,3,224,224 # 或使用 docker-compose docker compose run --rm translator \ convert /workspace/model.pt /workspace/model.onnx --input-shape 1,3,224,224 ``` > Windows 下路径挂载:`docker run --rm -v %cd%:/workspace ...`(cmd)或 `-v ${PWD}:/workspace`(PowerShell)。 #### Dockerfile 说明 - 基础镜像:`ghcr.io/astral-sh/uv:python3.11-bookworm-slim`(uv 官方镜像,自带 uv) - 通过 `--build-arg UV_EXTRAS` 按需选择要安装的依赖分组(空格分隔多个) - 工作目录 `/workspace`,挂载模型输入输出即可 ### 八、项目结构 ``` ModelTranslator/ ├── pyproject.toml # uv 项目定义 + 可选依赖分组 ├── Dockerfile # Docker 镜像(按需构建) ├── docker-compose.yml # compose 一键运行 ├── src/model_translator/ │ ├── cli.py # 命令行入口(list/info/convert) │ ├── registry.py # 格式注册表 + 转换路径登记 │ └── converters/ # 各格式转换器(调用已有库) └── tests/test_registry.py # 基础逻辑单元测试 ``` ### 九、开发 ```bash uv sync --all-extras # 安装全部依赖(仅开发时需要) uv run model-translator list ``` 添加新格式/转换路径的步骤: 1. 在 `src/model_translator/registry.py` 注册新格式(`register_format`) 2. 在 `src/model_translator/converters/__init__.py` 实现转换函数并在 `register_all()` 中登记 3. 在 `pyproject.toml` 添加对应的可选依赖分组(注意 `requires` 中的分组名必须与分组 key 一致) ### 十、常见问题 - **没有安装对应库**:运行时提示缺少依赖,会给出精确的按需安装命令(如 `uv sync --extra torch --extra onnx`),或加 `--auto-install` 自动安装 - **PyTorch 转 ONNX 报错需要示例输入**:加 `--input-shape`,例如 `--input-shape 1,3,224,224` - **PyTorch 权重是 state_dict 无法直接加载**:编写加载脚本(定义 `load_model(path)` 返回模型),用 `--script` 传入 - **ONNX 转 TensorRT 报错找不到 trtexec**:需要另行安装 NVIDIA TensorRT(`trtexec` 不随 pip 分发) - **GGUF 转换报错**:需要安装 llama.cpp 并提供 `convert_hf_to_gguf.py`