起标题真烦人

完整安装过程

    一、检查自己的电脑环境是否具备安装CUDA的条件
        1.验证自己的电脑是否有一个可以支持CUDA的GPU
        2.验证自己的Linux版本是否支持 CUDA(Ubuntu 16.04没问题)
        3.验证系统是否安装了gcc
        4.验证系统是否安装了kernel header和 package development
            4.1查看正在运行的系统内核版本:
    二、NVidia驱动
        0、一些认知
        1、卸载之前的驱动
        2、安装
        3、检查 NVIDIA Driver是否安装成功
        4、问题记录
            a.`"llvmpipe (LLVM 6.0, 256 bits)"`问题
            b.安装方式
    三、CUDA
        A、按照runfile版本安装。
            0.安装
            1.添加环境变量
            2.检查是否安装成功
                2.1终端输入
                2.2验证驱动版本
                2.3验证CUDA Toolkit
                2.4最后再检查一下系统和CUDA-Capable device的连接情况
                    终端输入 :
        √ B、deb形式安装
            1、安装
            2、测试
        C、CUDA卸载
    四、cuDNN
        1-1、Installing From A Tar File
        1-2、验证:
        √ 2-1、Installing From A Debian File
        2-2、Verifying The cuDNN Install On Linux


注:如果使用anaconda,貌似不需要手动安装CUDA和cuDNN,安装tensorflow/pytorch时会自动安装。文中出现的版本号,在安装时需要酌情更改。

    CUDA Toolkit 11.0 Update1 (Aug 2020), Versioned Online Documentation
    CUDA Toolkit 11.0 (May 2020), Versioned Online Documentation Download
    cuDNN v8.0.2 (July 24th, 2020), for CUDA 11.0
    版本太新,tar安装始终存在问题

    最后安装的版本是:
    CUDA Toolkit 10.2 (Nov 2019), Versioned Online Documentation
    Download cuDNN v7.6.5 (November 18th, 2019), for CUDA 10.2

CUDA,NVIDIA Driver,Linux,GCC之间的版本对应关系表格
————————————————

一、检查自己的电脑环境是否具备安装CUDA的条件
1.验证自己的电脑是否有一个可以支持CUDA的GPU

你可以电脑的配置信息中找到显卡的具体型号,如果你是双系统,在Windows下的设备管理器中也可以查到显卡的详细信息;
你也可以在ubuntu的终端中输入命令:

 lspci | grep -i nvidia

    1

会显示出你的NVIDIA GPU版本信息,不过不是很详细。

我的显示为(GeForce GTX 970):

01:00.0 VGA compatible controller: NVIDIA Corporation GM204 [GeForce GTX 970] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GM204 High Definition Audio Controller (rev a1)

    1
    2

2.验证自己的Linux版本是否支持 CUDA(Ubuntu 16.04没问题)

输入命令:

uname -m && cat /etc/*release

    1

结果显示:

x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04

......

    1
    2
    3
    4
    5

3.验证系统是否安装了gcc

在终端中输入:

gcc -v   #or $ gcc --version

    1

结果显示:

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
......

    1
    2

若未安装请使用下列命令进行安装:

sudo apt-get  install  build-essential

    1

4.验证系统是否安装了kernel header和 package development
4.1查看正在运行的系统内核版本:

在终端中输入:

uname -r

    1

结果显示:

4.15.0-112-generic

    1

如果缺失,在终端中输入:

sudo apt-get install linux-headers-$(uname -r)

    1

可以安装对应kernel版本的kernel header和package development

若以上各项验证检查均满足要求,便可进行下面的正式安装过程。如果没有满足要求的话,可以参考cuda的官方文档,里面有详细的针对每个问题的解决方案。

二、NVidia驱动

    NVIDIA-Linux-x86_64-450.57.run
    NVIDIA中国官网

Ubuntu笔记本Nvidia显卡使用状况,my神翻可以通过这里的链接安装显卡驱动。下面的安装步骤适用台式机安装驱动。

参考ubuntu16.04安装NVIDIA显卡驱动,第一次成功手动安装显卡驱动。
安装前 系统状态,ubuntu16.04初装完成,系统驱动还是核显的,没有换成系统自带的nvidia驱动之前的样子。
0、一些认知

1、Linux Ubuntu 20.04 LTS 更新到最新长期支持内核 v5.10.9

    新内核一般会支持更多新特性,对新硬件支持也会更好,例如如果要用 RTX30 系显卡,或 AMD 4800H 的核显,那就必须用新内核

    缺点是可能资源负载略高于老内核,更推荐使用长期支持版的内核
    Linux Ubuntu 20.04 的默认内核是 5.4.x 目前推荐的版本是 5.10.9 本文会简单概述如何更新内核,如果删除旧内核

2、How to update kernel in Ubuntu 16.04?–>也许有效的安装方式:LTSEnablementStack

# Desktop
 sudo apt-get install --install-recommends linux-generic-hwe-16.04 xserver-xorg-hwe-16.04
# Server
 sudo apt-get install --install-recommends linux-generic-hwe-16.04

    1
    2
    3
    4

3、Install the Latest Linux Kernel on Ubuntu 16.04 | 18.04 LTS

    use Ubuntu Kernel Update Utility install. You should know that Ukuu of version above 18.9 is now paid and closed source. Version 18.9 is still free and open source.

Ukuu v18.9.1

4、关于 -no-opengl-files

    普通笔记本一般默认采用集显作为视频输出,笔记本Ubuntu安装NVIDIA官方驱动后,易导致输入密码时循环进入登录页面,无法进入桌面。如果出现这个问题,可以直接用刚才的安装包卸载驱动,再重新加入-no-opengl-files选项安装。
    而对于台式机,如果使用NVIDIA独立显卡作为视频输出,可以直接默认安装,不需要加任何选项。相反,如果加上这个无OpenGL选项-no-opengl-files以后,会导致开机进入系统仍然使用nouveau驱动,在系统信息里面是显示Gallium 0.4 on llvmpipe(LLVM 3.8, 128bits)。link

1、卸载之前的驱动

这步没用到,因为之前是没装的,复制的其他博客,看命令也不难解释。

#for case1: original driver installed by apt-get:
sudo apt-get remove --purge nvidia*

#for case2: original driver installed by runfile:
sudo chmod +x *.run
sudo ./NVIDIA-Linux-x86_64-384.59.run --uninstall

    1
    2
    3
    4
    5
    6

如果原驱动是用apt-get安装的,就用第1种方法卸载。
如果原驱动是用runfile安装的,就用–uninstall命令卸载。其实,用runfile安装的时候也会卸载掉之前的驱动,所以不手动卸载亦可。
2、安装

禁用 nouveau驱动:

lsmod | grep nouveau # 查看有没有输出,如果有信息输出,则需要禁掉
sudo gedit /etc/modprobe.d/blacklist.conf  #将默认的驱动拉进黑名单

    1
    2

在blacklist.conf的最后添加下面几行:

blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist rivatv
blacklist nvidiafb

    1
    2
    3
    4
    5

更新: sudo update-initramfs -u #这一步可能翻墙要快点,但也无妨。
重启: lsmod | grep nouveau # 查看有没有输出,如果没有任何信息输出,则说明ok

进入tty模式进行安装:
Ctrl+Alt+F1进入文本模式,Ctrl+Alt+F7返回图形界面模式(期间文本模式下的进度不会改变,还可一继续进入文本模式)

#输入账户名及密码
sudo  su #输入密码,以root权限运行
cd ~/  #    ~/ <=> /home/yourname/
sudo service lightdm stop # 关闭图形界面
#如果安装失败,重新打开图形界面sudo service lightdm restart 把刚刚加入黑免单的驱动删除重启就回到了原来的状态
sudo init 3 #这句官网有介绍,Switch to runlevel 3.
sudo sh NVIDIA-Linux-x86_64-410.78.run --no-opengl-files –no-x-check –no-nouveau-check
#–no-opengl-files 只安装驱动文件,不安装OpenGL文件。这个参数最重要,只有禁用opengl这样安装才不会出现循环登陆的问题
#–no-x-check 安装驱动时不检查X服务
#–no-nouveau-check 安装驱动时不检查nouveau
#后面两个参数可不加。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

如果在装的过程中出现以下信息,请选择(重要!,踩坑许久):
之前看他的报错提示,又去官网论坛找解决方法,又说是Ubuntu内核可能不支持需要升级Ubuntu内核.也是折腾了许久,其实不必。

    The distribution-provided pre-install script failed! Are you sure you
    want to continue? 选择 yes 继续。
    Would you like to register the kernel module souces with DKMS? This
    will allow DKMS to automatically build a new module, if you install a
    different kernel later? 选择 No 继续。
    Nvidia’s 32-bit compatibility libraries? 选择 No 继续。
    Would you like to run the nvidia-xconfigutility to automatically
    update your x configuration so that the NVIDIA x driver will be used
    when you restart x? Any pre-existing x confile will be backed up. 选择
    no 继续

最后会看到安装成功的提示。

Installation of NVIDIA Accelerated Graphics Driver for Linux-x86_64 (version:450.57) is now complete. Please update your xorg.conf file as appriate; see the file /usr/share/doc/NVIDIA_GLX-1.0/README.txt for details.
                                                        OK

    1
    2

sudo service lightdm restart # 重新开启图形界面
nvidia-smi # 查看是否安装成功

    1
    2

3、检查 NVIDIA Driver是否安装成功

终端输入 :

cat /proc/driver/nvidia/version   #会输出NVIDIA Driver的版本号
lspci | grep -i nvidia            #查看gpu版本信息

    1
    2

4、问题记录
a."llvmpipe (LLVM 6.0, 256 bits)"问题

Ubuntu16.04台式机,安装驱动时,依然添加--no-opengl-files,有可能会有"llvmpipe (LLVM 6.0, 256 bits)"问题。去掉--no-opengl-files问题应该会解决。
参考链接:图形"llvmpipe (LLVM 6.0, 256 bits)"、NVIDIA driver is installed BUT still shows “llvmpipe (LLVM 6.0, 256 bits)”。
b.安装方式

PPA的安装方式,针对ubuntu16.04系统(2021.05)最新nvidia驱动只到430,想安装更加新的驱动,只能手动安装。
三、CUDA

    cuda-repo-ubuntu1604-11-0-local_11.0.2-450.51.05-1_amd64.deb
    CUDA Toolkit 11.0 (May 2020), Versioned Online Documentation
    CUDA Toolkit Archive

官方信息:CUDA Toolkit Documentation v10.2.89

官方安装指导:NVIDIA CUDA Installation Guide for Linux.

Nvidia驱动和cuda对照表
A、按照runfile版本安装。
0.安装

根据Ubuntu16.04+CUDA9.0 安装(全网最简便快速安装,测试成功),配置环境发。
Ubuntu 16.04 上安装 CUDA 9.0 详细教程
参考Ubuntu18.04安装Cuda10.1安装CUDA。

注意不要安装驱动,类似下图这样。

┌──────────────────────────────────────────────────────────────────────────────┐
│ CUDA Installer                                                               │
│ - [ ] Driver                                                                 │
│      [ ] 450.51.05                                                           │
│ + [X] CUDA Toolkit 11.0                                                      │
│   [X] CUDA Samples 11.0                                                      │
│   [X] CUDA Demo Suite 11.0                                                   │
│   [X] CUDA Documentation 11.0                                                │
│   Options                                                                    │
│   Install                                                                    │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│ Up/Down: Move | Left/Right: Expand | 'Enter': Select | 'A': Advanced options │

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

我的笔记本,出现这个图:

┌──────────────────────────────────────────────────────────────────────────────┐
│ Existing package manager installation of the driver found. It is strongly    │
│ recommended that you remove this before continuing.                          │
│ Abort                                                                        │
│ Continue                                                                     │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│                                                                              │
│ Up/Down: Move | 'Enter': Select                                              │

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

选Continue

安装后的提示如下,需要配置环境。

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-10.2/
Samples:  Installed in /home/mooc/

Please make sure that
 -   PATH includes /usr/local/cuda-10.2/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-10.2/lib64, or, add /usr/local/cuda-10.2/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.2/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.2/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 440.00 is required for CUDA 10.2 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run --silent --driver

Logfile is /var/log/cuda-installer.log

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-10.1/
Samples:  Installed in /home/lzy/

Please make sure that
 -   PATH includes /usr/local/cuda-10.1/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-10.1/lib64, or, add /usr/local/cuda-10.1/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.1/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.1/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 418.00 is required for CUDA 10.1 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run --silent --driver

Logfile is /var/log/cuda-installer.log

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

1.添加环境变量

gedit ~/.bashrc

    1

在文件末尾添加

export PATH=/usr/local/cuda-11.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64\${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

    1
    2

export PATH=/usr/local/cuda-10.1/bin:/usr/local/cuda-10.1/NsightCompute-2019.1${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

    1
    2

最后使其生效

source ~/.bashrc

    1

2.检查是否安装成功
2.1终端输入

a.以下试按照runfile形式安装的验证方式。但deb方式安装发现NVIDIA_CUDA-10.2_Samples文件没有。

cd /usr/local/cuda-10.2/samples/1_Utilities/deviceQuery

sudo make

./deviceQuery

    1
    2
    3
    4
    5

结果如图

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 970"
  CUDA Driver Version / Runtime Version          11.0 / 10.2
  CUDA Capability Major/Minor version number:    5.2
  Total amount of global memory:                 4040 MBytes (4236115968 bytes)
  (13) Multiprocessors, (128) CUDA Cores/MP:     1664 CUDA Cores
  GPU Max Clock rate:                            1253 MHz (1.25 GHz)
  Memory Clock rate:                             3505 Mhz
  Memory Bus Width:                              256-bit
  L2 Cache Size:                                 1835008 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 2 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device supports Compute Preemption:            No
  Supports Cooperative Kernel Launch:            No
  Supports MultiDevice Co-op Kernel Launch:      No
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.0, CUDA Runtime Version = 10.2, NumDevs = 1
Result = PASS

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44

出现Result = PASS则表示安装成功通过。
2.2验证驱动版本

cat /proc/driver/nvidia/version

    1

结果显示类似
NVRM version: NVIDIA UNIX x86_64 Kernel Module 384.81 Sat Sep 2 02:43:11 PDT 2017
GCC version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)
2.3验证CUDA Toolkit

nvcc -V      # 会输出CUDA的版本信息

    1

2.4最后再检查一下系统和CUDA-Capable device的连接情况

打开终端输入:

cd NVIDIA_CUDA-10.2_Samples/

    1

然后终端输入:$ make
系统就会自动进入到编译过程,整个过程大概需要十几到二十分钟,请耐心等待。如果出现错误的话,系统会立即报错停止。

竟然出错了!使用make -k来跳过这个错误。

fatal error: nvscibuf.h

    1

第一次运行时可能会报错,提示的错误信息可能会是系统中没有gcc,

解决办法就是通过命令重新安装gcc就行,在终端输入:$ sudo apt-get install gcc 安装完gcc后, 再make就正常了。

如果编译成功,最后会显示Finished building CUDA samples,如下图所示。

make[1]: Leaving directory '/home/mooc/NVIDIA_CUDA-11.0_Samples/7_CUDALibraries/simpleCUBLASXT'
Finished building CUDA samples

    1
    2

终端输入 :

 ./bandwidthTest

    1

看到类似如下图片中的显示,则代表成功

[CUDA Bandwidth Test] - Starting...
Running on...

 Device 0: GeForce GTX 970
 Quick Mode

 Host to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(GB/s)
   32000000            11.8

 Device to Host Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(GB/s)
   32000000            11.4

 Device to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(GB/s)
   32000000            145.7

Result = PASS

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

√ B、deb形式安装

Package Manager Installation
1、安装

根据官方安装指导:NVIDIA CUDA Installation Guide for Linux就行。
2、测试

如上 官方安装指导 测试。但,没有 NVIDIA_CUDA-10.2_Samples 文件夹。但samples文件也一样用。把/usr/local/cuda-11.0/samples复制出来,到home。

cd samples
make

    1
    2

cd samples/1_Utilities/deviceQuery
./deviceQuery

    1
    2

cd samples/1_Utilities/bandwidthTest
./bandwidthTest

    1
    2

C、CUDA卸载

参考官方指导

    卸载原来的cuda8.0(注意:不需要卸载显卡驱动,给自己找麻烦):

sudo /usr/local/cuda-11.0/bin/uninstall_cuda_11.0.pl

    1

    卸载之后,会发现 /usr/local/cuda-11.0目录下任然有文件存在,这是cudnn文件,所以还需要将cuda-11.0文件删除干净:

sudo rm -rf /usr/local/cuda-11.0

    1

Removing CUDA Toolkit and Driver

To remove CUDA Toolkit:

$ sudo apt-get --purge remove "*cublas*" "cuda*"

    1

To remove NVIDIA Drivers:

$ sudo apt-get --purge remove "*nvidia*"

    1

sudo rm -rf cuda

sudo rm -r cuda-9.0

    1
    2
    3

四、cuDNN

    Download cuDNN v8.0.2 (July 24th, 2020), for CUDA 11.0

cuDNN
cudnn-archive
Downloading cuDNN For Linux
官方安装参考文档This Archives document provides access to previously released cuDNN documentation versions.
1-1、Installing From A Tar File

参考Ubuntu 16.04 配置安装 Tensorflow Gpu版本

选: cuDNN Library for Linux下载

在这里插入图片描述

参考检测CUDNN是否成功安装
https://www.jianshu.com/p/8e9090a62342
https://www.cnblogs.com/liuwenhua/p/11521668.html
https://blog.csdn.net/wanzhen4330/article/details/81699769#cudnn%E7%9A%84%E5%AE%89%E8%A3%85

1、首先解压缩下的cudnn压缩包文件

tar -xzvf cudnn-11.0-linux-x64-v8.0.2.39.tgz

    1

解压出:

cuda/include/cudnn.h
cuda/include/cudnn_adv_infer.h
cuda/include/cudnn_adv_train.h
cuda/include/cudnn_backend.h
cuda/include/cudnn_cnn_infer.h
cuda/include/cudnn_cnn_train.h
cuda/include/cudnn_ops_infer.h
cuda/include/cudnn_ops_train.h
cuda/include/cudnn_version.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.8
cuda/lib64/libcudnn.so.8.0.2
cuda/lib64/libcudnn_adv_infer.so
cuda/lib64/libcudnn_adv_infer.so.8
cuda/lib64/libcudnn_adv_infer.so.8.0.2
cuda/lib64/libcudnn_adv_infer_static.a
cuda/lib64/libcudnn_adv_train.so
cuda/lib64/libcudnn_adv_train.so.8
cuda/lib64/libcudnn_adv_train.so.8.0.2
cuda/lib64/libcudnn_adv_train_static.a
cuda/lib64/libcudnn_cnn_infer.so
cuda/lib64/libcudnn_cnn_infer.so.8
cuda/lib64/libcudnn_cnn_infer.so.8.0.2
cuda/lib64/libcudnn_cnn_infer_static.a
cuda/lib64/libcudnn_cnn_train.so
cuda/lib64/libcudnn_cnn_train.so.8
cuda/lib64/libcudnn_cnn_train.so.8.0.2
cuda/lib64/libcudnn_cnn_train_static.a
cuda/lib64/libcudnn_ops_infer.so
cuda/lib64/libcudnn_ops_infer.so.8
cuda/lib64/libcudnn_ops_infer.so.8.0.2
cuda/lib64/libcudnn_ops_infer_static.a
cuda/lib64/libcudnn_ops_train.so
cuda/lib64/libcudnn_ops_train.so.8
cuda/lib64/libcudnn_ops_train.so.8.0.2
cuda/lib64/libcudnn_ops_train_static.a
cuda/lib64/libcudnn_static.a
cuda/lib64/libcudnn_static.a

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39

Procedure
Navigate to your directory containing the cuDNN Tar file.
Unzip the cuDNN package.

$ tar -xzvf cudnn-x.x-linux-x64-v8.x.x.x.tgz

    1

Copy the following files into the CUDA Toolkit directory, and change the file permissions.

$ 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
    3

1-2、验证:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

    1

出错,说是链接问题。(在尝试CUDA11与cuDNN8时,tar形式的安装一直存在链接问题。)

链接:

cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.6.0.21 libcudnn.so.6
sudo ln -s libcudnn.so.6 libcudnn.so

sudo chmod +r libcudnn.so.7.0.5
sudo ln -sf libcudnn.so.7.0.5 libcudnn.so.7  
sudo ln -sf libcudnn.so.7 libcudnn.so     
sudo ldconfig

    1
    2
    3
    4
    5
    6
    7
    8
    9

如果没出错,会显示:

#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#include "driver_types.h"

    1
    2
    3
    4
    5
    6
    7

√ 2-1、Installing From A Debian File

官方安装参考
下载三个文件:

    cuDNN Runtime Library for Ubuntu16.04 x86_64 (Deb)
    cuDNN Developer Library for Ubuntu16.04 x86_64 (Deb)
    cuDNN Code Samples and User Guide for Ubuntu16.04 x86_64 (Deb)

后按装:

sudo dpkg -i libcudnn8_8.0.2.39-1+cuda11.0_amd64.deb
sudo dpkg -i libcudnn8-dev_8.0.2.39-1+cuda11.0_amd64.deb
sudo dpkg -i libcudnn8-doc_8.0.2.39-1+cuda11.0_amd64.deb

    1
    2
    3

2-2、Verifying The cuDNN Install On Linux

cp -r /usr/src/cudnn_samples_v8/ /home/mooc/
cd /home/mooc/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN

    1
    2
    3
    4

结果如下:

Executing: mnistCUDNN
cudnnGetVersion() : 8002 , CUDNN_VERSION from cudnn.h : 8002 (8.0.2)
Host compiler version : GCC 5.4.0

There are 1 CUDA capable devices on your machine :
device 0 : sms 13  Capabilities 5.2, SmClock 1253.0 Mhz, MemSize (Mb) 4039, MemClock 3505.0 Mhz, Ecc=0, boardGroupID=0
Using device 0

Testing single precision
Loading binary file data/conv1.bin
Loading binary file data/conv1.bias.bin
Loading binary file data/conv2.bin
Loading binary file data/conv2.bias.bin
Loading binary file data/ip1.bin
Loading binary file data/ip1.bias.bin
Loading binary file data/ip2.bin
Loading binary file data/ip2.bias.bin
Loading image data/one_28x28.pgm
Performing forward propagation ...
Testing cudnnGetConvolutionForwardAlgorithm_v7 ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: -1.000000 time requiring 178432 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: -1.000000 time requiring 57600 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: -1.000000 time requiring 2057744 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: -1.000000 time requiring 184784 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.037568 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.039200 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 0.068480 time requiring 178432 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.071264 time requiring 57600 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 0.574752 time requiring 2057744 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 3.837248 time requiring 184784 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnGetConvolutionForwardAlgorithm_v7 ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: -1.000000 time requiring 1433120 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: -1.000000 time requiring 2450080 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: -1.000000 time requiring 2000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: -1.000000 time requiring 4656640 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: -1.000000 time requiring 128000 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.088384 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.149120 time requiring 128000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 0.164736 time requiring 1433120 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 0.203712 time requiring 4656640 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.497536 time requiring 2000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 1.100000 time requiring 2450080 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Resulting weights from Softmax:
0.0000000 0.9999399 0.0000000 0.0000000 0.0000561 0.0000000 0.0000012 0.0000017 0.0000010 0.0000000
Loading image data/three_28x28.pgm
Performing forward propagation ...
Testing cudnnGetConvolutionForwardAlgorithm_v7 ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: -1.000000 time requiring 178432 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: -1.000000 time requiring 57600 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: -1.000000 time requiring 2057744 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: -1.000000 time requiring 184784 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.018144 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.026784 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.051264 time requiring 57600 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 0.057472 time requiring 178432 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 0.086016 time requiring 184784 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 0.143008 time requiring 2057744 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnGetConvolutionForwardAlgorithm_v7 ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: -1.000000 time requiring 1433120 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: -1.000000 time requiring 2450080 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: -1.000000 time requiring 2000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: -1.000000 time requiring 4656640 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: -1.000000 time requiring 128000 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.081024 time requiring 2000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.090912 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 0.108960 time requiring 2450080 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.148992 time requiring 128000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 0.206688 time requiring 1433120 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 0.261760 time requiring 4656640 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Resulting weights from Softmax:
0.0000000 0.0000000 0.0000000 0.9999288 0.0000000 0.0000711 0.0000000 0.0000000 0.0000000 0.0000000
Loading image data/five_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 0.9999820 0.0000154 0.0000000 0.0000012 0.0000006

Result of classification: 1 3 5

Test passed!

Testing half precision (math in single precision)
Loading binary file data/conv1.bin
Loading binary file data/conv1.bias.bin
Loading binary file data/conv2.bin
Loading binary file data/conv2.bias.bin
Loading binary file data/ip1.bin
Loading binary file data/ip1.bias.bin
Loading binary file data/ip2.bin
Loading binary file data/ip2.bias.bin
Loading image data/one_28x28.pgm
Performing forward propagation ...
Testing cudnnGetConvolutionForwardAlgorithm_v7 ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: -1.000000 time requiring 178432 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: -1.000000 time requiring 184784 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: -1.000000 time requiring 2057744 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.043584 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.045472 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 0.081376 time requiring 178432 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 0.101952 time requiring 184784 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 0.147296 time requiring 2057744 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.433760 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnGetConvolutionForwardAlgorithm_v7 ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: -1.000000 time requiring 2000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: -1.000000 time requiring 4656640 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: -1.000000 time requiring 64000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: -1.000000 time requiring 2450080 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: -1.000000 time requiring 1433120 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.089216 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.089856 time requiring 2000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 0.093024 time requiring 2450080 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.156448 time requiring 64000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 0.163584 time requiring 1433120 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 0.202016 time requiring 4656640 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Resulting weights from Softmax:
0.0000001 1.0000000 0.0000001 0.0000000 0.0000563 0.0000001 0.0000012 0.0000017 0.0000010 0.0000001
Loading image data/three_28x28.pgm
Performing forward propagation ...
Testing cudnnGetConvolutionForwardAlgorithm_v7 ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: -1.000000 time requiring 178432 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: -1.000000 time requiring 184784 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: -1.000000 time requiring 2057744 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.021248 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.021568 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.026880 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 0.056800 time requiring 178432 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 0.076128 time requiring 184784 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 0.143872 time requiring 2057744 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnGetConvolutionForwardAlgorithm_v7 ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: -1.000000 time requiring 2000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: -1.000000 time requiring 4656640 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: -1.000000 time requiring 64000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: -1.000000 time requiring 2450080 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: -1.000000 time requiring 1433120 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Testing cudnnFindConvolutionForwardAlgorithm ...
^^^^ CUDNN_STATUS_SUCCESS for Algo 0: 0.090656 time requiring 0 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 1: 0.092576 time requiring 2000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 4: 0.110464 time requiring 2450080 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 2: 0.155904 time requiring 64000 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 5: 0.185184 time requiring 4656640 memory
^^^^ CUDNN_STATUS_SUCCESS for Algo 7: 0.239072 time requiring 1433120 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 6: -1.000000 time requiring 0 memory
^^^^ CUDNN_STATUS_NOT_SUPPORTED for Algo 3: -1.000000 time requiring 0 memory
Resulting weights from Softmax:
0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000714 0.0000000 0.0000000 0.0000000 0.0000000
Loading image data/five_28x28.pgm
Performing forward propagation ...
Resulting weights from Softmax:
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 1.0000000 0.0000154 0.0000000 0.0000012 0.0000006

Result of classification: 1 3 5

Test passed!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203

cuDNN两种安装方式,验证方法好像还不通用。先按第二个来了。以后有问题再说。
————————————————
版权声明:本文为CSDN博主「Easson子元桑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38221101/article/details/107973845

————————————————
版权声明:本文为CSDN博主「Easson子元桑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38221101/article/details/107973845

版权声明:本文为CSDN博主「Easson子元桑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38221101/article/details/107973845

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值