【基础篇 12】把环境与源码接起来:检查 GPU,再安装服务器上的项目

YOLO从零到论文:模型改进与科研实战全攻略

YOLO基础篇 · A12

作者:迪菲赫尔曼

大家好,我是迪菲赫尔曼。

我们已经有两样东西:A10 创建的课程环境,以及 A11 放到服务器上的官方源码。走到这里,模型还没开始训练,准备工作却已经做了不少,你可能也想赶紧看到结果了。

偏偏环境安装又很容易让人着急:看到报错就搜一条命令,装完这个又升级那个,最后连原来能运行的部分也出了问题。命令执行了很多,自己却说不清到底改了哪份环境。

这也是我想把这一课拆开讲的原因。我们先认清当前 Python、已有依赖和源码的位置,检查能用的部分,再完成需要的安装。后面遇到问题时,就能沿着检查结果往回找。

今天把"装在哪里、导入哪份源码、GPU 能不能真正计算"这几件事对上,后面的训练才有一个清楚的起点。 下面就把现有环境和源码接起来。

本篇统一在远端 Linux 终端执行。 镜像已有能使用 GPU 的 PyTorch,我们先核对并复用。这里不再同时给 Windows、Mac 和 CPU 安装分支,避免你不知道到底该复制哪一组。

1. 每次开始,都先确定两件事

bash 复制代码
cd /root/lanyun-tmp/yolo-study
source env/bin/activate
pwd
python -c "import sys; print(sys.executable)"

前者应是课程根目录,后者应是课程 env/bin/python。

别把这两个检查合成一个印象:目录正确不保证环境正确,环境正确也不保证安装目标正确。

再确认 A11 的源码:

bash 复制代码
ls code/ultralytics-8.4.183/pyproject.toml

如果没有这个文件,先修正解压层级;不要去安装名叫 pyproject 的包。

2. PyTorch、torchvision 和 Ultralytics 分别做什么?

PyTorch 提供张量计算、神经网络层与自动求导。后面反向传播、参数更新,都要用到它。

torchvision 提供视觉相关功能,并与 PyTorch 有版本配合关系。它不是 YOLO 代码的另一个名字。

Ultralytics 在这些能力之上组织模型、数据、训练与结果。我们后面修改的就是这份项目源码。

可以先记住这个依赖方向:

text 复制代码
你的训练脚本 → Ultralytics → PyTorch 等依赖 → CPU/GPU 与系统驱动

它只表示主要关系,不是全部内部调用。编辑器只是帮助你保存和发起运行,不在这条链上代替 PyTorch 计算。

3. 先看版本和 GPU 可用状态

bash 复制代码
python -c "import torch, torchvision; print(torch.__version__); print(torchvision.__version__); print(torch.version.cuda); print(torch.cuda.is_available())"

我这里的结果是:

text 复制代码
2.7.1+cu128
0.22.1+cu128
12.8
True

这组结果来自本次实例,不要求其他镜像逐字相同。但是本专栏跟做路线要求你确认当前环境确实可以使用 NVIDIA GPU。

如果驱动看得到显卡,当前 Python 却返回 False,可能是用了错误解释器或不合适的 PyTorch 构建。先把当前路径与错误保存下来,不能看到 False 就无条件升级所有软件。

4. 为什么两个 CUDA 版本数字不同?

在远端输入:

bash 复制代码
nvidia-smi

我这台机器的驱动页面显示 CUDA 13.0,而 torch.version.cuda 是 12.8。

前者表示驱动支持的 CUDA 版本能力,后者说明这份 PyTorch 的 CUDA 构建版本。两个数字用途不同,不需要仅为了让它们看起来相同就重装驱动 。字段含义见 NVIDIA 官方 nvidia-smi 说明。

基础学习阶段,我们不修改宿主机驱动。容器里能够列出 GPU、PyTorch 能够执行 GPU 计算,才是当前要确认的结果。

5. 别只看 True,做一次真正的 GPU 计算

在服务器课程根目录新建 gpu_check.py,保存下面代码:

python 复制代码
import torch

print("PyTorch:", torch.__version__)
print("CUDA available:", torch.cuda.is_available())
if not torch.cuda.is_available():
    raise RuntimeError("CUDA unavailable: check the selected Python and server image first")

x = torch.tensor([1.0, 2.0, 3.0], device="cuda:0")
y = x * 2
print("GPU:", torch.cuda.get_device_name(0))
print("Device:", y.device)
print("Values:", y.cpu().tolist())

运行:

bash 复制代码
python gpu_check.py

关键输出应包含:

text 复制代码
Device: cuda:0
Values: [2.0, 4.0, 6.0]

这里 cuda:0 是当前进程能看到的第 0 张 GPU;x * 2 才是实际计算。最后 cpu().tolist() 将结果复制回 CPU,转成方便阅读的 Python 列表。不是所有数据都从此永远留在 GPU。

raise RuntimeError 是主动结束不符合当前前提的流程,让错误明确地停在这里。不要删除它来掩盖 GPU 不可用。

6. 用当前 Python 安装刚才那份源码

仍站在课程根目录执行:

bash 复制代码
python -m pip install -e ./code/ultralytics-8.4.183

拆开看:

  • python -m pip:由当前课程解释器执行安装工具。
  • install:执行安装。
  • -e:可编辑安装,环境与这份源码建立联系。
  • 最后的路径:A11 解压出的、包含 pyproject.toml 的项目根目录。

后面修改这份源码时,Python 能读到它。这不是把任意一个 .py 文件复制进 env,也不是安装浏览器里的云端 API。

把安装时用的 Python 和运行时读到的源码放在同一张图上核对。

课程解释器通过可编辑安装关联课程源码;最终用 ultralytics.file 核对实际导入位置。

版本号相同仍可能是两份项目;最终以 ultralytics.file 指向的真实路径为准。

安装过程可能下载缺少的依赖,先等待完整结束。看到 Successfully installed 是一个检查点,但不是最终验收。

如果下载失败,看清具体包名与网络错误,保留完整日志。不要在已经失败的安装后直接开始训练,再把缺包误认为模型代码问题。

7. 打印真正导入的位置

安装结束后执行:

bash 复制代码
python -c "import ultralytics; print(ultralytics.__version__); print(ultralytics.__file__)"

按 A11 的目录摆放,应看到:

text 复制代码
8.4.183
/root/lanyun-tmp/yolo-study/code/ultralytics-8.4.183/ultralytics/__init__.py

版本正确但路径指向另一份项目,依然没有完成本篇任务。

我按随文 ZIP 安装后,打印了完整的导入位置,A13 的截图可以对照。以这套主线的目录关系为准,不能只看版本相同就忽略路径。

8. 为什么暂时不每天升级 PyTorch?

我们正在建立能复现的教学环境。源码固定,依赖组合也要记录,不是包名相同就自动代表运行条件相同。

本次复用镜像中的 GPU PyTorch,在课程环境补装项目依赖;没有让你执行 pip install --upgrade torch。如果镜像与这里不同,需要先对照 PyTorch 官方安装入口 选择支持的组合,再记录新的验证环境。

这不是说新版本不好,而是升级也属于实验条件变更。先留住能运行的组合,再在独立环境验证变化。

9. 把环境记录保存下来

bash 复制代码
python -m pip freeze > requirements-server.txt

这会在当前课程目录写出依赖记录。同名文件会更新,需要保留旧实验时先复制备份。

这个文件不包含完整操作系统、驱动或所有镜像信息,也不包含你的数据。它是环境记录的一部分,不能单独代替完整复现材料。

今天结束时,你应该能回答:解释器在哪里、GPU 是否真能计算、导入的是哪份源码。下一篇用一个集中自检脚本把这些结果写成报告,再运行最早保存的代码。

上一篇:A11

相关推荐
技灵AI1 小时前
MiniMax H3 能做哪些视频?商品广告、人物表演与运镜怎么选
人工智能·prompt·aigc·音视频
cq林志炫1 小时前
两个Linux服务器之间同步文件
linux·运维·服务器
2601_962885721 小时前
2026 Python 股票数据接口选型指南(横评 + 决策树)
开发语言·python·区块链
yyuuuzz2 小时前
云服务器安全组规则优先级的机制记录
运维·服务器·网络·安全·阿里云·aws
ZzT2 小时前
AI 时代吃香的三种人:有想法的懒人、替别人着想的人、不被 AI 带偏的人
人工智能·ai编程
龙腾AI白云2 小时前
大模型检索增强生成(RAG)的技术原理与架构设计
数据库·python·机器学习·知识图谱
姚瑞南2 小时前
【PRD】招投标商机雷达爬虫系统
人工智能·经验分享·笔记·爬虫·产品运营·产品经理
Evand J2 小时前
【PMSM例程4】PMSM电阻辨识与模型补偿EKF,MATLAB例程。附下载链接,包运行成功
开发语言·matlab·电机·ekf·卡尔曼·pmsm
王仔小奶2 小时前
Rust 正在接管金融圈?深度拆解一份高薪 FinTech 岗位 JD
开发语言·金融·rust