在Ubuntu20上安装CUDA+cuDNN+Miniconda环境

基本介绍

什么是CUDA

CUDA(Compute Unified Device Architecture)是由NVIDIA开发的并行计算平台和编程模型。它允许开发者使用NVIDIA的GPU进行通用目的的并行计算。CUDA提供了一套编程接口和工具,使开发者能够利用GPU的并行计算能力来加速各种类型的计算任务。

CUDA的主要组成部分包括:

  1. CUDA编程语言扩展:CUDA提供了一种扩展C/C++语言的方式,使开发者能够在代码中使用CUDA的并行计算功能。通过在代码中插入CUDA的特定语法和指令,开发者可以编写并行计算任务,并将其在GPU上执行。
  2. CUDA运行时库:CUDA运行时库是一组函数和工具,用于管理GPU设备、内存分配、并行计算任务的启动和同步等操作。开发者可以使用CUDA运行时库来管理GPU资源,并在程序中调用相关函数来执行并行计算任务。
  3. CUDA工具包:CUDA工具包提供了一系列工具,用于开发、调试和优化CUDA程序。其中包括编译器、调试器、性能分析器等工具,帮助开发者更好地理解和优化他们的CUDA代码。

CUDA的设计目标是提供一种高性能、灵活和易用的并行计算平台,使开发者能够充分利用GPU的并行计算能力。它已经成为广泛应用于科学计算、机器学习、深度学习等领域的重要工具和技术。

什么是cuDNN

cuDNN(CUDA Deep Neural Network library)是NVIDIA开发的针对深度神经网络的加速库。它是基于CUDA平台的深度学习加速库,旨在提供高性能的深度神经网络计算,加速深度学习模型的训练和推理过程。

cuDNN提供了一系列优化算法和函数,用于执行深度神经网络中的常见操作,如卷积、池化、归一化等。这些算法和函数经过高度优化,针对NVIDIA GPU的架构进行了深度优化,以提供最佳的性能和效率。

使用cuDNN库,开发者可以在深度学习框架(如TensorFlow、PyTorch等)的基础上,利用GPU的并行计算能力加速深度神经网络的训练和推理过程。cuDNN库提供了简单易用的API接口,使开发者能够方便地集成和使用它的功能。

cuDNN广泛应用于深度学习领域,特别是在训练和推理大规模深度神经网络时,它可以显著提高计算性能,加快模型的训练速度和推理速度。同时,cuDNN还支持多种数据类型和精度,包括浮点数和半精度浮点数,以满足不同应用场景的需求。

什么是Anaconda

Anaconda是一个开源的Python和R编程语言的发行版本,旨在简化软件包管理和环境管理。它提供了一个集成的开发环境,包括Python解释器、常用的科学计算库、数据分析工具和其他相关软件包。

Anaconda的主要特点和功能包括:

  1. 软件包管理:Anaconda提供了一个强大的包管理系统,可以方便地安装、更新和删除各种Python和R软件包。它拥有一个广泛的软件包仓库(Anaconda Repository),其中包含了大量常用的科学计算和数据分析工具。
  2. 环境管理:Anaconda允许用户创建和管理多个独立的Python环境。每个环境可以拥有不同的软件包版本和依赖关系,使用户能够轻松地切换和管理不同项目或应用程序的开发环境。
  3. 集成开发环境:Anaconda附带了一个名为Anaconda Navigator的图形用户界面(GUI),用于管理和启动各种工具和应用程序,如Jupyter Notebook、Spyder等。这些工具提供了丰富的功能,支持交互式编程、数据可视化、调试和实验等。
  4. 跨平台支持:Anaconda可在多个操作系统上运行,包括Windows、macOS和Linux。这使得开发者能够在不同的平台上保持一致的开发环境和代码执行结果。

除了以上功能,Anaconda还提供了一些其他工具和服务,如Anaconda Cloud(用于共享和发布软件包)、Anaconda Enterprise(用于团队和企业级的开发和部署)等。

总的来说,Anaconda是一个功能强大的数据科学平台,提供了丰富的工具和库,使得数据科学家、研究人员和开发者能够更轻松地进行Python和R编程、数据分析和机器学习等任务。

CUDA与cuDNN的区别

CUDA(Compute Unified Device Architecture)和cuDNN(CUDA Deep Neural Network library)是两个相关但不同的概念。

CUDA是由NVIDIA提供的并行计算平台和编程模型,它允许开发者使用标准的C/C++编程语言在NVIDIA GPU上进行并行计算。CUDA提供了一组编程接口和工具,使开发者能够利用GPU的并行计算能力加速各种计算任务,包括深度学习模型的训练和推理。

cuDNN是NVIDIA开发的深度神经网络加速库,专门针对深度学习模型的计算进行了优化。cuDNN建立在CUDA的基础上,提供了一系列高度优化的算法和函数,用于执行深度神经网络中的常见操作,如卷积、池化、归一化等。cuDNN的目标是通过利用GPU的并行计算能力,提供高性能和效率,加速深度学习模型的训练和推理过程。

因此,cuDNN是一个建立在CUDA之上的库,它利用CUDA提供的并行计算能力来加速深度学习计算。在使用深度学习框架(如TensorFlow、PyTorch等)进行开发时,通常会同时使用CUDA和cuDNN。CUDA提供了底层的GPU计算能力,cuDNN则提供了针对深度学习模型的高度优化计算操作。这样的组合可以提供更高的性能和效率,加速深度学习任务的执行。

安装Cuda

前置

  • 在Ubuntu20上安装Nvidia最新的显卡驱动,具体怎么安装驱动,这里跳过;(因为我使用的是WSL下的Linux,驱动只要宿主机安装了即可)
  • 在命令行执行nvidia-smi,出现以下内容说明你的驱动安装成功,记住右上角的CUDA Version;(以下以我的电脑为例,这里是12.2)
Sun Aug 20 22:23:30 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.54.04 Driver Version: 536.23 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 2050 On | 00000000:01:00.0 Off | N/A |
| N/A 42C P8 3W / 60W | 12MiB / 4096MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 22 G /Xwayland N/A |
+---------------------------------------------------------------------------------------+

下载cuda

  • 进入Cuda官网下载地址,根据你的nvidia-smi下CUDA Version选择Cuda版本,注意:不是选一模一样的,选最接近,且小于的;比如我的电脑CUDA Version是12.2的,那么我选择12.1的;
# 比如我的下载地址是
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
  • 安装相关依赖包
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
  • 安装Cuda
sudo sh cuda_12.1.0_530.30.02_linux.run

# 1. 在第一个弹出的界面输入accept回车
# 2. 在第二个界面上下键按enter选择你要安装的部分,取消driver部分,一定要选择cuda toolkit部分
# 3. 移动到最下方install回车安装
  • 安装完成后配置环境变量
# 打开.bashrc,光标指到下方
vim ~/.bashrc

# 填入以下内容
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64

# 保存退出,刷新.bashrc
source ~/.bashrc

# 执行nvcc -V,出现版本信息,说明cuda安装成功

安装cuDNN

下载cudnn

  • 进入cudnn下载地址,第一次进入需要注册一个账号才能下载;
  • 选择与cuda版本对应的(这里与cuda版本对应是指cuda驱动版本,比如上文中的12.1)
  • 比如我的是选择这个:Local Installer for Linux x86_64 (Tar),注意选择Linux版本的压缩包
  • 解压文件
# 解压文件
sudo tar -xvf cudnn-linux-x86_64-8.9.1.23_cuda12-archive.tar.xz

#进入文件目录
cd cudnn-linux-x86_64-8.9.1.23_cuda12-archive

# 执行以下命令,将文件拷贝到cuda目录
cp include/* /usr/local/cuda/include

cp lib/* /usr/local/cuda/lib64 或者 cp lib64/* /usr/local/cuda/lib64
  • 验证安装cudnn安装是否成功
# 输入以下命令
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

# 出现以下内容说明安装成功

#define CUDNN_MAJOR 8
#define CUDNN_MINOR 9
#define CUDNN_PATCHLEVEL 1
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

/* cannot use constexpr here since this is a C-only file */

安装Miniconda3

下载miniconda

安装

# 运行(注意不要加sudo)
bash Miniconda3-py310_23.5.1-0-Linux-x86_64.sh

# 按照提示选择同意许可,中途几次回车
# 安装完成后
# 设置环境变量
vim ~/.bashrc

# 在末尾添加
export PATH=$PATH:/你的miniconda安装路径/bin
# 保存后输入
source ~/.bashrc

conda init bash

更改conda镜像源


# 更改安装镜像源,在.condarc下添加以下内容
# 以添加清华镜像源为例
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/

# 保存退出,执行
conda init bash

conda常见命令


# 查看conda配置信息
conda info

# 查看当前环境列表 * 表示当前激活的环境
conda env list

# 激活环境
conda activate --name myenvname

# 查看当前环境下包列表
conda list

# 创建环境
conda create --name myenvname

# 创建指定python版本的环境
conda create -n myenvname python=x.x.x

# 删除环境
conda env remove --name myenvname

# 删除环境后清理缓存
conda clean --all

# 安装新版本指定包
conda install package_name

# 安装指定版本包
conda install package_name=x.x

# 更新包
conda update packate_name

# 卸载包
conda remove package_name

# 导出环境
conda env export > environment.yml

# 导入环境
conda env create -f environment.yml

# 克隆环境
conda create --name newnev --clone oldenv
  • 首先用conda创建python10的环境(为什么用pyhton10,因为stable-diffusion-webui官方推荐)
conda create -n sd_webui python=3.10.6
  • 进入Pytorch官网选择合适的pytorch版本,根据自己cuda版本选择
  • 使用nvidia-smi命令查看自己gpu的cuda版本,右上角CUDA Version便是cuda版本,选择比这个低的
  • 安装pytorch
# 我的话是选择这个版本的
conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 pytorch-cuda=11.7 -c pytorch -c nvidia

下载stable-diffusion-webui

  • 使用git拉取项目
# 网络慢的自己想办法了(一般这个开github的代理)
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

运行安装

  • 克隆环境
# 为什么要克隆环境呢,是怕要是安装出问题了,pytorch不用重新安装
# 上面我们已经创建了一个sd_webui的pytorch环境,我们将sd_webui克隆一个为pytorch基础环境
conda create -n pytorch --clone sd_webui

# 查看环境列表
conda env list
  • 下载模型(这一步推荐先做)
# 1. 进入这个网站下载一个模型:https://civitai.com/models
# 2. 将模型放到stable-diffusion-webui/models/Stable-diffusion目录下
# 3. 模型可以按你的习惯进行重命名,好区分
  • 进入stable-diffusion-webui根目录
# 执行,下载依赖(指定阿里云镜像源下载,要不然容易下载失败)
pip install -r requirements.txt ---index-url=https://mirrors.aliyun.com/pypi/simple/

# 如果下载过程中有的依赖出错了,就用pip install 包名 手动下载(或者更换其它镜像源下载)
  • 在stable-diffusion-webui下执行
# 克隆一份(防止改坏)
cp webui.sh my-webui.sh

# 编辑my-webui.sh
# 将第一行的变量改为1
use_venv=0
# 在首行添加以下内容
export COMMANDLINE_ARGS="--listen --enable-insecure-extension-access"

# 保存退出
# 开启代理,执行my-weiui.sh (第一次运行要开代理,一定要开启代理,非常重要)(至于代理怎么开,可以自己先去学习下如何开启,配置clash)
# 运行日志中出现网页访问地址说明运行成功了

界面汉化

常见问题

  • Cannot locate TCMalloc (improves CPU memory usage)
# 执行以下命令
sudo apt-get install libgoogle-perftools4 libtcmalloc-minimal4 -y