python 安装支持GPU的torch,但不下载3 GB重复的CUDA库?

j2datikz  于 10个月前  发布在  Python
关注(0)|答案(1)|浏览(191)

我正在尝试使DNN的CUDA容器不那么重。PyTorch与我的努力背道而驰,因为它似乎捆绑了自己的CUDA库的一个大子集的孤立副本。但是如果我们已经有了它们(可能是更新的),并且只想安装torch呢?
还有一个问题为什么PyTorch不能检测或接受与其声明的主版本和次版本相匹配的系统CUDA(例如为什么它必须下载自己的硬编码1.8.x,而您的系统有1.8.y并且y>x?毕竟,tensorflow可以接受CUDA构建中的微小差异,并避免这些重依赖项(以GB为单位)的不必要的重复。
对这个问题更具体的说明

  • (在相当新的GPU驱动程序下运行-支持最新的CUDA 12.2 -以及内部安装了CUDA 11.8.0的官方nvidia/cuda-11.8-cudnn8-devel-ubuntu22.04:latest容器)*:
!nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05             Driver Version: 535.104.05   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
[..]
!env | grep CU | sort
CUDA_VERSION=11.8.0
[..]
NV_CUDA_LIB_VERSION=11.8.0-1
[..]
NV_CUDNN_PACKAGE=libcudnn8=8.9.0.131-1+cuda11.8
NV_CUDNN_PACKAGE_DEV=libcudnn8-dev=8.9.0.131-1+cuda11.8
[..]
NV_LIBCUBLAS_DEV_VERSION=11.11.3.6-1
[..]
NV_LIBCUBLAS_VERSION=11.11.3.6-1
NV_LIBCUSPARSE_DEV_VERSION=11.7.5.86-1
NV_LIBCUSPARSE_VERSION=11.7.5.86-1

如果您只是直观地尝试安装pip install torch,它不会下载CUDA本身,但会下载其余的NVIDIA库:它自己的(旧版)cuDNN(0.5 GB)和(旧版)NCCL,以及各种cu11*软件包,包括CUDA运行时(适用于旧版CUDA - 11.7而不是11.8):

!pip install torch
Collecting torch
  Downloading torch-2.0.1-cp310-cp310-manylinux1_x86_64.whl (619.9 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 619.9/619.9 MB 5.3 MB/s eta 0:00:0000:0100:02
[..]
Collecting nvidia-cudnn-cu11==8.5.0.96
  Downloading nvidia_cudnn_cu11-8.5.0.96-2-py3-none-manylinux1_x86_64.whl (557.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 557.1/557.1 MB 5.1 MB/s eta 0:00:0000:0100:02
Collecting nvidia-cufft-cu11==10.9.0.58
  Downloading nvidia_cufft_cu11-10.9.0.58-py3-none-manylinux1_x86_64.whl (168.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 168.4/168.4 MB 8.7 MB/s eta 0:00:0000:0100:01
Collecting nvidia-cusolver-cu11==11.4.0.1
  Downloading nvidia_cusolver_cu11-11.4.0.1-2-py3-none-manylinux1_x86_64.whl (102.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 102.6/102.6 MB 9.7 MB/s eta 0:00:0000:0100:01
[..]
Collecting nvidia-cublas-cu11==11.10.3.66
  Downloading nvidia_cublas_cu11-11.10.3.66-py3-none-manylinux1_x86_64.whl (317.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 317.1/317.1 MB 7.2 MB/s eta 0:00:0000:0100:01
Collecting nvidia-curand-cu11==10.2.10.91
  Downloading nvidia_curand_cu11-10.2.10.91-py3-none-manylinux1_x86_64.whl (54.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 54.6/54.6 MB 10.2 MB/s eta 0:00:0000:0100:01
[..]
Collecting nvidia-nccl-cu11==2.14.3
  Downloading nvidia_nccl_cu11-2.14.3-py3-none-manylinux1_x86_64.whl (177.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 177.1/177.1 MB 8.7 MB/s eta 0:00:0000:0100:01
Collecting nvidia-cuda-cupti-cu11==11.7.101
  Downloading nvidia_cuda_cupti_cu11-11.7.101-py3-none-manylinux1_x86_64.whl (11.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.8/11.8 MB 11.4 MB/s eta 0:00:0000:0100:01
[..]
Collecting nvidia-nvtx-cu11==11.7.91
  Downloading nvidia_nvtx_cu11-11.7.91-py3-none-manylinux1_x86_64.whl (98 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.6/98.6 KB 10.7 MB/s eta 0:00:00
Collecting nvidia-cuda-runtime-cu11==11.7.99
  Downloading nvidia_cuda_runtime_cu11-11.7.99-py3-none-manylinux1_x86_64.whl (849 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 849.3/849.3 KB 11.0 MB/s eta 0:00:00a 0:00:01
[..]
Successfully installed cmake-3.27.5 filelock-3.12.4 lit-17.0.1 mpmath-1.3.0 networkx-3.1 nvidia-cublas-cu11-11.10.3.66 nvidia-cuda-cupti-cu11-11.7.101 nvidia-cuda-nvrtc-cu11-11.7.99 nvidia-cuda-runtime-cu11-11.7.99 nvidia-cudnn-cu11-8.5.0.96 nvidia-cufft-cu11-10.9.0.58 nvidia-curand-cu11-10.2.10.91 nvidia-cusolver-cu11-11.4.0.1 nvidia-cusparse-cu11-11.7.4.91 nvidia-nccl-cu11-2.14.3 nvidia-nvtx-cu11-11.7.91 sympy-1.12 torch-2.0.1 triton-2.0.0

但是如果您尝试为CUDA 11.8安装torch(指定--index-url https://download.pytorch.org/whl/cu118),则torch将使pip下载其自己的CUDA 11.8捆绑包(2.3 GB,几乎是torch wheel的4倍),甚至可能不会检查是否已经安装了一个(例如,可用)。对于tensorflow):

!pip install torch --index-url https://download.pytorch.org/whl/cu118
Looking in indexes: https://download.pytorch.org/whl/cu118
Collecting torch
  Downloading https://download.pytorch.org/whl/cu118/torch-2.0.1%2Bcu118-cp310-cp310-linux_x86_64.whl (2267.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3/2.3 GB 2.3 MB/s eta 0:00:00:00:0100:06
[..]
Installing collected packages: mpmath, lit, cmake, sympy, networkx, filelock, triton, torch
Successfully installed cmake-3.25.0 filelock-3.9.0 lit-15.0.7 mpmath-1.3.0 networkx-3.0 sympy-1.12 torch-2.0.1+cu118 triton-2.0.0

torch-2.0.1%2Bcu118-cp310-cp310-linux_x86_64.whl里面有什么?我们有一些3GB(未 Package )的好东西:cuDNN和几个名字中带有“cu”的动态库,包括最大的一个叫做libtorch_cuda.so的库,从它的名字和庞大的规模来看,它是PyTorch自己的CUDA发行版(或者只是一个子集?):

148K    libcudnn.so.8
680K    libcudart-d0da41ae.so.11.0
1.3M    libc10_cuda.so
72M     libcudnn_ops_train.so.8
91M     libcublas.so.11
94M     libcudnn_ops_infer.so.8
98M     libcudnn_cnn_train.so.8
116M    libcudnn_adv_train.so.8
125M    libcudnn_adv_infer.so.8
241M    libtorch_cuda_linalg.so
548M    libcublasLt.so.11
621M    libcudnn_cnn_infer.so.8
1.3G    libtorch_cuda.so

因此,如果我们只需要PyTorch,似乎我们不需要安装CUDA,因为它会下载自己的。除非我们让torch注意到预安装的CUDA和cuDNN,否则在其他场景中这些库的重复是不可避免的,因为我们将需要官方的NVIDIA版本用于剩余的DNN包,例如Tensorflow或Hugging Face transformers
注意:将--no-deps参数添加到pip install甚至会丢失所需的C++动态库(不仅仅是捆绑的CUDA)。

4nkexdtk

4nkexdtk1#

PyTorch在their getting started page上发布了其Python包的仅CPU版本的安装过程。看起来他们只是在不同的python包索引上发布它。
假设您使用的是Linux x64,下载将是使用pip安装软件包的命令。链接页面上还有其他几个选项。

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

相关问题