一、TensorFlow.js 模型转换
1、概述
TensorFlow.js 提供了一个 模型转换器(TensorFlow.js Converter),用于将已有的 TensorFlow 或 Keras 模型转换成可在浏览器或 Node.js 中使用的格式。转换器包含:
- 命令行实用工具:用于将 TensorFlow / Keras / TF-Hub 模型转换为 TensorFlow.js 格式。
- 模型加载 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、转换过程内部机制(原理)
转换器工作流程大致如下:
- 图遍历与操作检查
读取原始模型计算图,检查各个操作(operation)是否支持 TensorFlow.js。 - GraphSimplification(图简化)
使用 Grappler 等工具对计算图进行优化,例如折叠无用节点、合并相邻运算等。 - 权重分片(Sharding)
将权重分为多个约 4MB 的.bin文件,以便浏览器缓存和快速加载。 - 失败处理
如果遇到不支持的运算,会失败并输出错误信息,可提交 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.openvino、optimum.neuron 等。
2. 开源集成与生态扩展
Optimum 支持多种开源工具和框架,用于模型优化与部署:
| 集成工具 | 说明 |
|---|---|
| ONNX Runtime | 提供图优化与加速 |
| ExecuTorch | PyTorch Edge 推理支持 |
| Exporters | 模型导出(ONNX / 其他格式) |
| Torch FX | 图转换与自定义优化 |
| ... | 其他扩展 |
4、安装与快速开始
1. 安装方式
Optimum 依赖的安装方式取决于你要使用的后端与优化目标。
-
pip 安装(稳定版本)
当使用常规功能时,可使用 pip 安装最新稳定版本,例如:
bashpip install optimum如果需要针对特定后端,例如 ONNX Runtime,可安装:
bashpip install optimum[onnxruntime]安装后可能还需要安装对应后端的依赖库,例如:
bashpip 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 保持一致,易于集成。