模型转换、加速与推理优化【Plan 8】

一、TensorFlow.js 模型转换

1、概述

TensorFlow.js 提供了一个 模型转换器(TensorFlow.js Converter),用于将已有的 TensorFlow 或 Keras 模型转换成可在浏览器或 Node.js 中使用的格式。转换器包含:

  1. 命令行实用工具:用于将 TensorFlow / Keras / TF-Hub 模型转换为 TensorFlow.js 格式。
  2. 模型加载 API:用于在 JavaScript 环境中加载并运行转换后的模型。

2、为什么需要转换

浏览器或 JavaScript 环境不能直接运行原始 TensorFlow 或 Keras 模型。TensorFlow.js Converter 会:

  • 遍历模型计算图,检查各个操作(op)是否被支持。
  • 将支持的计算图转换成 TensorFlow.js 格式(包含 model.json + 权重二进制文件)。
  • 对权重进行分片以优化浏览器缓存和加载效率。

3、支持的模型格式

TensorFlow.js Converter 支持以下模型输入类型:

输入模型格式 描述
SavedModel TensorFlow 默认保存格式,包含计算图和变量。
Keras HDF5 (.h5) Keras 模型,通常通过 .save() 导出。
TensorFlow Hub 模块 在 TensorFlow Hub 上发布的模型模块。

不同格式的模型需要指定不同的转换参数。

4、模型转换流程

1. 安装转换器

确保已安装 TensorFlow.js Converter:

bash 复制代码
pip install tensorflowjs

或按照 TensorFlow 文档安装方法设置 Python 环境。

2. 使用 CLI 进行转换

转换命令示例:

bash 复制代码
tensorflowjs_converter \
  --input_format=keras \
  /tmp/model.h5 \
  /tmp/tfjs_model

转换后,会在目标目录生成:

  • model.json
  • 一组 .bin 权重文件(默认按 4MB 大小分片)

5、转换器常用参数解释

参数 说明
--input_format 输入模型格式(如 keras, tf_saved_model, tf_frozen_model, tf_hub
input_path 要转换的模型文件/目录路径或 TF Hub 模块地址
output_path 输出 TensorFlow.js 模型的目录
其它可选参数 如权重量化参数等(用于减少模型大小)

量化参数可以控制权重精度(例如 8 位量化),但需注意保持推理精度。

6、转换过程内部机制(原理)

转换器工作流程大致如下:

  1. 图遍历与操作检查
    读取原始模型计算图,检查各个操作(operation)是否支持 TensorFlow.js。
  2. GraphSimplification(图简化)
    使用 Grappler 等工具对计算图进行优化,例如折叠无用节点、合并相邻运算等。
  3. 权重分片(Sharding)
    将权重分为多个约 4MB 的 .bin 文件,以便浏览器缓存和快速加载。
  4. 失败处理
    如果遇到不支持的运算,会失败并输出错误信息,可提交 GitHub issue 请求支持新增 ops。

7、加载与运行转换后的模型

转换完成后,TensorFlow.js 提供了不同 API 来加载模型:

1. 加载 GraphModel

适用于 SavedModel 或 TF Hub 转换的图模型:

python 复制代码
const model = await tf.loadGraphModel('path/to/model.json');

返回类型为 tf.FrozenModel,无法进行训练,只能推理。

2. 加载 LayersModel

适用于 Keras 模型转换:

python 复制代码
const model = await tf.loadLayersModel('path/to/model.json');

返回类型为 tf.Model(可以进一步训练)。

8、推理与基准测试建议

  • 初次推理可能很慢(浏览器创建纹理、编译 shader)。
  • 建议运行多次推理并丢弃预热阶段结果,用于真实性能评估。
  • TensorFlow 提供了基准测试页面,可用来测试模型速度。

二、Optimum

1、什么是 Optimum

Optimum 是 Hugging Face 围绕 Transformers 生态构建的一个性能优化扩展库,旨在 提高模型在训练与推理时的效率和速度 并使其能在各种硬件平台上高效运行。它通过提供统一的工具与 API,使开发者像使用 Transformers 一样轻松地利用针对不同硬件的加速方案。

2、Optimum 的目标

  • 训练(training)与推理(inference) 提供性能加速工具。
  • 使大型 Transformer 模型能在多种硬件(如 GPU、CPU、加速器)上高效运行。
  • 封装复杂的量化、图优化、后端支持,让用户快速部署和迭代工作流。

3、Optimum 的组成结构

Optimum 不是一个单一的库,而是由多个子包组成的集合,每个子包针对特定 硬件平台或优化方向

1. 硬件合作伙伴支持

平台 功能
NVIDIA 使用 TensorRT-LLM 加速推理
AMD 优化 AMD GPU / AI NPU
Intel 提供 OpenVINO、Neural Compressor、IPEX 加速
AWS Trainium / Inferentia 训练 & 推理加速
Google TPUs TPU 推理 & 训练
Habana Gaudi Gaudi 加速
FuriosaAI WARBOY 高效推理

这些子包通常以 optimum.{vendor} 形式分发,例如 optimum.intel.openvinooptimum.neuron 等。

2. 开源集成与生态扩展

Optimum 支持多种开源工具和框架,用于模型优化与部署:

集成工具 说明
ONNX Runtime 提供图优化与加速
ExecuTorch PyTorch Edge 推理支持
Exporters 模型导出(ONNX / 其他格式)
Torch FX 图转换与自定义优化
... 其他扩展

4、安装与快速开始

1. 安装方式

Optimum 依赖的安装方式取决于你要使用的后端与优化目标。

  • pip 安装(稳定版本)

    当使用常规功能时,可使用 pip 安装最新稳定版本,例如:

    bash 复制代码
    pip install optimum

    如果需要针对特定后端,例如 ONNX Runtime,可安装:

    bash 复制代码
    pip install optimum[onnxruntime]

    安装后可能还需要安装对应后端的依赖库,例如:

    bash 复制代码
    pip install onnx onnxruntime

    具体依赖根据优化方案而定。

5、主要功能详解

1. 推理优化

Optimum 通过多种机制加速模型推理:

a. 使用 ONNX Runtime

Optimum 可以将 Transformers 模型导出为 ONNX 格式,并通过 ONNX Runtime 加速推理。导出后可使用 ORTModelFor* 类进行加载。

示例:

python 复制代码
from transformers import AutoTokenizer
from optimum.onnxruntime import ORTModelForSequenceClassification

model = ORTModelForSequenceClassification.from_pretrained("model-id")
tokenizer = AutoTokenizer.from_pretrained("model-id")

这种方式兼容 Hugging Face 的标准 pipelines,用于实现更快的推理。

2. 量化与图优化

Optimum 提供对模型 量化与图优化 的支持,以减少内存占用和提升推理速度:

  • 可在 ONNX 导出期间应用不同优化级别(O1--O4)。
  • 支持动态/静态量化、FP16 混合精度等。

示例 CLI:

bash 复制代码
optimum-cli export onnx \
  --model bert-base-uncased \
  --optimize O3 \
  --output_dir bert_onnx/
  • O1、O2:基础图融合。
  • O3:包含 GELU 近似。
  • O4:包含 FP16 混合精度(需要 GPU)。

3. 硬件专有优化

各硬件子包提供针对平台的专有优化,例如:

平台 功能
Intel OpenVINO 量化与推理加速
AWS Neuron Trainium/Inferentia 加速训练与推理
NVIDIA TensorRT-LLM LLM 推理加速
Gaudi 大规模训练加速

这些子包通常通过替换标准 Transformers 类来启用硬件优化。例如,使用 OpenVINO 推理类替换原生模型类。

6、典型用例

1. 使用 ONNX Runtime 推理加速

  • 将 Transformers 模型导出为 ONNX 格式。
  • 应用图层优化与量化。
  • 使用 Optimum 的 ONNX 模型类进行高速推理。

2. 使用硬件加速训练

Optimum 对特定硬件(如 Trainium、Gaudi)提供封装的训练器,使用时只需最小代码修改,即可替换为对应的硬件训练组件。

7、Optimum 的优势

  • 性能加速:比标准 Transformers 推理更快,尤其在量化 + ONNX Runtime 情况下显著。
  • 跨平台支持:支持多种加速硬件(GPU、CPU、加速器)。
  • 与 Transformers 兼容:设计上与 Hugging Face Transformers API 保持一致,易于集成。

学习资料来源:
模型转换
Optimum

相关推荐
Quintus五等升2 小时前
深度学习④|分类任务—VGG13
人工智能·经验分享·深度学习·神经网络·学习·机器学习·分类
全栈开发圈4 小时前
干货分享|深度学习计算的FPGA优化思路
人工智能·深度学习·fpga开发
老鱼说AI5 小时前
论文精读第七期:告别昂贵的人工标注!Math-Shepherd:如何用“零成本”自动化过程监督,让大模型数学能力暴涨?
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·boosting
抠头专注python环境配置6 小时前
基于Python与深度学习的智能垃圾分类系统设计与实现
pytorch·python·深度学习·分类·垃圾分类·vgg·densenet
梦想是成为算法高手6 小时前
带你从入门到精通——知识图谱(一. 知识图谱入门)
人工智能·pytorch·python·深度学习·神经网络·知识图谱
棒棒的皮皮7 小时前
【深度学习】YOLO学习教程汇总
深度学习·学习·yolo·计算机视觉
地理探险家8 小时前
【YOLOv8 农业实战】11 组大豆 + 棉花深度学习数据集分享|附格式转换 + 加载代码
人工智能·深度学习·yolo·计算机视觉·目标跟踪·农业·大豆
TonyLee0178 小时前
半监督学习介绍
人工智能·python·深度学习·机器学习
DashVector8 小时前
通义深度搜索-上传文件
人工智能·深度学习·阿里云·ai·深度优先