本文是个人的经验,只提供一些思路。每一台电脑都值得尊重与耐心。
CPU 与 GPU 区别
从上图可以看出GPU(图像处理器,Graphics Processing Unit)和CPU(中央处理器,Central Processing Unit)在设计上的主要差异在于GPU有更多的运算单元(如图中绿色的ALU),而Control和Cache单元不如CPU多,这是因为GPU在进行并行计算的时候每个运算单元都是执行相同的程序,而不需要太多的控制。Cache单元是用来做数据缓存的,CPU可以通过Cache来减少存取主内存的次数,也就是减少内存延迟(memory latency)。GPU中Cache很小或者没有,因为GPU可以通过并行计算的方式来减少内存延迟。因此CPU的Cahce设计主要是实现低延迟,Control主要是通用性,复杂的逻辑控制单元可以保证CPU高效分发任务和指令。所以CPU擅长逻辑控制,是串行计算,而GPU擅长高强度计算,是并行计算。打个比方,GPU就像成千上万的苦力,每个人干的都是类似的苦力活,相互之间没有依赖,都是独立的,简单的人多力量大;CPU就像包工头,虽然也能干苦力的活,但是人少,所以一般负责任务分配,人员调度等工作。可以看出GPU加速是通过大量线程并行实现的,因此对于不能高度并行化的工作而言,GPU就没什么效果了。而CPU则是串行操作,需要很强的通用性,主要起到统管和分配任务的作用。参考链接
Nvidia
显卡驱动。安装CUDA/CuDNN 必选项,每个电脑的显卡不同,在安装的时候要注意查看。
CUDA
CUDA(Compute Unified Device Architecture),是英伟达公司推出的一种基于新的并行编程模型和指令集架构的通用计算架构,它能利用英伟达GPU的并行计算引擎,比CPU更高效的解决许多复杂计算任务。
使用CUDA的好处就是透明。根据摩尔定律GPU的晶体管数量不断增多,硬件结构必然是不断的在发展变化,没有必要每次都为不同的硬件结构重新编码,而CUDA就是提供了一种可扩展的编程模型,使得已经写好的CUDA代码可以在任意数量核心的GPU上运行。如下图所示,只有运行时,系统才知道物理处理器的数量。
CuDNN
NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,如加州大学伯克利分校的流行CAFFE软件。简单的,插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是调整性能,同时还可以在GPU上实现高性能现代并行计算。参考链接
CuDNN支持的算法
在Ubuntu环境下,安装nvidia显卡驱动,CUDA有两种思路:package manager安装和runfile安装,即同时安装驱动和CUDA 分开安装驱动和CUDA。提示:package manager 安装流程简单,耗时长,但失败率较高,与电脑环境和网络状态紧密相关; runfile 安装流程复杂,网上的教程较多。个人两种方式都安装过,个人倾向于package manager 方式安装。参考链接 参考链接
CUDA安装:package manager 方式( .deb 文件)
# package manager 安装
# 下载 .deb 文件
sudo dpkg -i cuda-repo-ubuntu1604-10-1-local-10.1.105-418.39_1.0-1_amd64.deb
# 有可能需要此步: sudo apt-key add /var/cuda-repo-10-1-local-10.1.105-418.39/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda
# 此过程可能相当漫长,个人此步骤安装花费4小时/2小时/20分钟/15分钟 和当时网络环境相关
# 中途断网 sudo apt-get install cuda --fix-missing
环境变量
sudo gedit ~/.bashrc
# 添加路径
export PATH=/usr/local/cuda-10.1/bin:$PATH
export LD_LIBARAY_PATH=/usr/local/cuda/lib64:$LD_LIBARAY_PATH
# 激活环境变量
source ~/.bashrc
CuDNN安装:先下载安装包 .tgz 文件格式(如果是其他文件格式,可以手动改为 .tgz 文件),再命令行安装。实际操作过程中,建议进入相关文件夹查看相关文件,以加深印象。
tar -xvf cudnn-10.1-linux-x64-v7.5.0.56.tgz
cd cuda
sudo cp include/cudnn.h /usr/local/cuda/include/
sudo cp lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
# 此时运行 nvidia-smi 不会显示相关信息,需重启方可生效。
# CUDNN 连接建立
# 若缺少此步骤,在 tensorflow-gpu 导入 tensorflow 时会报
# ImportError: libcudnn.so.7 cannot open shared object file: No Such file or directory
cd /usr/local/cuda/lib64
sudo rm -rf libcudnn.so libcudnn.so.7
sudo ln -s libcudnn.so.7.6.2 libcudnn.so.7 #注意根据自己的版本号修改
sudo ln -s libcudnn.so.7 libcudnn.so.7
# 立即生效
sudo ldconfig
验证 Nvidia 显卡 参考链接
# 方法一
nvidia-smi
# 方法二
nvidia-settings
# 方法三
cat /proc/driver/nvidia/version
验证CUDA:参考链接
方法一:
nvcc -V
方法二:
cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
出现一下便安装成功
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GT 740M"
CUDA Driver Version / Runtime Version 8.0 / 8.0
CUDA Capability Major/Minor version number: 3.5
Total amount of global memory: 2004 MBytes (2100953088 bytes)
( 2) Multiprocessors, (192) CUDA Cores/MP: 384 CUDA Cores
GPU Max Clock rate: 1032 MHz (1.03 GHz)
Memory Clock rate: 800 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
验证CuDNN:参考链接 参考链接
方法一
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
方法二
下载三个文件:下载链接
cuDNN v7.0.5 Runtime Library for Ubuntu16.04 (Deb)
cuDNN v7.0.5 Develpoper Library for Ubuntu16.04 (Deb)
cuDNN v7.0.5 Code Samples and User Guide for Ubuntu16.04 (Deb)
sudo dpkg -i libcudnn7_7.4.2.24-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-dev_7.4.2.24-1+cuda9.0_amd64.deb
sudo dpkg -i libcudnn7-doc_7.4.2.24-1+cuda9.0_amd64.deb
cp -r /usr/src/cudnn_samples_v7/ /home/wdong/
cd /home/wdong/cudnn_samples_v7/mnistCUDNN
make clean && make
./mnistCUDNN
# 显示 Test passed!
有时候确定自己安装正确了,但测试时却报错,请注意留心:环境变量激活,Ubuntu重启,终端重启。这些操作之后可能就正确了。