二、CUDA、Pytorch与依赖的工具包

发布于:2025-07-30 ⋅ 阅读:(25) ⋅ 点赞:(0)

CUDA = Compute Unified Device Architecture(统一计算架构)。专门用于 GPU 通用计算 的平台 + 编程接口。CUDA可以使你的程序(比如矩阵、神经网络)由 GPU 执行,这比CPU能快几十甚至上百倍。

PyTorch 是一个深度学习框架,可以用 Python 来:构建神经网络、加载模型和数据、启动训练和推理、支持 CPU 和 GPU,但Pytorch本身默认使用的CPU,想要Pytorch使用GPU,得安装好 CUDA 运行库(pytorch-cuda),即匹配CUDA兼容的pytorcha版本,这样PyTorch 才能找得到 GPU。

比喻角色 对应概念
PyTorch 是“程序员” 写神经网络代码、安排计算
CUDA 是“翻译官” 把这些代码翻译成显卡能理解的操作指令
GPU 是“工人” 真正去跑那些深度学习计算任务(卷积、矩阵乘等)

当前开发环境描述:Windows 11专业版,Python版本 3.10.11,已安装Anaconda(版本  25.5.1)

CUDA的版本可以用命令行来查看(这里的CUDA 是 12.6):

(ollama_baseline_env) D:\PythonWorkspace\ollama_baseline>nvidia-smi
Sun Jul 27 21:35:04 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.94                 Driver Version: 560.94         CUDA Version: 12.6     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4060 Ti   WDDM  |   00000000:01:00.0  On |                  N/A |
|  0%   37C    P8              7W /  165W |     934MiB /  16380MiB |     10%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

注:若 nvidia-smi 命令未能正确显示显卡信息,则可能是未安装显卡驱动、驱动版本老旧、驱动未正确加载等情况。

由于第一次按照教程操作的时候不知道PyTorch默认用的CPU,因此进行了一次再安装的过程,以下是再安装的步骤描述(也可用于初次安装Pytorch的对照)

重新检查并强制安装 GPU 版 PyTorch

请严格按以下命令重新走一遍: 

1. 激活你的虚拟环境

(假设环境名是 agent_gpu

conda activate agent_gpu

2. 显式卸载可能错误的版本

conda remove pytorch torchvision torchaudio pytorch-cuda -y

3. 再安装 GPU 版 PyTorch + CUDA 11.8

conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

这里装的CUDA版本是 11.8,比本机的12.6的版本低,但可以被12.6向下兼容。

安装成功的话,命令行的最后会显示如下信息:

Preparing transaction: done
Verifying transaction: done
Executing transaction: done

如果出现如下信息,那就是安装中断了(网络不好,镜像源的负载过大等),可再次执行安装命令(conda安装命令会自动略过已安装的工具包,从中断的位置继续安装),当然,也可以从第二步开始。

('Connection broken: IncompleteRead(73906517 bytes read, 76228566 more expected)', IncompleteRead(73906517 bytes read, )

4. 再次运行验证代码

import torch
print("PyTorch:", torch.__version__)
print("CUDA version in PyTorch:", torch.version.cuda)
print("Is CUDA available?", torch.cuda.is_available())
if torch.cuda.is_available():
    print("GPU:", torch.cuda.get_device_name(0))

✅ 预期输出应是:

PyTorch: 2.3.0
CUDA version in PyTorch: 11.8
Is CUDA available? True
GPU: NVIDIA GeForce RTX 4060

其他工具包的版本选择

开发、部署 AI 项目或 Agent 系统时,工具包的版本选择确实是一个影响系统稳定性的核心因素。

影响 安装工具包版本(如 transformers、peft、torch、accelerate) 的主要因素如下:

序号 因素类型 说明
1️⃣ Python 版本 是最根本的兼容限制,决定能否安装某些工具包
2️⃣ CUDA 版本(+ 显卡驱动) 决定 PyTorch、bitsandbytes 是否能 GPU 加速
3️⃣ 操作系统(Windows / Linux / macOS) 某些工具包仅支持特定系统(如 bitsandbytes)
4️⃣ PyTorch 版本 是大模型训练的核心底座,很多包(如 transformers)要配合使用
5️⃣ 目标模型支持要求 你想用的模型是否支持当前版本的 transformers / peft
6️⃣ 项目代码的依赖版本 某些开源项目中 requirements.txt 指定了必须版本
7️⃣ 虚拟环境内已有包的版本冲突 pip 会尝试“兼容”已安装的包,可能导致回退或不装新版
8️⃣ 你执行的安装命令是否指定版本 比如:pip install transformers==4.33 会锁定特定版本
9️⃣ PyPI 上可用版本与发布时间 某些版本已经从 PyPI 下架,或有 bug 的版本被替换
🔟 代理环境(如清华镜像)或公司镜像 某些版本在镜像站同步延迟或不可用

如何选择正确的版本组合?下面是推荐的选择顺序:

顺序 决定方式 示例
1️⃣ 先确认 Python 版本(建议 3.10) python --version
2️⃣ 根据你显卡驱动和 CUDA 安装适配 PyTorch torch==2.2.0+cu121
3️⃣ 选择与 torch 兼容的 transformers 查看 transformers release notes
4️⃣ 再根据 transformers 选择兼容的 peft / accelerate pip install transformers==4.41.2 peft==0.10.0 accelerate==0.29.2
5️⃣ 查看项目中是否指定 requirements.txtsetup.py pip install -r requirements.txt

版本冲突问题

本次实验课的执行过程遇到了几个工具包的版本冲突问题,这里将有冲突的几个工具包按照依赖关系的层级进行整理

Python 3.10
├── PyTorch 2.1–2.5 + CUDA 11.8
│   ├── transformers ≥4.39
│   │   ├── AutoTokenizer / AutoModelForCausalLM (支持 Qwen2)
│   │   └── Trainer + TrainingArguments
│   ├── accelerate ≥0.27 (建议 0.29.2)
│   ├── peft ≥0.10.0
│   │   ├── LoRA / QLoRA 微调支持
│   │   └── 调用 transformers API
│   ├── bitsandbytes 0.41.1 (Windows 专用 .whl)
│   │   └── 支持 GPU 精度量化(4bit/8bit)
│   └── huggingface_hub ≥0.29.2(非 egg)

经过多次调试,最终形成的版本组合如下:

Python             3.10.11
PyTorch            2.5.1
CUDA               11.8
transformers       4.39.3
accelerate         0.29.2
peft               0.10.0
bitsandbytes       0.46.1 (Windows whl)
huggingface_hub    0.29.2 (non-egg)

使用到的升级命令(供参考)

pip install --upgrade transformers==4.39.3 peft==0.10.0 accelerate==0.29.2
pip uninstall bitsandbytes -y
pip install bitsandbytes‑0.41.1‑py3‑none‑win_amd64.whl
pip uninstall huggingface_hub -y
pip install huggingface_hub==0.29.2 --no-binary huggingface_hub

说明:

  • 做实验阶段,建议每个项目都配一个专用的虚拟环境,依赖冲突的问题与解决可限制在虚拟环境内,避免依赖影响全局运行。
  • transformers、accelerate、peft、bitsandbytes 之间的版本必须统一匹配,老版本或混搭容易引发兼容性问题
  • 本次安装的CUDA是12.6版本,与 CUDA 工具包 11.8 完全兼容(向下兼容)。

Windows与Linux的工具包冲突

在 Windows 系统中误用 Linux 编译的包 是很多 Python 工具包报错的常见根源。以下建议可以帮助减少与规避此类问题

✅ 一、优先使用 .whl(Windows Wheel)包安装

bitsandbytesfaiss原生支持 Linux 的库,Windows 环境通常不支持默认的 pip install,解决办法:

✔ 正确做法:
  • 到 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 或 bitsandbytes · PyPI
    下载 .whl 文件,如:

    bitsandbytes‑0.41.1‑py3‑none‑win_amd64.whl

  • 然后手动安装:

    pip install 路径/文件名.whl

    ❌ 部分工具包的安装,如 pip install bitsandbytes 默认拉取 Linux 版,会引发错误

✅ 二、安装前检查平台支持

在安装前先确认该工具包是否支持 Windows:

  • 查阅官方 GitHub 或 PyPI 页面(如 transformers、peft 等会写明支持平台)。

  • pip install 时加上 --only-binary 限制使用预编译包:

    pip install peft --only-binary=:all:

    避免默认从源码构建(源代码构建一般偏向 Linux 环境)。

✅ 三、创建隔离环境(强烈推荐)

使用 Anaconda 或 venv 创建干净的虚拟环境:

conda create -n ollama_env python=3.10
conda activate ollama_env

这样不会污染全局环境,也方便管理不同系统包的兼容性。

✅ 四、查依赖树与平台兼容

使用如下命令查看依赖包的来源与平台信息:

pip show bitsandbytes
pip list --format=columns

还可以用:

pipdeptree

来查看依赖冲突。

✅ 五、根据错误信息来判断

一些报错会有明显提示如:

.so: ELF format error ← Linux动态库被加载到Windows
No module named ‘bitsandbytes.cuda_setup’ ← 缺少 Windows 编译部分

出现 .soELFlibcuda.so 字样,就说明它拉的是 Linux 版。


网站公告

今日签到

点亮在社区的每一天
去签到