• 【深度学习】GPU使用教程


    深度学习相关的代码大多数要使用 NVIDIA 显卡进行训练和预测,以提高训练速度和质量。Linux 服务器中如何管理 NVIDIA GPU 卡是一个必备的技能。下面介绍一下 GPU 使用的说明,帮助大家学会迅速使用NVIDIA显卡以及多卡的使用。

    1. 创建虚拟环境

    一般服务器的使用者较多,每个使用者所需要的环境不相同。如果大家都是用系统环境,很容易造成冲突,导致他人的代码不能正常运行或者导致系统内部的软件环境错误。所以,使用服务器首先需要创建自己的虚拟环境。

    常用的软件有很多,例如Docker,Conda, pyenv和virtualenv

    1.1 Conda

    如果需要的包要求不同版本的Python,你无需切换到不同的环境,因为conda同样是一个环境管理器。仅需要几条命令,你可以创建一个完全独立的环境来运行不同的Python版本,同时继续在你常规的环境中使用你常用的Python版本。conda使用起来方便快捷,同时如果服务器的资源也比较充足,非常适合使用conda。

    下载并安装Anaconda

    请参考:安装配置Anaconda

    Conda使用cuda

    conda install cudatoolkit
    
    # 如果指定版本
    #conda install cudatoolkit=8.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    根据自己的需要安装更高的版本。

    Conda创建自己的环境

    conda create -n <your_env_name>
    
    • 1

    是自定义环境名。

    Conda激活环境

    conda activate <your_env_name>
    
    • 1

    Conda常用命令

    # 帮助命令
    conda -h
    conda help
    
    # 配置频道(已有)
    conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/main/
    
    # 退出当前环境
    conda deactivate
    
    # 查看基本信息
    conda info
    conda info -h
    
    # 查看当前存在环境
    conda env list
    conda info --envs
    
    # 删除环境
    conda remove -n yourname --all
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    2. NVIDIA多卡管理

    在使用TensorFlow或者PyTorch等框架跑深度学习的时候,经常出现显存不足的情况,所以我们希望能够随时查看GPU时使用率。如果你是Nvidia的GPU,那么在命令行下,只需要一行命令就可以实现。

    nvidia-smi
    nvidia-smi -L
    
    • 1
    • 2

    参数解释:

    • Fan:显示风扇转速,数值在0到100%之间,是计算机的期望转速,如果计算机不是通过风扇冷却或者风扇坏了,显示出来就是N/A;
    • Temp:显卡内部的温度,单位是摄氏度;
    • Perf:表征性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能;
    • Pwr:能耗表示;
    • Bus-Id:涉及GPU总线的相关信息;
    • Disp.A:是Display Active的意思,表示GPU的显示是否初始化;
    • Memory Usage:显存的使用率;
    • Volatile GPU-Util:浮动的GPU利用率;
    • Compute M:计算模式。

    如果有多张NVIDIA卡,使用时可以任意选择使用哪个卡进行训练。选择特定的GPU运行程序可在程序运行命令前使用:CUDA_VISIBLE_DEVICES=0命令。0为服务器中的GPU编号,可以为0, 1, 2, 3等,表明对程序可见的GPU编号。

    CUDA_VISIBLE_DEVICES=1     # 只有编号为1的GPU对程序是可见的,在代码中gpu[0]指的就是这块GPU。
    CUDA_VISIBLE_DEVICES=0,2,3 # 只有编号为0,2,3的GPU对程序是可见的,在代码中gpu[0]指的是第0块,gpu[1]指的是第2块,gpu[2]指的是第3块。
    CUDA_VISIBLE_DEVICES=2,0,3 # 只有编号为0,2,3的GPU对程序是可见的,但是在代码中gpu[0]指的是第2块,gpu[1]指的是第0块,gpu[2]指的是第3块。
    
    • 1
    • 2
    • 3

    设置CUDA_VISIBLE_DEVICES的方法:

    1. 通过bash脚本设置CUDA_VISIBLE_DEVICES:

      export CUDA_VISIBLE_DEVICES=0,1,2,3`
      
      • 1
    2. 通过os.environ来设置CUDA_VISIBLE_DEVICES:

      import torch
      import os
      os.environ['CUDA_VISIBLE_DEVICES']='0,1,2'
      print(torch.cuda.device_count())
      
      • 1
      • 2
      • 3
      • 4

    3. 安装Nvidia驱动/CUDA Toolkit

    最好在安装完操作系统之后,直接使用CUDA Toolkit安装统一安装驱动和CUDA Toolkit。

    到Nvidia官网下载CUDA Toolkit,根据需要Toolkit的版本,下载安装文件。例如对于CUDA Toolkit 11.6,下载地址为:https://developer.nvidia.com/cuda-11-6-0-download-archive

    • 选择操作系统(Linux),CPU架构(x86_64),操作系统(Ubuntu),操作系统版本(20.04),安装类型(runfile,localfile);

    • 下载文件

      # 下载并使用 axel并行下载工具
      sudo apt install axel
      
      axel -n 5  https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run
      
      • 1
      • 2
      • 3
      • 4
    • 查看已有的nvidia驱动

      dpkg -l | grep -i nvidia
      
      • 1
    • 卸载驱动

      sudo apt-get purge nvidia-driver-xxx
      
      • 1
    • 搜索并安装的驱动

      apt-cache search nvidia | grep 460
      sudo apt-get install nvidia-driver-460
      
      • 1
      • 2

    4. Docker构建容器

    使用Docker,用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突——而且通常不会需要消耗更多的硬件资源,不会明显降低性能。

    如果程序基本调试成功,可以使用Docker来将程序打包。

    docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
    
    # or
    nvidia-docker run --rm nvidia/cuda nvidia-smi
    
    • 1
    • 2
    • 3
    • 4

    目前已经安装的Docker镜像有:

    • nvidia/cuda
    • pytorch/pytorch

    5. pyenv+virtualenv轻量化管理python环境

    除了docker和conda两个之外,对于一些简单的或者设备算力不高的情况,可以选择pyenv+virtualenv的组合,轻量化管理python环境。毕竟一个anaconda的安装包轻松就上十几个G,安装后的占用的资源也很多。

    pyenv 是一个开源的 Python 版本管理工具,可以轻松地给系统安装任意 Python 版本,想玩哪个版本,瞬间就可以切换。有了 pyenv,我们不需要再为系统多版本 Python 共存问题而发愁,也不用为手动编译安装其他 Python 版本而浪费时间,只需要执行一条简单的命令就可以切换并使用任何其他版本,该工具真正地做到了开箱即用,简单实用。

    virtualenv 是一个用来创建完全隔离的 Python 虚拟环境的工具,可以为每个项目工程创建一套独立的 Python 环境,从而可以解决不同工程对 Python 包,或者版本的依赖问题。假如有 A 和 B 两个工程,A 工程代码要跑起来需要 requests 1.18.4,而 B 工程跑起来需要 requests 2.18.4,这样在一个系统中就无法满足两个工程同时运行问题了。最好的解决办法是用 virtualenv 给每个工程创建一个完全隔离的 Python 虚拟环境,给每个虚拟环境安装相应版本的包,让程序使用对应的虚拟环境运行即可。这样既不影响系统 Python 环境,也能保证任何版本的 Python 程序可以在同一系统中运行。

    最佳实践:使用 pyenv 安装任何版本的 Python,然后用 virtualenv 创建虚拟环境时指定需要的 Python 版本路径。简单来说,pyenv控制Python版本,virtualenv控制同Python版本下不同环境的使用。

    5.1 pyenv 的安装及使用

    安装:

    # 将 pyenv 安装到 ~/.pyenv 目录(当然你可以安装到任意其他路径)
    git clone https://github.com/yyuu/pyenv.git ~/.pyenv
    
    # 配置环境变量(zsh和bash,分别添加到~/.zshrc和 ~/.bashrc中)
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc 
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
    
    #添加 pyenv 初始化
    echo 'eval "$(pyenv init -)"' >> ~/.zshrc
    
    #使当前 Shell 配置生效,完成安装
    exec $SHELL
    source ~/.zshrc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    使用:

    # 查看有哪些 Python 版本可以安装
    pyenv install --list
    
    # 安装某个 Python 版本
    pyenv install -v 3.6.4
    
    # 查看当前 Python 版本情况(* 表示系统当前的 Python 版本,system表示系统初始版本)
    $ pyenv versions
      system
      2.6.7
    * 3.6.4 (set by /Users/haohao/.pyenv/version)
    
    # 切换 Python 版本(切换之后查看当前版本)	
    $ pyenv global 3.6.4
    $ pyenv versions
      system
    * 3.6.4 (set by /Users/haohao/.pyenv/version)
    $ python -V
    Python 3.6.4
    
    # 卸载某个 Python 版本
    pyenv uninstall 3.6.4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    5.2 virtualenv 的安装及使用

    通过Virtualenv是运行自己Python程序比较方便的方式:

    # 安装
    sudo pip install virtualenv
    
    # 显示已有的虚拟环境
    lsvirtualenv
    
    # 创建自己的虚拟环境 (最好指定成Python3,否则默认是Python2)
    mkvirtualenv -p /usr/bin/python3 your_env
    
    # 进入自己的虚拟环境
    workon your_env
    
    # 复制一个虚拟环境
    cpvirtualenv pytorch your_env
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    Android 导出arr与unity2019以上版本交互
    依赖下载失败时,可以考虑一下这个方法
    STM32CubeMx配置串口(HAL库开发)
    什么是Docker和Docker-Compose?
    可恶,又是个线上问题
    安卓手机连接电脑实用技巧:实现文件传输与共享
    聚星文社同款绘唐科技——小说推文一键AI生成工具
    小程序最新获取用户头像昵称
    循环优化方法如数家珍
    AI图书推荐:利用生成式AI实现业务流程超自动化
  • 原文地址:https://blog.csdn.net/LogosTR_/article/details/126442619