【一次性解决】CUDA和PyTorch的安装与多版本管理的三种方式

很多人配置环境就是直接安装三件套,而对于版本管理不是很清楚。在开发初期,这样做没什么问题。但是如果服务器多人使用,或者复现代码多(pytorch版本和cuda版本是互相依赖的),就需要更进一步的版本管理方法。这里将详细介绍用于深度学习或者CPP开发的CUDA版本管理方式。

在配置环境前,首先需要明确自己的需求。一般来说,CUDA将会被用于:

  • PyTorch的GPU版本
  • CUDA的C++开发
  • CUDA的Python开发

对于使用Python进行的开发,推荐在linux上使用DockerWindows上使用anaconda。对于C++开发,只使用方法一手动管理版本即可,无须安装anaconda和docker。请注意,以下的方法选择其一即可,混着用容易把自己搞乱了。

下面是目录,按需要跳转:

目录

      • 基础知识
      • GPU运算的环境配置流程
      • 检查驱动安装
  • 方法一:使用`系统环境变量`管理多版本CUDA
      • 环境检查脚本
    • 安装
      • windows本地安装
      • Linux本地安装
    • 多版本管理
      • Windows
      • Linux
  • 方法二:使用`Docker`
    • linux上安装NVIDIA Container Toolkit docker
      • Ubuntu 16.04/18.04, Debian Jessie/Stretch/Buster:
      • CentOS 7 (docker-ce), RHEL 7.4/7.5 (docker-ce), Amazon Linux 1/2:
    • 切换版本
  • 方法三:使用`anaconda`
    • 安装
    • 切换版本

基础知识

CUDA是基于驱动运行的,所以安装驱动必不可少。这一步非常简单,在linux和windows上都比较好做。这里暂时跳过。

我们使用什么版本cuda的,取决于要使用的PyTorch版本。在配置环境前,首先需要明确自己的需求。

pip的版本管理很混乱,在每次使用的过程中都要小心,哪些包的版本被修改了。因此建议对于版本跨度大的包,使用conda等虚拟环境隔离。

GPU运算的环境配置流程

  1. 安装NVIDIA驱动
  2. 安装Docker(可选)
  3. 安装anaconda
  4. 配置CUDA、cuDNN
  5. 安装pytorch

检查驱动安装

注意,这里的CUDA版本是假的,默认显示一个数值。还是需要继续安装~

nvidia-smi

输出方框就说明正常

方法一:使用系统环境变量管理多版本CUDA

方法相对来说最简单,直观。就是更改cuda对应的系统环境变量,使得其指向不同的版。

优点:

  • 节省空间,不需要创建太多的conda环境
  • 安装方便,网络问题导致无法conda安装时,除了可以离线安装,还可以手动管理

缺点:

  • 切换环境需要修改系统环境变量 ,在多人使用的服务器上容易造成版本混乱。
  • 复现代码时候每次都要查看文档,手动下载,配置环境变量,复制cudnn,成本高

环境检查脚本

很多仓库在安装时候会指定cuda-tookit,导致环境

安装

windows本地安装

  1. CUDA版本选择:
    • 打开NVIDIA控制面板,选择系统信息,查看支持的CUDA版本。
  2. CUDA toolkit下载:
    • 访问NVIDIA开发者网站的CUDA Toolkit下载页面。
    • 根据自己的操作系统和CUDA版本选择合适的下载链接。
    • 下载并运行.exe文件,按照安装向导进行安装。
    • 设置临时解压目录和安装目录,建议使用默认设置。
    • 安装完成后,配置CUDA的环境变量。
  3. cuDNN下载和配置:
    • 访问NVIDIA开发者网站的cuDNN下载页面。
    • 注册一个账号并登录,然后选择适配自己CUDA版本的cuDNN版本进行下载。
    • 解压下载的压缩包,得到三个文件夹。
    • 将这三个文件夹的内容复制到CUDA的安装目录中。
    • 添加CUDA安装目录到系统环境变量的path中。
  4. 验证安装是否成功:
    • 打开命令提示符,输入nvcc --version命令,查看CUDA版本号。
    • 输入set cuda命令,查看CUDA设置的环境变量。

Linux本地安装

  1. 下载cuda:

    • 首先确定需要下载的版本,wget下载。

    • 赋予权限,安装

      wget https://developer.download.nvidia.com/compute/cuda/自己的版本
      sudo sh cuda_xxx.run
      
  2. 配置环境

    • 添加环境变量
    sudo vi ~/.bashrc
    export PATH=/usr/local/cuda-11.6/bin${PATH:+:${PATH}}
    export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
    export CUDA_HOME=/usr/local/cuda-11.6
    
    • 更新环境变量并检查
    source ~/.bashrc
    sudo ldconfignvcc -V
    

多版本管理

Windows

在windows中,在控制面板中找到编辑系统环境变量选项。

  1. 系统环境变量栏,找到PathCUDA 。确定将要使用的CUDA版本,可以在系统环境变量栏其他的CUDA*中找到当前安装了哪些版本的cuda。
  2. CUDA的地址换成目标版本的CUDA 安装地址
  3. Path中把目标版本的CUDA地址放在最上面,这样nvidia-smi指令就能找到当前实际使用的cuda版本。否则,其显示将会是默认的最新版,或者以前的版本。
  4. 重新启动(不必要)

Linux

在Linux中,基本原理一样,就是更改系统环境变量,使得cuda的指向改变。

  1. 打开终端,vi编辑~/.bashrc文件,到文件末尾修改下面的地址
export PATH="/usr/local/cuda-11.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME=/usr/local/cuda-11.0
  1. 更新环境变量并检查
source ~/.bashrc
sudo ldconfig
# 检查安装
nvcc -V

方法二:使用Docker

这种方法的学习成本比较高,但是对于频繁切换电脑、切换系统;需要在多台无人车、板卡配置生产环境等高移动需求的人来说,是最好的方法。打包解包速度快得很。

这里简单介绍使用方法,详细请查看我的文章:Docker配置深度学习环境。

请注意:在Windows系统中不推荐使用docker(CUDA for WSL2驱动问题多,效率低,不如直接linux)

linux上安装NVIDIA Container Toolkit docker

Ubuntu 16.04/18.04, Debian Jessie/Stretch/Buster:

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl

CentOS 7 (docker-ce), RHEL 7.4/7.5 (docker-ce), Amazon Linux 1/2:

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
$ sudo yum install -y nvidia-container-toolkit
$ sudo systemctl restart docker

激活环境 :

$ docker run --gpus all <镜像名称>

无须测试安装,不会出错的。

切换版本

run不同版本对应的镜像即可。

方法三:使用anaconda

很多人对于anaconda的印象停留在python的包管理上,但其实它可以用于很多其他版本的管理中。比如cuda+cudnn的版本管理,就可以依靠环境完成隔离。

安装

对于anaconda,linux和windows是一样的。

  1. 首先,新建虚拟环境并进入:

    conda activate 环境名
    

    如果有其他环境(甚至其他计算机的,拷贝过来也可以),包很全,可以使用

    conda create -n 新环境名 --clone 已有环境名
    
  2. 搜索所有可用包的信息

    conda search cudatoolkit --info
    
  3. 执行安装

    1. 网络好,直接安装。
    conda install cudatoolkit==版本号
    

    b. 网络差,下载卡住,离线安装。

    conda search cudatoolkit --info
    # 找到下载地址
    wget 下载地址
    conda install --use-local 下载好的地址
    
  4. 安装cudnn

    1. cudnn的版本和cuda版本对应,如果省事儿,网络好,可以一起安装

      conda install cudatoolkit==版本号 cudnn
      
    2. 在线、本地安装(同上)

  5. 检查安装成功与否

    需要注意,conda环境下的nvcc地址和需要自己手动export,在对应虚拟环境下面。因此可以安装nvcc工具:

    conda install -c nvidia cuda-nvcc
    # 或者特定版本的nvcc,安装的版本应与你的cuda版本兼容
    conda install -c "nvidia/label/cuda-x.x.x" cuda-nvcc
    

    验证安装:

    nvcc -V
    

切换版本

直接使用conda,切换到对应版本的虚拟环境即可。建议自己写个文档,记录哪个虚拟环境都是什么版本的python和torch、cuda、cudnn。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue进阶:Vue中的ajax请求

一、Vue中的ajax请求 1.1 解决开发环境 Ajax 跨域问题 总结&#xff1a; 1.1.1 模拟跨域问题 准备好测试的服务器 server1.js const express require(express) const app express()app.use((request,response,next)>{console.log(有人请求服务器1了);// console.log(…

P4769 [NOI2018] 冒泡排序 洛谷黑题题解附源码

[NOI2018] 冒泡排序 题目背景 请注意&#xff0c;题目中存在 n 0 n0 n0 的数据。 题目描述 最近&#xff0c;小 S 对冒泡排序产生了浓厚的兴趣。为了问题简单&#xff0c;小 S 只研究对 1 1 1 到 n n n 的排列的冒泡排序。 下面是对冒泡排序的算法描述。 输入&#x…

韦东山嵌入式Liunx入门笔记一

文章目录 一、嵌入式Linux二、Ubuntu系统2-1 安装软件2-2 Linux文件(1) 文件架构(2)文件属性(3)文件命令(4) 解压、压缩文件(5) 网络命令 2-3 vi编辑器2-4 Ubuntu下包管理 三、配置网卡四、安装后续学习使用的软件4-1 MobaXterm4-2 FileZilla4-3 Source Insight4.04-4 下载BSP4…

Open CASCADE学习|圆柱螺旋线绘制原理探究

1、圆柱螺旋线绘制原理 在OCC中&#xff0c;圆柱面的参数方程为&#xff1a; 设P为&#xff08;x0,y0,z0&#xff09;,则 xx0r*cos(u) yy0r*sin(u) zz0v 但u、v之间有关系时&#xff0c;此方程表达为圆柱螺旋线&#xff0c;u、v之间为线性关系时是等螺距螺旋线&#xff0…

文件上传之秒传功能

秒传是一种文件的传输机制&#xff0c;用于在文件已经存在于目标服务器上时&#xff0c;通过校验文件的唯一标识&#xff0c;实现快速而无需从新上传整个文件&#xff0c;它解决了重复上传相同文件的问题&#xff0c;提高了文件传输的效率和节省了带宽资源。 技术阐述&#xff…

免 费 小程序商城搭建之鸿鹄云商 SAAS云产品概述

【SAAS云平台】打造全行业全渠道全场景的SaaS产品&#xff0c;为店铺经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营…

软件测试面试八股文(2024新版)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发…

【unity实战】实现蓄力丢手榴弹、烟雾弹、燃烧弹的效果

文章目录 爆炸燃烧烟雾效果资产手榴弹丢手雷烟雾弹、燃烧弹实现手雷每次撞墙弹发出音效&#xff08;补充&#xff09;完结 爆炸燃烧烟雾效果资产 https://assetstore.unity.com/packages/vfx/particles/war-fx-5669 手榴弹 手榴弹配置好刚体&#xff0c;碰撞体 新增脚本Th…

IO流-处理流之——对象流(序列化)

IO流-处理流之——对象流&#xff08;序列化&#xff09; 1.数据流及其作用&#xff08;了解&#xff09;2.对象流及其作用3.对象的序列化机制是什么4.如下两个过程使用的流&#xff1a;5.自定义类要想实现序列化机制&#xff0c;需满足&#xff1a;6.注意点&#xff1a; 1.数据…

Qlik Sense : Store With Retry (保存重试机制)

Background sometime you cannot store the file directly ,maybe there are another process are reading/storeing the file , so you would need to wait another proecess done and retry . then we come up this solution . 有时您不能直接存储文件&#xff0c;可能还有…

Jenkins CLI 任意文件读取漏洞复现(CVE-2024-23897)

0x01 产品简介 Jenkins 是一个开源的自动化服务器软件,用于构建、测试和部署软件项目。它提供了一种强大的方式来自动化软件开发和交付流程,以提高开发团队的效率和生产力。 0x02 漏洞概述 漏洞成因 命令行接口文件读取: Jenkins内置的命令行接口(CLI)存在一个特性,允…

实验:eNSP AR通过telnet远程登录另外一台AR

实验2&#xff1a;eNSP AR通过telnet远程登录另外一台AR 基于实验1的基础上来进行&#xff0c;我们通过AR2220登录AR3260 首先设置远程登录密码 1、user-interface vty 0 4 进入用户的虚拟终端 2、设置密码 set authentication password cipher Huawei 这里的意思就是设置密…

org.springframework.util.StringUtils 下StringUtils工具类

目录 1.isEmpty 1.1.可以判断字符串是否为空或 null 1.2.可以判断Integer类型的数据是否为空 1.isEmpty 1.1.可以判断字符串是否为空或 null Testpublic void test() {/*** StringUtils.isEmpty 判断是空*/String username "123456";System.out.println(Strin…

数据结构(C语言版)代码实现(四)——静态单链表的部分代码实现

目录 参考材料、格式 头文件SLinkList.h 库、宏定义、函数类型声明 线性表的静态单链表存储结构 按值查找 初始化静态链表 分配空间 回收空间 打印已用链表中的元素 求集合(A-B)U(B-A)中的元素&#xff08;重点介绍&#xff09; 调试过程 修改报错与警告 调试 完整…

找不到msvcp110.dll怎么办,msvcp110.dll丢失修复方法分享

当计算机系统中无法找到msvcp110.dll这个特定的动态链接库文件时&#xff0c;可能会引发一系列运行问题和功能受限的情况。msvcp110.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows的应用程序来说&#xff0c;它是至关重要的运行组件…

vue模拟聊天页面列表:滚动到底部,滚动到顶部触发加载更多

先看下效果&#xff1a; 代码&#xff1a; <template><div><div style"text-align: center"><button click"scrollTop">滚动到顶部</button><button click"scrollBottom">滚动到底部</button></d…

Vue深入学习2—虚拟DOM和Diff算法

1、snabbdom 是什么&#xff1f; snabbdom是“速度"的意思&#xff0c;源码只有200行&#xff0c;使用TS写的&#xff0c;让东西变得模块化 2、snabbdom 的 h 函数如何工作&#xff1f; h函数用于产生虚拟节点&#xff0c;同时也可以嵌套使用&#xff0c;得到虚拟DOM树&am…

kuberneters可视化界面-kuboard

一、kuboard安装 可以选用&#xff0c;docker和docker-commpose kuberneters 安装 kuboard官网 1、 docker安装 sudo docker run -d \--restartunless-stopped \--namekuboard \-p 80:80/tcp \-p 10081:10081/tcp \-e KUBOARD_ENDPOINT"http://192.168.1.10:80" …

linux的kali安装,换源,更新包

下载kali kali.org进入官网后点第二个 然后点第一个 解压kali 下载后获得.7z压缩包&#xff0c;建议移动到合适自己电脑的位置进行解压&#xff0c;我喜欢放在D盘 启动kali 双击进入解压出的文件夹&#xff0c;将唯一一个.vmx文件用vmware打开&#xff08;没装的自行提前装…

数据结构奇妙旅程之二叉树题型解法总结

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …