我正在尝试使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)。
1条答案
按热度按时间4nkexdtk1#
PyTorch在their getting started page上发布了其Python包的仅CPU版本的安装过程。看起来他们只是在不同的python包索引上发布它。
假设您使用的是Linux x64,下载将是使用pip安装软件包的命令。链接页面上还有其他几个选项。