经营性网站备案信息查询沈阳百度推广优化
操作系统:ubuntu22.04 LTS
python版本:3.12.7
最近学习了用poetry配置python虚拟环境,当为不同的项目配置cuda时,会遇到不同的项目使用的cuda版本不一致的情况。
像torch 这样的库,它们会对cuda-toolkit有依赖,通过python来使用cuda,它们会依赖像
nvidia-cuda-runtime-cu12
nvidia-cublas-cu12
这样的python库,这种情况下,在pyproject.toml里写上
[tool.poetry.group.full]
optional = true
[tool.poetry.group.full.dependencies]
torch = {path = "./torch-2.2.1+cu121-cp312-cp312-linux_x86_64.whl"}
或者
torch = "2.2.1"
这样的依赖就行了,poetry会自动下载依赖的cuda-toolkit的python库
这时候,通过poetry show torch --tree可以查看到依赖关系:
user@user-Ubuntu2204:~/projects/cuda-test$ poetry show torch --tree
torch 2.2.1+cu121 Tensors and Dynamic neural networks in Python with strong GPU acceleration
├── filelock *
├── fsspec *
├── jinja2 *
│ └── markupsafe >=2.0
├── networkx *
├── nvidia-cublas-cu12 12.1.3.1
├── nvidia-cuda-cupti-cu12 12.1.105
├── nvidia-cuda-nvrtc-cu12 12.1.105
├── nvidia-cuda-runtime-cu12 12.1.105
├── nvidia-cudnn-cu12 8.9.2.26
│ └── nvidia-cublas-cu12 *
├── nvidia-cufft-cu12 11.0.2.54
├── nvidia-curand-cu12 10.3.2.106
├── nvidia-cusolver-cu12 11.4.5.107
│ ├── nvidia-cublas-cu12 *
│ ├── nvidia-cusparse-cu12 *
│ │ └── nvidia-nvjitlink-cu12 *
│ └── nvidia-nvjitlink-cu12 * (circular dependency aborted here)
├── nvidia-cusparse-cu12 12.1.0.106
│ └── nvidia-nvjitlink-cu12 *
├── nvidia-nccl-cu12 2.19.3
├── nvidia-nvtx-cu12 12.1.105
├── sympy *
│ └── mpmath >=1.1.0,<1.4
└── typing-extensions >=4.8.0
有的基于gpu的库不通过python来使用cuda,这时候就要给操作系统安装对应的cuda版本才行。这时候,从poetry show 查看依赖关系是看不到它对nvidia的cuda-toolkit的依赖的:
user@user-Ubuntu2204:~/projects/cuda-test$ poetry show paddlepaddle-gpu --tree
paddlepaddle-gpu 2.6.2.post120 Parallel Distributed Deep Learning
├── astor *
├── decorator *
├── httpx *
│ ├── anyio *
│ │ ├── idna >=2.8
│ │ └── sniffio >=1.1
│ ├── certifi *
│ ├── httpcore ==1.*
│ │ ├── certifi * (circular dependency aborted here)
│ │ └── h11 >=0.13,<0.15
│ ├── idna * (circular dependency aborted here)
│ └── sniffio * (circular dependency aborted here)
├── numpy >=1.13
├── opt-einsum 3.3.0
│ └── numpy >=1.7
├── pillow *
├── protobuf >=3.20.2
└── protobuf >=3.1.0,<=3.20.2
另外,像torch这样通过python来使用cuda,可以给nvidia的cuda-toolkit库指定路径:
[tool.poetry.dependencies]
python = "^3.12"
setuptools = "70.0.0"nvidia-cublas-cu12={ path = "./nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl" }
nvidia-cuda-cupti-cu12={ path = "./nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl" }