在 CentOS 上部署 PyTorch 服务,通常分为 环境准备 → 模型服务化 → 部署运行 几个阶段。下面给你一套通用且可落地的方案,从简单到生产级。
sudo yum update -y
sudo yum install -y python3 python3-pip
python3 --version
# 查看显卡
nvidia-smi
pip3 install torch torchvision torchaudio
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
验证:
import torch
print(torch.__version__)
print(torch.cuda.is_available())
pip3 install flask
app.pyfrom flask import Flask, request, jsonify
import torch
app = Flask(__name__)
model = torch.jit.load("model.pt") # 或 torch.load
model.eval()
@app.route("/predict", methods=["POST"])
def predict():
data = request.json["input"]
x = torch.tensor(data)
with torch.no_grad():
y = model(x)
return jsonify({"result": y.tolist()})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
python3 app.py
测试:
curl -X POST http://localhost:8080/predict \
-H "Content-Type: application/json" \
-d '{"input":[[1,2,3]]}'
pip3 install fastapi uvicorn
from fastapi import FastAPI
import torch
app = FastAPI()
model = torch.jit.load("model.pt")
@app.post("/predict")
def predict(data: list):
x = torch.tensor(data)
y = model(x)
return {"result": y.tolist()}
运行:
uvicorn app:app --host 0.0.0.0 --port 8080
pip3 install torchserve torch-model-archiver
torch-model-archiver \
--model-name mymodel \
--version 1.0 \
--serialized-file model.pt \
--handler image_classifier \
--export-path model_store
torchserve --start \
--model-store model_store \
--models mymodel=mymodel.mar
访问:
curl http://localhost:8080/predictions/mymodel -T test.jpg
FROM pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime
WORKDIR /app
COPY . /app
RUN pip install fastapi uvicorn
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8080"]
docker build -t pytorch-service .
docker run -p 8080:8080 pytorch-service
nohup uvicorn app:app --host 0.0.0.0 --port 8080 &
# /etc/systemd/system/pytorch.service
[Unit]
Description=PyTorch Service
[Service]
User=root
WorkingDirectory=/app
ExecStart=/usr/bin/python3 /app/app.py
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start pytorch
systemctl enable pytorch
| 问题 | 解决 |
|---|---|
| GLIBC 版本低 | 升级 CentOS 或用 Docker |
| 显存不足 | 减小 batch / 用 CPU |
| 并发低 | 用 FastAPI + 多 worker |
| 模型加载慢 | 使用 TorchScript |
✅ 学习 / 测试:Flask
✅ 生产 / API:FastAPI + Uvicorn
✅ 企业级:TorchServe / Docker
如果你愿意,可以告诉我:
我可以直接帮你写 完整可运行部署方案。