当前位置: 首页 > news >正文

深度学习模型部署与加速汇总

深度学习模型的部署与加速方法归纳汇总
1. 模型训练
  • 使用 PyTorch、TensorFlow、Keras、MXNet 等框架进行训练
  • 输出:.pt, .pth, .h5, .pb 等格式的模型文件
2. 模型转换

将原始模型转换为适合部署的格式:

  • ONNX
  • TensorRT 格式(.engine)
  • OpenVINO IR 格式(.xml, .bin)
  • TFLite(用于移动端)
使用 ONNX + ONNX Runtime 部署

安装依赖:

sudo apt-get update
sudo apt-get install python3-pip
pip3 install torch onnx onnxruntime
# 导出ONNX模型
import torch
import torchvisionmodel = torchvision.models.resnet18(pretrained=True)
model.eval()
dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(model, dummy_input, "resnet18.onnx")
# 使用 ONNX Runtime 推理
import onnxruntime as ort
import numpy as nport_session = ort.InferenceSession("resnet18.onnx")
outputs = ort_session.run(None,{'input': dummy_input.numpy()}
)
print(outputs)
3. 模型优化
  • 量化(Quantization):FP32 → FP16 / INT8
  • 剪枝(Pruning)
  • 蒸馏(Distillation)
常用模型加速方法
方法描述工具
FP16 推理使用半精度浮点数降低计算量TensorRT, OpenVINO
INT8 量化使用整型代替浮点运算TensorRT, OpenVINO
模型剪枝减少冗余参数PyTorch/TensorFlow 自带工具
知识蒸馏小模型模仿大模型输出自定义损失函数
模型压缩(如 MobileNet, EfficientNet)使用轻量级网络结构TensorFlow Lite, MMDetection
异构计算(GPU/CPU/NPU)利用不同硬件加速CUDA, OpenCL, VPU
PyTorch 中剪枝 ResNet
import torch.nn.utils.prune as prunemodel = torchvision.models.resnet18(pretrained=True)
# 对 conv1 层做 L1 无结构剪枝
prune.l1_unstructured(model.conv1, name='weight', amount=0.3)  # 剪掉 30% 权重
prune.remove(model.conv1, 'weight')  # 固定剪枝后的权重
PyTorch 中简单蒸馏训练
teacher_model.eval()
student_model.train()criterion_ce = torch.nn.CrossEntropyLoss()
criterion_kl = torch.nn.KLDivLoss(reduction="batchmean")for images, labels in dataloader:with torch.no_grad():teacher_logits = teacher_model(images)student_logits = student_model(images)loss_ce = criterion_ce(student_logits, labels)loss_kd = criterion_kl(F.log_softmax(student_logits / T, dim=1),F.softmax(teacher_logits / T, dim=1)) * (alpha * T * T)total_loss = loss_ce + loss_kdoptimizer.zero_grad()total_loss.backward()optimizer.step()
4. 模型部署
  • CPU 推理(OpenVINO, ONNX Runtime)
  • GPU 推理(TensorRT, CUDA)
  • 边缘设备(Jetson, RK3399, Coral TPU)
使用 Flask提供 REST API
from fastapi import FastAPI
import uvicornapp = FastAPI()@app.post("/predict")
def predict(data: dict):# 模型推理逻辑return {"result": ...}uvicorn.run(app, host="0.0.0.0", port=5000)
使用 Triton Inference Server

适用于多模型、多框架部署,支持动态批处理、模型热加载等高级功能。

# 启动 Triton
docker run --gpus all --rm -p8000:8000 -p8001:8001 -p8002:8002 nvcr.io/nvidia/tritonserver:23.09-py3
5. 接口封装
  • REST API(Flask, FastAPI)
  • gRPC
  • 模型服务化(Triton Inference Server, TorchServe)
部署流程简图:
ONNX/TFLite
量化/剪枝
TensorRT/OpenVINO
FastAPI/Triton
模型训练
模型导出
模型优化
模型部署
服务化
http://www.lqws.cn/news/191881.html

相关文章:

  • Linux LVM与磁盘配额
  • CMOS图像传感器系列--(二)HDR之DAG技术
  • 浏览器后台服务 vs 在线教育:QPS、并发模型与架构剖析
  • 基于J2EE架构的在线考试系统设计与实现【源码+文档】
  • Python Pandas库超详细教程:从入门到精通实战指南
  • C++.OpenGL (9/64)复习(Review)
  • python打卡44天
  • 破壁焕新能:DeviceNET转EtherNet/IP网关赋能烟草智能制造跃迁
  • 通过Spring AI框架搭建mcp服务端说明
  • 动态内存管理
  • C++——红黑树
  • 22N60-ASEMI光伏逆变器专用22N60
  • N2语法 列挙、話題提出
  • ROS1: 使用rosbag的方式将点云topic保存为pcd文件
  • 软考 系统架构设计师系列知识点之杂项集萃(83)
  • H_Prj06 8088单板机的串口
  • Java下载文件(特殊字符编码处理)
  • 为什么说数列是特殊的函数
  • 2025主流智能体Agent终极指南:Manus、OpenManus、MetaGPT、AutoGPT与CrewAI深度横评
  • Day14
  • Java-IO流之压缩与解压缩流详解
  • 前端开发面试题总结-JavaScript篇(一)
  • SQLAlchemy 中的 func 函数使用指南
  • 手机号段数据库的作用
  • 传统的将自然语言转化为嵌入向量的核心机制是:,将离散的语言符号转化为连续的语义向量,其核心依赖“上下文决定语义”的假设和神经网络的特征提取能力。
  • SATA3.0接口PCB布局走线注意事项
  • 【各种主流消息队列(MQ)对比指南】
  • vue3:十五、管理员管理-页面搭建
  • CMake 为 Debug 版本的库或可执行文件添加 d 后缀
  • vue组件的data为什么是函数?