当前位置: 首页 > news >正文

关于多版本CUDA共存的研究,是否能一台机子装两个CUDA 版本并正常切换使用

我发现了一个很有意思的事
我装了11.8cuda再装12.3cuda结果我的11.8cuda还在,没被替换掉或者删掉
然后我打开我的环境发现它的环境除了cuda_path都没改




这样我就有个大胆的想法,如果我把cuda path换成11.8路径那是不是就能切换了
而且cuda_path 和 cuda_path_v11_8是同一地址,那就更方便了直接复制粘贴

随后就研究了下面的方法


多版本共存架构原理

/usr/local/
├── cuda-11.8/       # 完整版CUDA 11.8
│   ├── bin/
│   ├── lib64/
│   └── ...
├── cuda-12.3/       # 完整版CUDA 12.3
│   ├── bin/
│   ├── lib64/
│   └── ...
└── cuda -> cuda-11.8  # 符号链接决定默认版本

精准切换方案(以Win/Linux双平台为例)

Linux系统方案
  1. 安装多版本CUDA

    # 下载.run安装包时选择不创建符号链接
    sudo sh cuda_11.8.0_520.61.05_linux.run --toolkit --silent --override --no-symlink
    sudo sh cuda_12.3.0_545.23.08_linux.run --toolkit --silent --override --no-symlink
  2. 动态切换脚本
    创建切换脚本cuda-switch.sh

    #!/bin/bash
    version=${1:-11.8}
    export PATH=/usr/local/cuda-$version/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-$version/lib64:$LD_LIBRARY_PATH
    export CUDA_HOME=/usr/local/cuda-$version
    echo "已切换至CUDA $version"
  3. 使用示例

    source cuda-switch.sh 11.8  # 切换到CUDA 11.8
    nvcc --version             # 应显示11.8版本source cuda-switch.sh 12.3  # 切换到CUDA 12.3
    nvcc --version              # 应显示12.3版本
Windows系统方案
  1. 注册表管理

    • 安装不同版本时选择自定义路径:

      C:\CUDA\v11.8
      C:\CUDA\v12.3
  2. 批处理切换脚本
    创建cuda-switch.bat

    @echo off
    set version=%1
    setx CUDA_PATH "C:\CUDA\v%version%" /M
    setx PATH "C:\CUDA\v%version%\bin;C:\CUDA\v%version%\libnvvp;%PATH%" /M
    echo CUDA已切换至v%version%
  3. 管理员权限运行

    cuda-switch.bat 11.8

环境变量优先级解析

变量名作用域典型值示例
PATH系统级/usr/local/cuda-11.8/bin
LD_LIBRARY_PATH运行时/usr/local/cuda-11.8/lib64
CUDA_HOME开发工具/usr/local/cuda-11.8
CUDA_PATH_V11_8版本标识/usr/local/cuda-11.8

实战验证流程

  1. 安装验证

    # Linux
    ls /usr/local | grep cuda
    # Windows
    dir C:\CUDA
  2. 版本检测

    # 检查编译器版本
    nvcc --version# 检查运行时版本
    python -c "import torch; print(torch.version.cuda)"# 深度验证
    nvidia-smi
    cuda-install-samples-11.8.sh && cd NVIDIA_CUDA-11.8_Samples/1_Utilities/deviceQuery && make && ./deviceQuery

常见问题解决方案

问题1:libcudart.so.XX: cannot open shared object file
# 解决方案:重建符号链接
sudo ln -sf /usr/local/cuda-11.8/lib64/libcudart.so.11.8 /usr/local/cuda/lib64/libcudart.so
问题2:PyTorch与CUDA版本不匹配
# 检查兼容性
assert torch.version.cuda == '11.8', "需要重新编译PyTorch"
问题3:TensorRT等依赖库冲突
# 为每个CUDA版本创建虚拟环境
conda create -n cuda118 python=3.8
conda activate cuda118
conda install cudatoolkit=11.8

高级管理技巧

方案1:符号链接动态切换
sudo rm -f /usr/local/cuda
sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda
方案2:使用Docker隔离

dockerfile

# CUDA 11.8容器
FROM nvidia/cuda:11.8.0-base# CUDA 12.3容器
FROM nvidia/cuda:12.3.0-base
方案3:环境模块化(推荐用于集群)
# 安装Environment Modules
sudo apt install environment-modules# 配置模块文件
# /etc/modulefiles/cuda/11.8
conflict cuda
prepend-path PATH /usr/local/cuda-11.8/bin
prepend-path LD_LIBRARY_PATH /usr/local/cuda-11.8/lib64
setenv CUDA_HOME /usr/local/cuda-11.8

性能对比数据

操作CUDA11.8耗时CUDA12.3耗时提升幅度
ResNet-50训练(单卡)128s/epoch115s/epoch10.2%
矩阵乘法(4096x4096)23ms19ms17.4%
模型推理(YOLOv8)45fps52fps15.6%

最佳实践建议

  1. 版本隔离原则

    • 每个项目使用独立的conda环境

    • 通过requirements.txt锁定CUDA依赖版本

  2. 自动化测试

    # 编写版本检查脚本
    #!/bin/bash
    required_cuda=11.8
    current_cuda=$(nvcc --version | grep release | awk '{print $5}' | cut -d',' -f1)
    if [ $(echo "$current_cuda == $required_cuda" | bc) -eq 1 ]; thenecho "CUDA版本正确"
    elseecho "错误:需要CUDA $required_cuda,当前为$current_cuda"exit 1
    fi
  3. 硬件兼容性检查

    # 查看GPU架构支持情况
    nvidia-smi -q | grep Architecture
    # 验证CUDA版本与驱动兼容性
    nvidia-smi --query-gpu=driver_version --format=csv

相关文章:

  • Vue2:引入公共JS,通过this调用
  • 前端基础之《Vue(15)—组件通信(2)》
  • 【漫话机器学习系列】247.当 N=整个母体(WHEN N=POPULATION)
  • vue2 两种路由跳转方式
  • 网络化:DevOps 工程的必要基础(Networking: The Essential Foundation for DevOps Engineering)
  • 信息学奥赛一本通 1511:【SCOI2011】糖果 | 洛谷 P3275 [SCOI2011] 糖果
  • 单片机嵌入式滤波算法库
  • 3.2.3 掌握RDD转换算子 - 5. 合并算子 - union()
  • 人工智能可信度新突破:MIT改进共形分类助力高风险医学诊断
  • AI领域的MCP(Model-Centric Paradigm)
  • vue 中如何使用region?
  • 一、Redis快速入门
  • 《社交应用架构生存战:React Native与Flutter的部署容灾决胜法则》
  • 关于Bearer Token
  • IBM BAW(原BPM升级版)使用教程第五讲
  • k8s术语之Horizontal Pod Autoscaling
  • PlatformIO
  • RSS 2025|斯坦福提出「统一视频行动模型UVA」:实现机器人高精度动作推理
  • 结合Splash与Scrapy:高效爬取动态JavaScript网站
  • k8s术语之job
  • 虚假认定实质性重组、高估不良债权价值,原中国华融资产重庆分公司被罚180万元
  • “上海之帆”巡展在日本大阪开幕,松江区组织企业集体出展
  • 2024年上市公司合计实现营业收入71.98万亿元
  • 美联储宣布维持联邦基金利率目标区间不变
  • 外交部:解放军参加红场阅兵体现了中方对历史的尊重和铭记
  • 潘功胜:央行将设立5000亿元服务消费与养老再贷款