ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

2021 年最新版 Ubuntu 20.04 配置 Caffe 深度学习环境

2021-07-15 12:02:10  阅读:650  来源: 互联网

标签:compute CUDA sudo dev OpenCV Caffe usr 最新版 2021


前言

本文写于 2021 年 7 月 15 日。若按本文的方法配置出现了错误,请留意是否距离写作时间过远。

请确保你的电脑显卡是 NVIDIA 显卡。本文不适用于 AMD 显卡和 Intel 集成显卡。

一、更新系统软件包

在终端中执行如下命令,将系统内核和基础组件升级至最新版本,否则后续编译会因为组件版本问题遇到不可预料的错误。

# 更新软件仓库缓存
sudo apt-get update

# 更新所有软件包至最新版本
sudo apt-get upgrade -y

# 更新的过程中可能会升级 Linux 内核,执行下述命令删除不再使用的旧内核
sudo apt-get autoremove --purge -y

# 重启
reboot

二、安装 NVIDIA 显卡驱动

这里使用 ubuntu-drivers 命令安装软件仓库里的 NVIDIA 驱动。这种方法不但简单,而且安装上的驱动也很稳定,不会导致系统崩溃。

# 自动安装推荐的驱动
sudo ubuntu-drivers autoinstall

# 重启
reboot

重启后,输入 nvidia-smi 命令,检查 NVIDIA 驱动和 CUDA 驱动是否被正确安装。如果有类似下面这样的输出,则说明安装成功。

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.84       Driver Version: 460.84       CUDA Version: 11.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  GeForce GT 720      Off  | 00000000:01:00.0 N/A |                  N/A |
| 40%   41C    P0    N/A /  N/A |    146MiB /   974MiB |     N/A      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

三、安装 CUDA 工具包

用浏览器打开 NVIDIA 开发者官网 NVIDIA 开发者 | NVIDIA Developer,点击网页最下方【常用 SDK】里的【CUDA 开发工具包/SDK】,进入 CUDA 专区。点击【立即下载】后,按下述顺序配置下载选项:

Operating System: Linux

Architecture: x86_64

Distribution: Ubuntu

Version: 20.04

Installer Type: runfile (local)

此时网页显示如下图所示:

我们按照网页上的指示,在终端里键入下述命令,下载 CUDA 工具包:

# 切换到用户目录
cd ~

# 下载 CUDA 工具包的安装程序
wget https://developer.download.nvidia.com/compute/cuda\
/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run

# 运行安装程序
sudo sh cuda_11.4.0_470.42.01_linux.run

# 如果上述命令报错说 /tmp 目录空间不足
# 则需要在一个至少有 5GB 空间的分区里创建 CUDA 安装程序的临时目录
# 假设创建在自己的用户目录下 (~/cuda_temp)
rm -rf /tmp/*
mkdir cuda_temp
sudo sh cuda_11.4.0_470.42.01_linux.run --tmpdir=~/cuda_temp

进入安装程序以后,首先输入 accept 同意协议,然后进入选择要安装的组件的部分。这里安装程序默认会安装 CUDA 驱动,但因为 CUDA 驱动我们已经在第二步安装 NVIDIA 驱动时同步安装过了,所以不需要再安装一遍。

将光标定位到 CUDA Driver 处,然后按 Enter,取消其勾选,然后再将光标移动到最下方,输入 i 开始安装。

安装完毕后,根据安装程序的指示配置环境变量。

需要在 PATH 变量里追加 /usr/local/cuda-11.4/bin 目录。

需要在 LD_LIBRARY_PATH 变量里追加 /usr/local/cuda-11.4/lib64 目录。

# 用文本编辑器打开 /etc/profile 文件,用于编辑环境变量
# 我用的是 Ubuntu Kylin,20.04 版本里自带的文本编辑器已经变成 pluma 了
# 不知道原生的 Ubuntu 是不是这样的,如果不是,那就把下面的 pluma 换成 gedit
sudo pluma /etc/profile

# 在文件的末尾,新增如下三行,然后保存
export PATH=/usr/local/cuda-11.4/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

# 回到终端,重启计算机,使得环境变量配置生效
reboot

重启计算机后,我们来验证 CUDA 工具包是否安装成功。

# 切换到 CUDA Sample 目录
cd ~/NVIDIA_CUDA-11.4_Samples

# 将演示项目的源代码编译成可执行文件
make -j8

# 尝试运行演示项目
cd bin/x86_64/linux/release
./deviceQuery

如果终端里有类似如下的输出,说明 CUDA 工具包安装成功。

./deviceQuery Starting...

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

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GT 720"
  CUDA Driver Version / Runtime Version          11.2 / 11.4
  CUDA Capability Major/Minor version number:    3.5
  Total amount of global memory:                 974 MBytes (1021575168 bytes)
  (001) Multiprocessors, (192) CUDA Cores/MP:    192 CUDA Cores
  GPU Max Clock rate:                            797 MHz (0.80 GHz)
  Memory Clock rate:                             900 Mhz
  Memory Bus Width:                              64-bit
  L2 Cache Size:                                 524288 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 shared memory per multiprocessor:        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 1 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 Managed Memory:                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.2, CUDA Runtime Version = 11.4, NumDevs = 1
Result = PASS

四、安装 Caffe 框架所必需的第三方库

根据 Caffe 官网 Caffe | Deep Learning Framework (berkeleyvision.org) 的指示,执行如下命令安装依赖:

# 常规依赖
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev
sudo apt-get install libopencv-dev libboost-all-dev libhdf5-serial-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install protobuf-compiler

# BLAS(线性代数库)依赖
sudo apt-get install libatlas-base-dev libopenblas-dev

# 注:以上依赖项可以写在一条命令里,不必分开写
# 这里分开写只是为了提高阅读体验

五、【非常重要】安装 OpenCV 3

上述依赖项里已经安装了 libopencv-dev,但是安装的是 OpenCV 4。Caffe 框架的 1.0 版本是 2017 年发布的,距离现在已有四年之久,在此期间也没有发布过任何新版本。1.0 版本有部分代码调用的是仅存在于 OpenCV 3 里的 API,无法适用于 OpenCV 4。强行使用 4 的话,在后续的编译过程中会报错,而且这样的错误不能简单通过修改 Makefile.config 配置文件来修正。所以这里我们需要下载 OpenCV 3 的源码,然后在 /usr/local 里再编译一份 OpenCV 3 的库。这个错误折腾了我好几天,重新编译低版本的 OpenCV 是我能想到的最后的解决方案了,没想到成功了。

我们现在根据 OpenCV 官网的教程指示 OpenCV: Installation in Linux 来配置 OpenCV。

# 安装 OpenCV 3.4.14 的依赖项
sudo apt-get install cmake libgtk2.0-dev pkg-config
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev

# 下载 OpenCV 3.4.14 的源码到临时目录里
cd /tmp
wget https://github.com/opencv/opencv/archive/3.4.14.zip

# 解压缩
unzip 3.4.14.zip
cd opencv-3.4.14

# 在临时目录里编译,这样下次启动时只会在
# /usr/local 里留下编译好的库和头文件,/tmp 里的源码则会被清除
# 注意第二条命令最后有两个点,是用于指示上层目录的,不能省略
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j8 && sudo make install

因为和 CUDA 一样是源码编译,不是从软件仓库直接安装的,所以同样的,编译完成后我们需要配置环境变量,动态库的搜索目录(LD_LIBRARY_PATH)需要加上刚安装的 OpenCV 3 的库存放目录。

# 用文本编辑器打开 /etc/profile 文件,用于编辑环境变量
# 我用的是 Ubuntu Kylin,20.04 版本里自带的文本编辑器已经变成 pluma 了
# 不知道原生的 Ubuntu 是不是这样的,如果不是,那就把下面的 pluma 换成 gedit
sudo pluma /etc/profile

# 修改 LD_LIBRARY_PATH 变量,加上 /usr/local/lib 目录
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/cuda-11.4/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

# 回到终端,重启计算机,使得环境变量配置生效
reboot

彩蛋:之前写的在 CentOS 7 上配置 Caffe 的文章里,没有说明要源码安装 OpenCV 3。这是因为 CentOS 7 的软件仓库里,opencv-devel 是 2.4.5 版本,并不是 4 系列。Caffe 框架同时兼容 2 系列和 3 系列的 OpenCV,不兼容 4 系列的。

六、安装 Caffe 框架

首先从 GitHub 下载 Caffe 稳定版的源码:

# 切换到用户目录
cd ~

# 从 GitHub 下载 Caffe 1.0 的源码
wget https://github.com/BVLC/caffe/archive/refs/tags/1.0.zip

# 解压缩
unzip 1.0.zip

此时你的用户目录下会多出一个叫 caffe-1.0 的目录。这就是我们的 Caffe 框架所在目录。

在安装 Caffe 框架之前,我们需要做一些配置。1.0 版本的框架是 2017 年发布的,距离现在已有四年,其所依赖的各种第三方库的代码架构也产生了较大的改变。原先的默认配置文件已无法正确编译并安装 Caffe 框架,我们需要对配置文件做较大的改动。

# 进入 Caffe 框架目录
cd caffe-1.0

# 重命名 example 后缀的配置文件
mv Makefile.config.example Makefile.config

# 打开配置文件进行编辑
# 如果提示没有找到命令 pluma,则将 pluma 改为 gedit
pluma Makefile.config

我们需要对配置文件做如下几处改动:

  • OpenCV 版本使用 3,而不是默认的 2
    # Uncomment if you're using OpenCV 3
    OPENCV_VERSION := 3 #去掉这一行左边的 # 号
  • CUDA 架构部分,只保留 3.5 以上的算力。CUDA 11.4 版本不再支持低于 3.5 的算力。保留低算力会导致编译时报出找不到低算力 API 的错误。
    # 原始配置:
    # CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
    # 		-gencode arch=compute_20,code=sm_21 \
    # 		-gencode arch=compute_30,code=sm_30 \
    # 		-gencode arch=compute_35,code=sm_35 \
    # 		-gencode arch=compute_50,code=sm_50 \
    # 		-gencode arch=compute_52,code=sm_52 \
    # 		-gencode arch=compute_60,code=sm_60 \
    # 		-gencode arch=compute_61,code=sm_61 \
    # 		-gencode arch=compute_61,code=compute_61
    #
    # 去掉前三行 20、21、30,变为下面的样子
    CUDA_ARCH := -gencode arch=compute_35,code=sm_35 \
    		-gencode arch=compute_50,code=sm_50 \
    		-gencode arch=compute_52,code=sm_52 \
    		-gencode arch=compute_60,code=sm_60 \
    		-gencode arch=compute_61,code=sm_61 \
    		-gencode arch=compute_61,code=compute_61
  • 线性代数库部分,默认使用的是是 ATLAS,我们需要将其改为 OpenBLAS。为什么要改,因为之前在 CentOS 7 里配的时候,保持 ATLAS 会报出找不到 -lcblas 和 -latlas 的错误。改成 OpenBLAS 以后编译通过了,所以我也懒得再尝试 Ubuntu 下强行用 ATLAS 库会发生什么了。有心的小伙伴也可以尝试下坚持用 ATLAS 会发生什么。

    # BLAS := atlas
    # 找到上面这一行,将 atlas 改为 open
    BLAS := open
  • 头文件目录和库目录要增加一些目录。主要是针对 hdf5 这项依赖。Ubuntu 20.04 里,用 apt-get 安装的 hdf5 依赖,头文件并不是放在 /usr/include 里,而是放在 /usr/include/hdf5/serial 里。库文件也挪了位置,不在 /usr/lib 里,而在 /usr/lib/x86_64-linux-gnu/hdf5/serial 里。这些子目录并不会被默认包含,我们需要明确指定。

    # 找到下面三行
    # # Whatever else you find you need goes here.
    # INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
    # LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
    #
    # 做如下修改:
    # INCLUDE_DIRS 在末尾添加 /usr/include/hdf5/serial 目录
    # LIBRARY_DIRS 在末尾添加 /usr/lib/x86_64-linux-gnu 和
    # /usr/lib/x86_64-linux-gnu/hdf5/serial 两个目录
    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib \
                    /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial

完成以上配置后,我们保存该配置文件,然后在终端里完成如下一键三连,中途若无任何报错信息出现,则 Caffe 框架安装成功!

make all -j8 && make test -j8 && make runtest -j8

七、用 Caffe 训练 MNIST(手写体数字)训练集

请跳转至这里继续阅读:2021 年最新版 CentOS 7 配置 Caffe 深度学习环境_s.M.i.L.e-CSDN博客

标签:compute,CUDA,sudo,dev,OpenCV,Caffe,usr,最新版,2021
来源: https://blog.csdn.net/smallyang0613/article/details/118752632

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有