终章:部署上线+性能调优——从Dev到Prod的AI协作闭环
1. 部署前的生产就绪检查清单 “可部署”不等于“已部署”——前者是通过所有自动化校验的制品状态,后者是在真实流量下持续稳定运行的服务实例。二者之间横亘着模型一致性、代码鲁棒性、依赖确定性与配置安全性的四重鸿沟。跳过任一环节,都可能在凌晨三点收到 P99 延迟飙升的告警。 ✅ 模型验证:PyTorch → ONNX 推理一致性比对 模型转换后必须验证数值等价性。以下为完整校验流程(含断言): import torch import onnx import onnxruntime as ort from torch.testing import assert_close # 1. 构建示例模型与输入 model = torch.hub.load('pytorch/vision:v0.15.0', 'resnet18', pretrained=True).eval() x = torch.randn(1, 3, 224, 224) # 2. 导出 ONNX(关键:指定 dynamic_axes 支持变长 batch) onnx_path = "resnet18.onnx" torch.onnx.export( model, x, onnx_path, input_names=["input"], output_names=["output"], dynamic_axes={"input": {0: "batch"}, "output": {0: "batch"}}, opset_version=17 ) # 3. 加载并推理 ONNX ort_session = ort.InferenceSession(onnx_path, providers=['CPUExecutionProvider']) ort_out = ort_session.run(None, {"input": x.numpy()})[0] # 4. PyTorch 原生推理 with torch.no_grad(): pt_out = model(x).numpy() # 5. 断言严格一致性(容忍 1e-5 数值误差) assert_close( torch.from_numpy(ort_out), torch.from_numpy(pt_out), atol=1e-5, rtol=1e-5, msg="ONNX output deviates from PyTorch beyond tolerance!" ) ⚠️ 常见问题:torch.load("model.pt") 在 CPU 环境加载 GPU 训练模型会报 RuntimeError: Attempting to deserialize object on a CUDA device。修复方案:显式指定 map_location: ...