Windows环境下深度学习环境离线安装教程(torch+ultralytics,适配YOLO)
目录
一、写在前面
最近我们给客户交付了一套基于深度学习视觉检测的工业质检方案。项目的核心思路是:使用工业相机采集产品图像,通过目标检测算法识别关键区域中的目标或缺陷,然后根据检测结果判断产品是否合格。
在算法实现上,我们采用的是 ultralytics 库中的 YOLOv8。整个训练流程大致如下:
- 使用
Labelme对图像进行矩形框标注; - 将 Labelme 生成的
.json标注文件转换为 YOLO 格式; - 使用 YOLOv8 进行目标检测模型训练;
- 训练完成后得到
.pt模型; - 根据部署需要,将
.pt模型导出为.onnx; - 最终在客户现场的检测软件中调用模型完成推理。
这套流程在我们自己的开发电脑上已经跑通。但是现在进入交付阶段,客户提出了一个很现实的问题:客户的训练机器无法联网。
客户机器的大致配置如下:
| 项目 | 配置 |
|---|---|
| 操作系统 | Windows 10 64位 |
| 显卡 | NVIDIA GeForce RTX 3050 |
| 任务 | 离线安装深度学习训练环境 |
| 主要软件 | Python、PyTorch、Ultralytics、Labelme |
| 主要用途 | 标注数据、训练 YOLOv8 模型、导出 ONNX 模型 |
由于目标机器不能联网,我们不能直接在客户机器上执行:
pip install torch ultralytics labelme
而是需要在一台可以联网的电脑上,提前下载好所有安装包、驱动、Python 安装程序以及 Python 依赖库的 .whl 文件,然后将这些文件拷贝到客户机器上进行离线安装。
本文就记录这一整套过程,目标是形成一份可以反复复用的工业现场离线部署教程。
二、整体思路
离线安装深度学习环境,最容易出问题的地方不在于某一条命令,而在于“依赖不完整”。
比如只下载了 ultralytics,但没有下载它依赖的 opencv-python、numpy、matplotlib、pyyaml 等库;或者只下载了 torch,但下载成了 CPU 版本,导致客户机器上的 RTX 3050 无法使用 GPU 训练。
因此,推荐采用下面的“两台机器协同”方式:
联网机器:
1. 下载 NVIDIA 显卡驱动
2. 下载 Python 安装包
3. 创建临时 Python 环境
4. 在线安装 torch、ultralytics、labelme 等库
5. 导出 requirements_frozen.txt
6. 根据 requirements_frozen.txt 下载全部 whl 文件
7. 整理成一个离线安装包
客户离线机器:
1. 安装 NVIDIA 显卡驱动
2. 安装 Python
3. 创建虚拟环境
4. 从本地 wheelhouse 离线安装所有 Python 包
5. 验证 torch 是否能识别 RTX 3050
6. 验证 ultralytics、labelme 是否能正常使用
7. 开始数据转换、模型训练和 ONNX 导出
三、准备阶段:确认 Python、PyTorch 与 CUDA 版本
3.1 为什么推荐 Python 3.13?
Windows下做深度学习训练,不建议盲目追新。Python 版本过新,可能导致某些库还没有对应的 Windows wheel;Python 版本过旧,又可能导致新版本的 ultralytics 不再支持。
综合兼容性考虑,推荐使用:
Python 3.13.x 64位
例如:
python-3.13.7-amd64.exe
注意,一定要下载 64 位版本。文件名里通常会带有:
amd64
不要下载 32 位版本,否则很多深度学习库无法正常安装。
3.2 PyTorch 的 CUDA 版本怎么选?
客户机器是 RTX 3050,属于 NVIDIA RTX 系列显卡,可以用于 CUDA 加速训练。
这里需要特别说明一个容易混淆的问题:
安装 PyTorch GPU 版本,并不一定需要单独安装完整的 CUDA Toolkit。
对于大多数普通训练场景,只要安装好 NVIDIA 显卡驱动,然后安装带 CUDA 支持的 PyTorch wheel 即可。PyTorch 的 CUDA wheel 已经包含运行所需的 CUDA 运行时组件。
四、在联网机器上制作离线安装包
下面操作都在一台可以联网的 Windows 电脑上完成。建议这台电脑的 Python 版本、系统位数尽量与客户机器保持一致。
4.1 下载 Python 安装包
到 Python 官网下载 Windows 64 位安装程序,例如:
python-3.13.7-amd64.exe
4.2 下载 NVIDIA 显卡驱动
到 NVIDIA 官网下载适用于:
GeForce RTX 3050
Windows 10 64-bit
的正式版驱动程序。
4.3 创建在线下载用的虚拟环境
打开 PowerShell 或 CMD,执行:
cd /d D:\offline_yolo_env
python -m venv .venv_download
.\.venv_download\Scripts\activate
python -m pip install --upgrade pip setuptools wheel
说明:
.venv_download是联网机器上的临时环境;- 它的作用是先在线安装一遍完整环境;
- 环境安装成功后,再导出完整依赖清单。
4.4 在线安装 PyTorch GPU 版本
以 CUDA 13.0 wheel 为例:
pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu130
安装完成后,先验证一下:
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
如果联网机器没有 NVIDIA 显卡,torch.cuda.is_available() 可能返回 False,这不一定代表安装包有问题。关键是看 torch.__version__ 中是否带有类似:
+cu130
例如:
2.12.0+cu130
这说明安装的是 CUDA 版本的 PyTorch。
4.5 在线安装 Ultralytics、Labelme 等库
继续安装项目所需库:
pip install ultralytics labelme labelme2yolo onnx onnxruntime opencv-python pillow matplotlib pandas pyyaml tqdm
4.6 导出完整依赖版本
在线安装成功后,导出当前环境的完整依赖清单:
pip freeze > D:\offline_yolo_env\requirements_frozen.txt
这个文件非常重要。它记录的是“已经在线安装并验证成功”的所有库版本。
4.7 下载所有 whl 文件
执行下面命令,把 requirements_frozen.txt 中的所有依赖下载到 wheelhouse 目录:
pip download ^
-r D:\offline_yolo_env\requirements_frozen.txt ^
-d D:\offline_yolo_env\wheelhouse ^
-i https://pypi.tuna.tsinghua.edu.cn/simple ^
--extra-index-url https://download.pytorch.org/whl/cu130
参数说明:
-r requirements_frozen.txt
表示按照完整依赖清单下载。
-d wheelhouse
表示把下载好的 .whl 文件保存到 wheelhouse 目录。
-i https://pypi.tuna.tsinghua.edu.cn/simple
表示使用国内镜像源下载普通 Python 包。
--extra-index-url https://download.pytorch.org/whl/cu130
表示额外使用 PyTorch 官方 CUDA 13.0 wheel 源下载 torch 相关包。
下载完成后,检查:
dir D:\offline_yolo_env\wheelhouse
正常情况下,里面应该有大量 .whl 文件。
五、编写离线安装脚本
为了方便客户现场安装,我们编写一个批处理脚本:
D:\offline_yolo_env\scripts\install_offline.bat
内容如下:
@echo off
REM ============================================================
REM Windows 离线安装 YOLOv8 深度学习环境脚本
REM 适用场景:
REM 1. 客户机器不能联网
REM 2. 已提前准备好 Python 安装包、NVIDIA 驱动、wheelhouse
REM 3. 当前脚本放在 offline_yolo_env\scripts 目录下
REM ============================================================
REM 获取当前脚本所在目录
set "SCRIPT_DIR=%~dp0"
REM offline_yolo_env 根目录 = scripts 的上一级目录
for %%I in ("%SCRIPT_DIR%..") do set "ROOT_DIR=%%~fI"
echo.
echo ============================================================
echo 离线环境根目录:
echo %ROOT_DIR%
echo ============================================================
echo.
REM 进入根目录
cd /d "%ROOT_DIR%"
REM 创建 Python 虚拟环境
REM 注意:这里要求系统已经安装好 Python,并且 python 命令可用
echo [1/4] 正在创建虚拟环境 .venv ...
python -m venv .venv
REM 激活虚拟环境
echo [2/4] 正在激活虚拟环境 ...
call "%ROOT_DIR%\.venv\Scripts\activate.bat"
REM 使用本地 wheelhouse 升级 pip、setuptools、wheel
echo [3/4] 正在离线安装基础构建工具 ...
python -m pip install --no-index --find-links="%ROOT_DIR%\wheelhouse" --upgrade pip setuptools wheel
REM 根据 requirements_frozen.txt 离线安装全部依赖
echo [4/4] 正在离线安装项目依赖 ...
python -m pip install --no-index --find-links="%ROOT_DIR%\wheelhouse" -r "%ROOT_DIR%\requirements_frozen.txt"
echo.
echo ============================================================
echo 离线安装完成,开始验证环境
echo ============================================================
echo.
python "%ROOT_DIR%\scripts\verify_env.py"
echo.
pause
六、编写环境验证脚本
创建:
D:\offline_yolo_env\scripts\verify_env.py
内容如下:
"""
verify_env.py
功能:
验证离线安装后的深度学习环境是否可用。
检查内容:
1. Python 是否可用
2. torch 是否安装成功
3. CUDA 是否可用
4. 当前 GPU 名称
5. ultralytics 是否安装成功
"""
import sys
def main():
print("=" * 60)
print("Python 环境信息")
print("=" * 60)
print("Python 可执行文件:", sys.executable)
print("Python 版本:", sys.version)
print("\n" + "=" * 60)
print("PyTorch / CUDA 检查")
print("=" * 60)
try:
import torch
print("torch 版本:", torch.__version__)
print("CUDA 是否可用:", torch.cuda.is_available())
if torch.cuda.is_available():
print("CUDA 版本:", torch.version.cuda)
print("GPU 数量:", torch.cuda.device_count())
print("当前 GPU:", torch.cuda.get_device_name(0))
else:
print("警告:torch.cuda.is_available() 返回 False")
print("请检查:")
print("1. 是否安装了 NVIDIA 显卡驱动")
print("2. 是否安装了 GPU 版本 torch")
print("3. torch 版本中是否包含 +cuXXX")
print("4. 是否误装了 CPU 版本 torch")
except Exception as e:
print("torch 导入失败:", repr(e))
print("\n" + "=" * 60)
print("Ultralytics 检查")
print("=" * 60)
try:
import ultralytics
print("ultralytics 版本:", ultralytics.__version__)
print("ultralytics 导入成功")
except Exception as e:
print("ultralytics 导入失败:", repr(e))
print("\n" + "=" * 60)
print("\n环境验证结束。")
if __name__ == "__main__":
main()
七、在客户离线机器上安装环境
将整个目录:
D:\offline_yolo_env
拷贝到客户机器上。
建议仍然放到:
D:\offline_yolo_env
尽量避免放在中文路径、空格很多的路径或者层级特别深的路径中。
7.1 安装 NVIDIA 显卡驱动
进入:
D:\offline_yolo_env\installers\
双击运行:
NVIDIA-GeForce-Driver-Win10.exe
安装完成后重启电脑。
重启后打开 CMD,执行:
nvidia-smi
如果能看到 RTX 3050 以及驱动版本,说明显卡驱动安装成功。
如果提示:
'nvidia-smi' 不是内部或外部命令
可以尝试进入下面目录执行:
cd /d "C:\Program Files\NVIDIA Corporation\NVSMI"
nvidia-smi
7.2 安装 Python
进入:
D:\offline_yolo_env\installers\
双击运行:
python-3.13.7-amd64.exe
安装时一定要勾选:
Add python.exe to PATH
然后点击:
Install Now
安装完成后打开新的 CMD,执行:
python --version
pip --version
如果能正常显示版本号,说明 Python 安装成功。
7.3 执行离线安装脚本
进入:
D:\offline_yolo_env\scripts\
双击运行:
install_offline.bat
或者在 CMD 中执行:
cd /d D:\offline_yolo_env\scripts
install_offline.bat
安装完成后,会自动执行 verify_env.py。
重点关注下面几行:
torch 版本: 2.x.x+cu126
CUDA 是否可用: True
当前 GPU: NVIDIA GeForce RTX 3050
ultralytics 导入成功
如果以上信息都正常,说明离线深度学习环境安装成功。
通过这套流程,我们可以在客户无法联网的情况下,仍然完整搭建深度学习训练环境,并支持后续模型迭代。这对于工业质检项目的现场交付非常实用。
更多推荐
所有评论(0)