在 Debian 上部署 PyTorch 的完整流程
一 环境准备
- 更新系统并安装基础工具与编译依赖(建议先执行一次系统更新):
- sudo apt update && sudo apt upgrade -y
- sudo apt install -y build-essential cmake git python3-dev python3-pip
- 可选但推荐:安装常用数值库与多媒体依赖,避免后续构建或数据处理报错:
- sudo apt install -y libopenblas-dev liblapack-dev libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev
- 说明:即便仅做推理,也建议准备上述依赖,能覆盖大多数深度学习工作流的基础需求。
二 安装 PyTorch
- 原生 Python 环境(pip)
- CPU 版本(最通用,零驱动依赖):
- pip3 install torch torchvision torchaudio
- GPU 版本(需已安装匹配版本的 NVIDIA 驱动 与 CUDA;命令中的 CUDA 标签需与驱动/CUDA 版本匹配,以下为示例,实际以官网生成命令为准):
- pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118
- Conda 环境(适合隔离与复现)
- CPU:
- conda create -n pytorch_env python=3.9
- conda activate pytorch_env
- conda install pytorch torchvision torchaudio cpuonly -c pytorch
- GPU(示例为 CUDA 11.8;如使用其他版本,替换 cudatoolkit 值):
- conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch -c nvidia
- 重要提示:GPU 安装前务必确认 驱动版本 与 CUDA/cuDNN 兼容矩阵;若不确定,优先选择 CPU 版本或参考 PyTorch 官网命令生成器。安装命令示例与版本选择思路可参考官方安装指南与常见安装实践。
三 验证安装与环境检查
- 基础验证(确认版本与设备可用性):
- python3 - <<‘PY’
import torch
print(“torch:”, torch.version)
print(“cuda available:”, torch.cuda.is_available())
if torch.cuda.is_available():
print(“device count:”, torch.cuda.device_count())
print(“current device:”, torch.cuda.current_device())
print(“device name:”, torch.cuda.get_device_name(0))
PY
- 预期输出要点:torch 版本号正常打印;如为 GPU 版本且驱动/CUDA 配置正确,torch.cuda.is_available() 返回 True,并显示设备数量与名称。若 GPU 不可用,请检查驱动、CUDA 与 PyTorch 的版本匹配关系。
四 部署与推理示例
- 最小化推理脚本(加载权重并执行前向推理):
- from model import MyModel # 你的模型定义
import torch
model = MyModel()
model.load_state_dict(torch.load(“model.pth”, map_location=“cpu”)) # CPU 推理;GPU 使用 map_location=“cuda”
model.eval()
x = torch.randn(1, 3, 224, 224) # 示例输入
with torch.no_grad():
y = model(x)
print(y)
- 以服务方式提供推理(Flask 示例,端口 5000):
- from flask import Flask, request, jsonify
import torch
from model import MyModel
app = Flask(name)
model = MyModel()
model.load_state_dict(torch.load(“model.pth”, map_location=“cpu”))
model.eval()
@app.route(“/predict”, methods=[“POST”])
def predict():
data = request.json[“input”]
x = torch.tensor(data, dtype=torch.float32).unsqueeze(0)
with torch.no_grad():
y = model(x)
return jsonify(y.tolist())
if name == “main”:
app.run(host=“0.0.0.0”, port=5000)
- 运行方式:
- python3 deploy.py
- 服务调用示例:curl -X POST http://127.0.0.1:5000/predict -H “Content-Type: application/json” -d ‘{“input”: [[[[0.0, …]]]]}’
- 说明:上述示例默认在 CPU 上运行;如需 GPU 推理,将模型和张量迁移到 cuda(如 model.to(“cuda”); x = x.to(“cuda”)),并确保 CUDA 环境可用。
五 Docker 容器化部署(可选)
- 拉取官方 PyTorch 镜像(选择与 CUDA 匹配的标签,示例为 1.8.1 + CUDA 11.1 + cuDNN 8,仅作演示,生产请选更新版本):
- docker pull pytorch/pytorch:1.8.1-cuda11.1-cudnn8-devel
- 构建项目镜像(示例 Dockerfile,挂载代码与数据卷,运行时启用所有 GPU):
- Dockerfile:
- FROM pytorch/pytorch:1.8.1-cuda11.1-cudnn8-devel
WORKDIR /project
COPY . /project
RUN pip3 install --no-cache-dir -r requirements.txt
CMD [“python”, “main.py”]
- 构建与运行:
- docker build -t my-pytorch-app .
- docker run --gpus all -d --memory=40g
-v /host/project:/project
-v /host/datasets:/project/datasets
my-pytorch-app
- 说明:容器化可显著简化依赖与环境一致性管理;如不使用 GPU,可选择不带 CUDA 的镜像标签(如 cpu 标签)。