# 安装
pip install gradio
# app.py
import gradio
as gr
import torch
from torchvision
import transforms
from PIL
import Image
# 加载你的模型
model = load_your_model()
model.eval()
transform = transforms.Compose([
transforms.Resize((
224,
224)),
transforms.ToTensor(),
transforms.Normalize([
0.485], [
0.229])
])
def predict(image):
img = Image.fromarray(image).convert(
'RGB')
tensor = transform(img).unsqueeze(
0)
with torch.no_grad():
output = model(tensor)
probs = torch.softmax(output, dim=
1)[
0]
return {class_names[i]: float(p)
for i, p
in enumerate(probs)}
# 启动界面
demo = gr.Interface(
fn=predict,
inputs=gr.Image(),
outputs=gr.Label(num_top_classes=
3),
title=
'AI图像分类Demo',
description=
'上传图片,AI帮你分类'
)
demo.launch(server_name=
'0.0.0.0', server_port=
7860, share=
True)
✅ 优点
极简代码(30行),自动生成漂亮UI
⚠️ 缺点
性能有限,不适合生产环境
🔌 方案:FastAPI 标准 RESTful 接口
业内主流方案,高性能异步框架,配合 Docker 容器化
# 安装
pip install fastapi uvicorn python-multipart
# main.py
from fastapi import FastAPI, UploadFile, File
from fastapi.responses import JSONResponse
import torch, io
from PIL import Image
app = FastAPI(title='AI预测API')
# 启动时加载模型(只加载一次)
model = None
@app.on_event('startup')
def load_model():
global model
model = load_your_model()
model.eval()
@app.post('/predict')
async def predict(file: UploadFile = File(...)):
contents = await file.read()
img = Image.open(io.BytesIO(contents)).convert('RGB')
with torch.no_grad():
tensor = transform(img).unsqueeze(0)
output = model(tensor)
probs = torch.softmax(output, dim=1)[0]
return JSONResponse({
'prediction': class_names[probs.argmax().item()],
'confidence': float(probs.max()),
'scores': {class_names[i]: float(p) for i, p in enumerate(probs)}
})
# 启动:uvicorn main:app --host 0.0.0.0 --port 8000
# 文档:自动生成 http://localhost:8000/docs
🌐 方案:完整 Web 应用架构
前后端分离,适合面向用户的正式产品
🖥️
前端
React / Vue / Next.js
上传、展示、交互
⚙️
后端
FastAPI / Flask / Node.js
API 网关、鉴权、队列
🧠
模型服务
TorchServe / Triton / ONNX Runtime
高并发推理引擎
📦 Docker 容器化模板
# Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
一键构建运行:docker build -t ai-api . && docker run -p 8000:8000 ai-api
📱 方案:移动端 / 边缘设备
离线推理、极低延迟、保护隐私。需要模型压缩优化
🛠️ 模型压缩三剑客
量化 Quantization
FP32 → INT8,体积减75%,速度提2-4x
torch.quantize.quantize_dynamic()
剪枝 Pruning
去掉冗余权重/通道,稀疏化
torch.nn.utils.prune
蒸馏 Distillation
大模型教小模型,精度损失小
Knowledge Distillation
📱 移动部署方案
🍎
CoreML (iOS)
PyTorch → ONNX → CoreML
🤖
TFLite / NCNN (Android)
ONNX → NCNN / TFLite Converter
🎯
ONNX Runtime (跨平台)
Linux/Windows/Mac 通用
📹
TensorRT (NVIDIA)
Jetson / 边缘盒子首选