【DeepLearning】【环境配置】Ubuntu 安装管理多版本 CUDA

本文介绍如何在 Ubuntu 下安装管理多版本 CUDA .

1. 安装 CUDA 和 CuDNN

cuda-toolkit-archive

cudnn-archive

1.1 CUDA 9.0 + CuDNN 7.6.5

CUDA Toolkit 9.0
cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
cuda-repo-ubuntu1604-9-0-local-cublas-performance-update_1.0-1_amd64.deb
cuda-repo-ubuntu1604-9-0-local-cublas-performance-update-2_1.0-1_amd64.deb
cuda-repo-ubuntu1604-9-0-local-cublas-performance-update-3_1.0-1_amd64.deb
cuda-repo-ubuntu1604-9-0-176-local-patch-4_1.0-1_amd64.deb

Base Installer

sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-9-0 -y

Patch 1

sudo dpkg -i cuda-repo-ubuntu1604-9-0-local-cublas-performance-update_1.0-1_amd64.deb

Patch 2

sudo dpkg -i cuda-repo-ubuntu1604-9-0-local-cublas-performance-update-2_1.0-1_amd64.deb

Patch 3

sudo dpkg -i cuda-repo-ubuntu1604-9-0-local-cublas-performance-update-3_1.0-1_amd64.deb

Patch 3

sudo dpkg -i cuda-repo-ubuntu1604-9-0-176-local-patch-4_1.0-1_amd64.deb

/usr/local/cuda-9.0

登录 nvidia.com,下载 cudnn-9.0-linux-x64-v7.6.5.32.tgz,并解压.

tar -xzvf cudnn-9.0-linux-x64-v7.6.5.32.tgz

将下列文件复制到 CUDA Toolkit 目录,并修改权限

sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

1.2 CUDA 9.2 + CuDNN 7.6.5

CUDA Toolkit 9.2
cuda-repo-ubuntu1604-9-2-148-local-patch-1_1.0-1_amd64.deb
cuda-repo-ubuntu1604-9-2-local_9.2.148-1_amd64.deb

Base Installer

sudo dpkg -i cuda-repo-ubuntu1604-9-2-local_9.2.148-1_amd64.deb
sudo apt-key add /var/cuda-repo-9-2-local/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-9-2 -y

Patch 1

sudo dpkg -i cuda-repo-ubuntu1604-9-2-148-local-patch-1_1.0-1_amd64.deb

登录 nvidia.com,下载 cudnn-9.2-linux-x64-v7.6.5.32.tgz ,并解压.

tar -xzvf cudnn-9.2-linux-x64-v7.6.5.32.tgz

将下列文件复制到 CUDA Toolkit 目录,并修改权限

sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

1.3 CUDA 10.0 + CuDNN 7.6.5

CUDA Toolkit 10.0
cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
cuda-repo-ubuntu1604-10-0-local-nvjpeg-update-1_1.0-1_amd64.deb

Base Installer

sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-10-0 -y

Patch 1

sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-nvjpeg-update-1_1.0-1_amd64.deb

登录 nvidia.com,下载 cudnn-10.0-linux-x64-v7.6.5.32.tgz,并解压.

tar -xzvf cudnn-10.0-linux-x64-v7.6.5.32.tgz

将下列文件复制到 CUDA Toolkit 目录,并修改权限

sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

1.4 CUDA 10.1 + CuDNN 8.0.5

CUDA Toolkit 10.1 update2

Base Installer

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-ubuntu1604.pin
sudo mv cuda-ubuntu1604.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-ubuntu1604-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-1-local-10.1.243-418.87.00/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-10-1 -y

登录 nvidia.com,下载 cudnn-10.1-linux-x64-v8.0.5.39.tgz,并解压.

tar -xzvf cudnn-10.1-linux-x64-v8.0.5.39.tgz

将下列文件复制到 CUDA Toolkit 目录,并修改权限

sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

2. 使用 switch-cuda 脚本管理 CUDA 版本

2.1 脚本说明

switch-cuda 是牛津博士小哥 Patrick Hohenecker 写的 Shell 脚本,用于管理安装的 CUDA 版本.

git clone https://github.com/phohenecker/switch-cuda.git

我对原始代码做了小的修改, switch-cuda.sh 如下:

#!/usr/bin/env bash

set -e

# ensure that the script has been sourced rather than just executed
if [[ "${BASH_SOURCE[0]}" = "${0}" ]]; then
    echo "Please use 'source' to execute switch-cuda.sh!"
    exit 1
fi

INSTALL_FOLDER="/usr/local"  # the location to look for CUDA installations at
TARGET_VERSION=${1}          # the target CUDA version to switch to (if provided)

# if no version to switch to has been provided, then just print all available CUDA installations
if [[ -z ${TARGET_VERSION} ]]; then
    echo "The following CUDA installations have been found (in '${INSTALL_FOLDER}'):"
    ls "${INSTALL_FOLDER}" | egrep -o "cuda-[0-9]+\\.[0-9]+$" | while read -r line; do
        echo "* ${line}"
    done
    set +e
    return
# otherwise, check whether there is an installation of the requested CUDA version
elif [[ ! -d "${INSTALL_FOLDER}/cuda-${TARGET_VERSION}" ]]; then
    echo "No installation of CUDA ${TARGET_VERSION} has been found!"
    set +e
    return
fi

# the path of the installation to use
cuda_path="${INSTALL_FOLDER}/cuda-${TARGET_VERSION}"

# filter out those CUDA entries from the PATH that are not needed anymore
path_elements=(${PATH//:/ })
new_path="${cuda_path}/bin"
for p in "${path_elements[@]}"; do
    if [[ ! ${p} =~ ^${INSTALL_FOLDER}/cuda ]]; then
        new_path="${new_path}:${p}"
    fi
done

# filter out those CUDA entries from the LD_LIBRARY_PATH that are not needed anymore
ld_path_elements=(${LD_LIBRARY_PATH//:/ })
new_ld_path="${cuda_path}/lib64:${cuda_path}/extras/CUPTI/lib64"
for p in "${ld_path_elements[@]}"; do
    if [[ ! ${p} =~ ^${INSTALL_FOLDER}/cuda ]]; then
        new_ld_path="${new_ld_path}:${p}"
    fi
done

# update environment variables
export CUDA_HOME="${cuda_path}"
export CUDA_ROOT="${cuda_path}"
export LD_LIBRARY_PATH="${new_ld_path}"
export PATH="${new_path}"

echo "Switched to CUDA ${TARGET_VERSION}."

set +e
return

脚本原理很简单:

  1. 检测 /usr/local 目录下的 CUDA 安装目录;
  2. 设置 PATHLD_LIBRARY_PATHCUDA_ROOTCUDA_HOME 4 个环境变量控制 CUDA 版本.

由于 switch-cuda.sh 中使用了 return 语法,只能通过 source 命令使用. 计划使用函数代替,将 switch-cuda 作为命令使用.

2.2 使用说明

查看安装的 CUDA 版本:

source switch-cuda.sh 
$ source switch-cuda.sh 
The following CUDA installations have been found (in '/usr/local'):
* cuda-10.0
* cuda-10.1
* cuda-9.0
* cuda-9.2

选择 CUDA 版本:

source switch-cuda.sh <version>

选择使用 CUDA 10.1:

$ source switch-cuda.sh 10.1
Switched to CUDA 10.1.

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

选择使用 CUDA 10.0:

$ source switch-cuda.sh 9.0
Switched to CUDA 9.0.

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值