在Debian上如何进行PyTorch编程
在 Debian 上进行 PyTorch 编程
一 环境准备与安装
- 更新系统并安装基础工具:
- sudo apt update & & sudo apt install -y build-essential python3 python3-pip python3-venv git
- 建议创建隔离环境(可选但推荐):
- python3 -m venv ~/venvs/pt & & source ~/venvs/pt/bin/activate
- 安装 PyTorch(二选一)
- CPU 版本:pip install torch torchvision torchaudio
- GPU 版本(示例为 CUDA 11.7,请按你的驱动与 CUDA 版本选择):pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
- 验证安装:
- python - < < ‘PY’ import torch print(“PyTorch version:”, torch.version) print(“CUDA available:”, torch.cuda.is_available()) print(“cuDNN enabled:”, torch.backends.cudnn.enabled) PY
- 说明
- 若使用 GPU,需提前安装与 PyTorch 版本匹配的 NVIDIA 驱动、CUDA Toolkit、cuDNN,并设置环境变量(如 PATH、LD_LIBRARY_PATH)。安装命令中的 CUDA 标签(如 cu117)必须与系统 CUDA 版本一致,否则会导致运行时异常或无法启用 GPU。
二 快速上手 训练一个 MNIST 分类器
- 完整示例(单文件可直接运行,默认 CPU;有 GPU 且配置正确时会自动使用):
-
python - < < ‘PY’ import torch, torch.nn as nn, torch.nn.functional as F from torch.utils.data import DataLoader from torchvision import datasets, transforms
1) 数据
transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) # MNIST 均值与标准差 ]) train_ds = datasets.MNIST(root=‘./data’, train=True, download=True, transform=transform) test_ds = datasets.MNIST(root=‘./data’, train=False, download=True, transform=transform) train_loader = DataLoader(train_ds, batch_size=64, shuffle=True) test_loader = DataLoader(test_ds, batch_size=64, shuffle=False)
2) 模型
class Net(nn.Module): def init(self): super().init() self.fc1 = nn.Linear(2828, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = x.view(-1, 2828) x = F.relu(self.fc1(x)) return F.log_softmax(self.fc2(x), dim=1)
device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”) model = Net().to(device) criterion = nn.NLLLoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
3) 训练与评估
for epoch in range(3): model.train() for data, target in train_loader: data, target = data.to(device), target.to(device) optimizer.zero_grad() loss = criterion(model(data), target) loss.backward() optimizer.step() model.eval() correct = total = 0 with torch.no_grad(): for data, target in test_loader: data, target = data.to(device), target.to(device) pred = model(data).argmax(dim=1) total += target.size(0) correct += (pred == target).sum().item() print(f"Epoch { epoch+1} : test acc = { 100*correct/total:.2f} %") PY
-
- 要点
- 使用 torchvision.datasets 与 transforms 做标准化与增强。
- 通过 DataLoader 批量加载与打乱数据。
- 模型、数据与损失均移动到同一 device(GPU 或 CPU)。
三 图像处理与 torchvision 常用操作
- 安装图像处理依赖:
- pip install Pillow opencv-python-headless # 或仅 Pillow
- 常见用法示例:
-
python - < < ‘PY’ from PIL import Image from torchvision import transforms
transform = transforms.Compose([ transforms.Resize((256, 256)), transforms.ToTensor(), # 转为 [0,1] 的 FloatTensor,形状 (C,H,W) ]) img = Image.open(‘path_to_image.jpg’).convert(‘RGB’) tensor = transform(img) # 张量化,可直接作为模型输入 print(tensor.shape, tensor.dtype) PY
-
- 说明
- Pillow 负责图像 I/O 与基础操作;torchvision.transforms 提供常用的训练前处理与数据增强流水线。
四 模型保存加载与简单服务化部署
- 保存与加载
- 保存:torch.save(model.state_dict(), ‘model.pth’)
- 加载:
- python - < < ‘PY’ import torch from model import MyModel # 你的模型定义 model = MyModel() model.load_state_dict(torch.load(‘model.pth’, map_location=‘cpu’)) # GPU 训练、CPU 推理时使用 map_location model.eval() PY
- 以 Flask 提供 HTTP 推理服务的最小示例
- pip install flask
- app.py
- python - < < ‘PY’ from flask import Flask, request, jsonify import torch, json 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) with torch.no_grad(): y = model(x) return jsonify(y.tolist()) if name == ‘main’: app.run(host=‘0.0.0.0’, port=5000) PY
- 运行:python app.py,然后向 http://:5000/predict 发送 JSON 即可获取推理结果。
五 常见问题与排错要点
- GPU 不可用
- 检查输出:torch.cuda.is_available() 为 False 时,优先核对驱动、CUDA、cuDNN 版本是否与安装的 PyTorch 构建匹配;必要时重装对应标签的 PyTorch 版本(如 cu117/cu118 等)。
- 环境与依赖冲突
- 使用 venv/conda 隔离环境;升级 pip 后优先使用官方 PyPI 索引或 PyTorch 官方通道安装预编译包,避免与系统包冲突。
- 镜像与网络
- 国内用户可使用可信镜像源加速安装(如清华源),但务必确保索引仍指向 pytorch.org 的对应 CUDA 轮子,避免版本错配。
- 树莓派等 ARM 设备
- 选择支持 ARM 的预编译包或社区轮子,安装时间可能较长;安装后用 torch.cuda.is_available() 验证(多数情况下为 False,属正常)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 在Debian上如何进行PyTorch编程
本文地址: https://pptw.com/jishu/758325.html
