部署 PyTorch 模型通常涉及模型导出 → 选择部署方式 → 服务化/集成 → 优化与监控几个阶段。下面我按常见场景给你一个清晰、可落地的指南。
常见两种方式:
方式 A:保存整个模型(不推荐生产)
torch.save(model, "model.pth")
方式 B:只保存权重(推荐)
torch.save(model.state_dict(), "model_weights.pth")
部署时通常配合:
model = MyModel()
model.load_state_dict(torch.load("model_weights.pth"))
model.eval()
example_input = torch.rand(1, 3, 224, 224)
traced_model = torch.jit.trace(model, example_input)
traced_model.save("model.pt")
或(支持控制流):
scripted_model = torch.jit.script(model)
scripted_model.save("model.pt")
✅ 优点:
技术栈:Flask / FastAPI + PyTorch
from fastapi import FastAPI
import torch
app = FastAPI()
model = torch.jit.load("model.pt")
model.eval()
@app.post("/predict")
def predict(data: list):
x = torch.tensor(data)
with torch.no_grad():
y = model(x)
return y.tolist()
启动:
uvicorn main:app --host 0.0.0.0 --port 8000
TorchServe(官方)
pip install torchserve torch-model-archiver
打包:
torch-model-archiver \
--model-name mymodel \
--serialized-file model.pt \
--export-path model_store \
--runtime python
启动:
torchserve --start --model-store model_store --models mymodel
PyTorch → ONNX → 移动端
torch.onnx.export(
model,
example_input,
"model.onnx",
input_names=["input"],
output_names=["output"]
)
然后使用:
#include <torch/script.h>
auto model = torch::jit::load("model.pt");
auto input = torch::rand({1, 3, 224, 224});
auto output = model.forward({input}).toTensor();
model.eval()with torch.no_grad():batch 推理model.cuda() + input.cuda()客户端
↓
API (FastAPI / TorchServe)
↓
PyTorch 推理
↓
返回结果
我可以直接给你可运行的部署代码模板。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。