Caffe + Ubuntu 15.04/16.04 + CUDA 7.5/8.0 在服务器上安装配置及卸载重新安装(已测试可执行)

本文参考如下:
caffe 安装所需的所有资源可在百度网盘下载
链接: http://pan.baidu.com/s/1jIRJ6mU
提取密码:xehi

在服务器上为每个子用户拷贝caffe 使用

Linux探索之旅 | 第一部分第四课:磁盘分区+完成Ubuntu安装

Ubuntu16.04 + 1080Ti深度学习环境配置教程


第一部分 Linux安装


Linux的安装,先制作安装U盘或者光盘,可参考
制作安装U盘
Win7 安装Ubuntu双系统

Rufus制作U盘启动安装

Ubuntu 16.04 U盘安装图文教程

Universal USB Installer制作U盘启动安装,软碟通UltraISO v9.5.3.2901 简体中文完美注册版制作 光盘启动安装

Universal USB Installer

官网 ----如何制作光盘U盘安装盘的教程中文

如何在Windows系统上制作一个USB安装盘:中文,英文。

总共用分出的500G的空间来安装Ubuntu 15.04,这个版本是最新的版本,有个好处是,可以直接访问Windows8.1的NTFS分区,建议安装英文版本,中文版本在文本命令模式下有时会出现乱码。

如果是装双系统启动建议学习一下
计算机是如何启动的


Linux的文件系统

ext2:这个文件系统在Linux下使用了很久。ext是英语Extended的前三个字母,是“扩展的”的意思。由法国程序员Remy Card设计,他也是ext(第一代扩展文件系统)的设计者。ext文件系统的一大优势是几乎不怎么产生磁盘碎片,所以在Linux系统下一般不需要进行磁盘碎片整理。ext3:ext3和ext2很接近,不过ext3是日志型文件系统,所以比之ext2(不是日志型),ext3在故障时可以恢复数据。ext3和ext2高度兼容。ext4:ext3的演进,扩大了磁盘分区的大小,进一步减少了磁盘碎片的产生机率

所以ext2,ext3和ext4分别是Second Extended Filesystem(第二代扩展文件系统),Third Extended Filesystem(第三代扩展文件系统)和Fourth Extended Filesystem(第四代扩展文件系统)的缩写。


Linux下磁盘分区的名称

dev是英语device的头三个字母,表示"设备"文件。第一个字母:h或s。h表示IDE接口的硬盘。s表示SATA或SCSI接口的硬盘。第二个字母:总是d。英语drive的首字母,表示"磁盘驱动器"。第三个字母:a,b,c,d,等等。表示顺序。

hda一般是指IDE接口的硬盘,hda一般指第一块硬盘(磁盘),类似的有hdb,hdc等。

sda一般是指SATA或SCSI接口的硬盘,sda一般指第一块硬盘(磁盘),类似的有sdb,sdc等。


主分区和逻辑分区

主分区:英语是Primary Partition。也称为主磁盘分区,和扩展分区、逻辑分区一样,是一种分区类型。主分区中不能再划分其他类型的分区,因此每个主分区都相当于一个逻辑磁盘(在这一点上主分区和逻辑分区很相似,但主分区是直接在硬盘上划分的,逻辑分区则必须建立于扩展分区中)。早期MBR模式分区只能划分四个分区,现在的GPT分区至少可以划分128个主分区,未来很有可能将不存在扩展分区和逻辑分区的概念。一个硬盘的主分区包含操作系统启动所必需的文件和数据的硬盘分区,要在硬盘上安装操作系统,则硬盘必须有一个主分区

逻辑分区:英语是Logical Partition。是硬盘上一块连续的区域,不同之处在于,每个主分区只能分成一个驱动器,每个主分区都有各自独立的引导块,可以用fdisk设定为启动区。一个硬盘上最多可以有4个主分区,而扩展分区上可以划分出多个逻辑驱动器。这些逻辑驱动器没有独立的引导块,不能用fdisk设定为启动区。


分区设置参考

分区设置如下

第一次分区—根分区:
根分区也就是 / 分区,相当于Windows系统的C盘。在Linux系统里,/是最上层目录,其实就是一个根目录。

挂载点:“/
大小:100G
新分区的类型:主分区
新分区的位置:空间起始位置
用于:EXT4日志文件系统
第一次分区完毕


第二次分区:

“空闲”处,继续点“+”,如下设置,
挂载点:(不设置)
Swap交换分区:128G,这里设置为何内存一样,据说小于16G的内存,就设置成内存的1.5-2倍。
新分区的类型:逻辑分区
新分区的位置:空间起始位置
用于:交换空间
第二次分区完毕。

SWAP分区也叫交换分区,就是LINUX下的虚拟内存分区。
它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用。


第三次分区引导分区:

引导分区,也就是引导操作系统启动的程序所在的分区。/boot分区是系统启动所需要的文件。

“空闲”处,继续点“+”,如下设置,
挂载点:/boot 设置Ubuntu启动引导区。
大小:200MB(笔者暂时设置为200MB)
新分区的类型:逻辑分区
新分区的位置:空间起始位置
用于:EXT4日志文件系统
第三次分区完毕

第四次分区:

“空闲”处,继续点“+”,如下设置,
挂载点:/home ,用于存放我们用户的文件。
大小:(剩余全部空间,剩下显示多少,就多少)。
鉴于Imagenet,PASCAL VOC之类的大客户,建议500G,至少300G以上。
新分区的类型:逻辑分区
新分区的位置:空间起始位置
用于:EXT4日志文件系统
第四次分区完毕

分区设置完毕后,下方还有一项**“安装启动引导器的设备”**,重要的一点:记得将“安装启动引导器的设备”选择称为之前分配/boot的那个分区名。


UEFI 引导启动需要设置 ESP(EFI系统分区),切记!!!

UEFI的两种启动模式


☆☆☆☆☆☆☆☆☆☆安装前需要注意的问题:☆☆☆☆☆☆☆☆☆☆☆☆☆☆

a. 检查自己的GPU是否支持CUDA,linux可用以下命令来查看GPU型号:

lspci |grep –i nvidia

只要GPU型号可以在https://developer.nvidia.com/cuda-gpus找到,就是支持CUDA的

b. 检查自己的操作系统是不是CUDA支持的,可以输入以下命令:

uname -m && cat /etc/*release

x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION=“Ubuntu 16.04.2 LTS”
NAME=“Ubuntu”
VERSION=“16.04.2 LTS (Xenial Xerus)”
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME=“Ubuntu 16.04.2 LTS”
VERSION_ID=“16.04”
HOME_URL=“http://www.ubuntu.com/”
SUPPORT_URL=“http://help.ubuntu.com/”
BUG_REPORT_URL=“http://bugs.launchpad.net/ubuntu/”
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

uname -r

4.8.0-52-generic

03:00.0 3D controller: NVIDIA Corporation GK110BGL [Tesla K40c] (rev a1)
04:00.0 VGA compatible controller: NVIDIA Corporation GK110GL [Quadro K5200] (rev a1)
04:00.1 Audio device: NVIDIA Corporation GK110 HDMI Audio (rev a1)

CUDA支持的操作系统在以下网址可以找到http://docs.nvidia.com/cuda/cuda-toolkit-release-notes/#overview

CUDA-8支持的Linux系统

c. 检查操作系统是否安装了gcc,可用以下命令

gcc --version

很多操作系统都预装有gcc,如果你的没有就先安装一下。有时gcc已经预装,但是gcc --version执行后没有显示信息,可以执行下面命令来查询系统的gcc信息。

cat /proc/version

d. 去https://developer.nvidia.com/cuda-downloads下载最新版的CUDA,目前是7.5的。这里注意选择与自己机器和操作系统相匹配的(比如我的是64位的Ubuntu15.04)。友情提醒:文件有点大,大概1G,网速不好的同学请耐心等待。

e. 验证下载的CUDA是否有效:

md5sum 安装包名字

例如:

md5sum cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64.deb

执行完上述命令后会出现一串md5值,例如我的是: 0a02f6efe0ba2b8dea3e7654ee0951d7,看看https://developer.nvidia.com/cuda-downloads/checksums列表中是否能找到你的md5值,如果不能找到,那就说明之前下的安装包有问题,要重新下载。

第二部分:NVidia CUDA Toolkit的安装(*.deb方法)

特别备注:Cuda7.5包含CUDA所需的所有驱动,不存在兼容的问题,所以没有必要去专门安装Nvidia的驱动。

PS:特别推荐*.deb的方法,目前已提供离线版的deb文件,该方法比较简单,不需要切换到tty模式,因此不再提供原来的*.run安装方法,这里以CUDA 7.5为例。

对于出现循环登录界面的问题,所以需要禁用 nouveau驱动

详细参考 ubuntu16.04下NVIDIA GTX965M显卡驱动PPA安装

#禁用nouveau驱动

Ubuntu系统集成的显卡驱动程序是nouveau,我们需要先将nouveau从linux内核卸载掉才能安装NVIDIA官方驱动。将nouveau添加到黑名单blacklist.conf中,(关于blacklist参见 《禁用Linux内核驱动》),linux启动时,就不会加载nouveau.
因为nouveau驱动的影响,ubuntu安装后无法登入桌面,所以在ubuntu系统启动显示登录界面后,需要按ctrl+alt+F1进入tty文本模式进入下面的操作

由于blacklist.conf文件的属性不允许修改。所以需要先修改文件属性。
查看属性

ll /etc/modprobe.d/blacklist.conf

修改属性

sudo chmod 666 /etc/modprobe.d/blacklist.conf

用vi编辑器打开

sudo vi /etc/modprobe.d/blacklist.conf

在文件末尾添加如下几行:

 blacklist vga16fbblacklist nouveaublacklist rivafbblacklist rivatvblacklist nvidiafb

修改并保存文件后,记得把文件属性复原:

sudo chmod 644 /etc/modprobe.d/blacklist.conf

再更新一下内核

sudo update-initramfs -u

关于update-initramfs命令的用途,参见 《initramfs 简介,一个新的 initial RAM disks 模型》
修改后需要重启系统。
重启系统确认nouveau是否已经被屏蔽掉,使用lsmod命令查看:

lsmod | grep nouveau

lsmod命令用于显示已经加载到内核中的模块的状态信息,参见《lsmod命令》

一、CUDA Repository

获取CUDA安装包,安装包请自行去NVidia官网下载。(https://developer.nvidia.com/cuda-downloads)

sudo dpkg -i cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64.deb
sudo apt-get update

二、CUDA Toolkit

sudo apt-get install -y cuda

#检查CUDA安装
重启一下系统,让NVIDIA GPU加载刚刚安装的驱动,重启完成之后运行

cat /proc/driver/nvidia/version

如果有如下显示,说明GPU驱动加载成功

NVRM version: NVIDIA UNIX x86_64 Kernel Module 375.39 Tue Jan 31 20:47:00 PST 2017
GCC version: gcc version 5.4.1 20160904 (Ubuntu 5.4.1-2ubuntu1~16.04)

Information about the cuda compiler driver

nvcc -V

nvcc: NVIDIA ® Cuda compiler driver
Copyright © 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61

查看NVIDIA驱动版本

sudo dpkg --list | grep nvidia-*
nvidia-smi  #查看GPU使用情况
nvidia-settings #设置GPU参数,比如风扇运转速度
sudo fuser -v /dev/nvidia* #查找占用GPU资源的PID
sudo lsof -n -w /dev/nvidia* #查找占用GPU资源的PID
sudo kill -9 ***(PID)  # 解除显存占用
#验证cuda
cd /usr/local/cuda/samples
sudo make ‐j8 
cd bin/x86_64/linux/release/
sudo ./deviceQuerysudo ./bandwidthTest#最后一行 result=pass表示通过~cat /usr/local/cuda/version.txt
# 检测cuda的版本

第三部分 Matlab安装和调试(以Matlab 2014a为例)

1.下载

由于该软件为商业软件,请大家自行寻找,安装学习,并确保不使用做商业目的,下载24小时删除…

2. 预准备

选择Mathworks.Matlab.R2014a.Unix.iso -右键 - 使用磁盘映像挂载器打开”,进入装载的虚拟光盘,拷贝全部文件至home/Matlab文件夹,复制Crack/install.jar至 home/Matlab/java/jar/并覆盖源文件

 sudo cp install.jar /home/Matlab/java/jar/

3. 授权安装文件夹

 chmod a+x Matlab -R

4. 进入/home/Matlab 安装

 sudo ./install

选项:不使用Internet安装
序列号: 12345-67890-12345-67890
默认路径:/usr/local/MATLAB/R2014a
勾选从默认启动路径创建符号链接(实现在任意位置运行matlab启动程序)
激活文件:license_405329_R2014a.lic
拷贝 /Crack/Linux 下的libmwservices.so至 /usr/local/MATLAB/R2014a/bin/glnxa64

sudo cp libmwservices.so /usr/local/MATLAB/R2014a/bin/glnxa64/

百度云盘的 matlab2015b安装情况类似


5.解决编译器gcc/g++版本问题

因为Ubuntu 15.04的gcc/g++版本是4.9.2,而Matlab 2014a(2015a)的版本是4.7.x所以在使用matla调用mex文件的时候,基本上都会报错,根据报错信息,考虑如下两步解决方案。
A. 降级安装gcc/g++版本为4.7.x
(a). 下载gcc/g++ 4.7.x

 sudo apt-get install -y gcc-4.7sudo apt-get install -y g++-4.7

(b). 链接gcc/g++实现降级

 cd /usr/binsudo rm gccsudo ln -s gcc-4.7 gccsudo rm g++sudo ln -s g++-4.7 g++

B. 暴力引用新版本GLIBCXX_3.4.20

sudo cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20 /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6.0.20

(libstdc++.so.6.0.20的版本,可能因为系统不同而不同,使用最新的就可以了。)
目录切换到 /usr/local/MATLAB/R2014a/sys/os/glnxa64/,非常重要!

 sudo mv libstdc++.so.6 libstdc++.so.6.backup

(仅仅是备份,可以不备份,直接删除)。

 sudo ln -s libstdc++.so.6.0.20 libstdc++.so.6sudo ldconfig -v

通过命令

strings /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6 |grep GLIBCXX

可以看一下,是否已经成功包含了GLIBCXX_3.4.20,如果已经存在,基本上就成功了。

6.编译Matlab用到的caffe文件(见第五部分)

第四部分 Caffe-Master的安装和测试

对于Caffe的安装严格遵照官网的要求来:http://caffe.berkeleyvision.org/installation.html

一、安装BLAS


这里可以选择(ATLAS,MKL或者OpenBLAS),三者的速度大致为MKL>OpenBLAS>ATLAS,推荐采用MKL。我这里使用MKL,首先下载并安装英特尔®数学内核库 Linux*版MKL(Intel® Parallel Studio XE Cluster Edition for Linux 2016),下载链接是:https://software.intel.com/en-us/intel-education-offerings,使用学生身份(邮件 + 学校)下载Student版,填好各种信息,可以直接下载,同时会给你一个邮件告知序列号。下载完之后,要把文件解压到home文件夹(或直接把tar.gz文件拷贝到home文件夹,为了节省空间,安装完记得把压缩文件给删除喔~),或者其他的ext4的文件系统中。

接下来是安装过程,先授权,然后安装:
tar zxvf parallel_studio_xe_2016.tar.gz
(如果你是直接拷贝压缩文件过来的)

 chmod a+x parallel_studio_xe_2016 -Rcd parallel_studio_xe_2016 -Rsudo sh install_GUI.sh

PS: 安装的时候,建议使用root权限安装,过程中会要求输入Linux的root口令。


若出现有32位的库没有找到的问题,32-bit libraries not found

sudo apt-get install g++-multilib

二、MKL与CUDA的环境设置

1. 新建intel_mkl.conf,并编辑之:

sudo gedit /etc/ld.so.conf.d/intel_mkl.conf

添加下列code

/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64

2. 新建cuda.conf,并编辑之:

 sudo gedit /etc/ld.so.conf.d/cuda.conf

添加下列code

/usr/local/cuda/lib64
/lib

3. 完成lib文件的链接操作,执行:

sudo ldconfig -v

**采用OpenBLAS,OpenBLAS是高性能多核BLAS库,**其官网:http://www.openblas.net/

$ sudo apt-get install -y gfortran %需安装gfortran来编译

安装步骤

cd OpenBLAS
make 
sudo make install
make -j 40 -f Makefile.install install
make[1]: Entering directory '/home/bids/softwares/OpenBLAS'
Generating openblas_config.h in /opt/OpenBLAS/include
Generating f77blas.h in /opt/OpenBLAS/include
Generating cblas.h in /opt/OpenBLAS/include
Copying LAPACKE header files to /opt/OpenBLAS/include
Copying the static library to /opt/OpenBLAS/lib
Copying the shared library to /opt/OpenBLAS/lib
Generating OpenBLASConfig.cmake in /opt/OpenBLAS/lib/cmake/openblas
Install OK!
make[1]: Leaving directory '/home/bids/softwares/OpenBLAS'

修改Caffe的Makefile.config

BLAS := open
BLAS_INCLUDE :=  /opt/OpenBLAS/include
BLAS_LIB := /opt/OpenBLAS/lib

export环境变量

export OPENBLAS_NUM_THREADS=4
export LD_LIBRARY_PATH=/opt/OpenBLAS/lib/:$LD_LIBRARY_PATH

接下来就可以使用caffe的多cpu进行计算了


三、安装OpenCV 3.0.0

1. 下载并编译OpenCV
(官网原版OpenCV:http://opencv.org/),或者使用我提供的修改版的安装包 Install-OpenCV-master https://github.com/jayrambhia/Install-OpenCV(下面的安装方式使用该包完成,安装包修改了dependencies.sh文件并增加了OpenCV 3.0.0的安装文件)

2. 切换到文件保存的文件夹,然后安装依赖项:

cd Install-OpenCV-master
sudo sh Ubuntu/dependencies.sh

3. 切换目录Ubuntu/3.0:

cd Ubuntu/3.0
sudo sh opencv3_0_0.sh

保证网络畅通,因为软件需要联网这里时间较长,请耐心等待。


#终端安装

sudo apt-get install libopencv-dev python-opencv

源码编译安装

sudo apt install build-essential
sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

#clone压缩包的文件夹,把源码拿下来
git clone opencv/opencv

然后进入OpenCV文件夹:

mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

准备完毕,直接make并安装:

make
sudo make install

四、安装其他依赖项

**1. Google Logging Library(glog),**下载地址:https://code.google.com/p/google-glog/,然后解压安装:

tar zxvf glog-0.3.3.tar.gz
cd glog-0.3.3
./configure
make
sudo make install

如果没有权限就chmod a+x glog-0.3.3 -R ,或者索性 chmod 777 glog-0.3.3 -R ,装完之后,这个文件夹就可以kill了。

2. 其他依赖项,确保都成功

sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler protobuf-c-compiler protobuf-compiler

五、安装Caffe并测试

1. 安装pycaffe必须的一些依赖项:

sudo apt-get install -y python-yaml python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags Cython ipython ipython-notebook python-imdbpy python-pip liblmdb-devsudo pip install lmdb 

备注:关于python模块的特别说明
具体详情大家可以去下面链接去查阅
easy caffe 配置
python最蛋疼的一是缩进,二是包管理。
不同的包管理工具安装的包之间可能是不兼容的,出现互相依赖的时候,就特别麻烦了,而且卸载还是不干净的。
使用pip这个包管理工具安装pithon模块。你只要熟悉几个简单的命令:

pip search <package name> #搜索某包  
pip list #列出已安装的包  
pip install <some package> #安装一个包    
pip uninstall <installed package> #卸载  

有个比较好用的命令:pip install -r requirements.txt,在requirements.txt填上所有要安装的模块名,pip会install one by one。
编辑 requirements.txt,添加所需的模块

Cython>=0.19.2
numpy>=1.10.2
scipy>=0.13.3
scikit-image>=0.11.3
scikit-learn>=0.17
matplotlib>=1.5.0
pyopencv
ipython>=3.0.0
h5py>=2.2.0
leveldb>=0.191
lmdb
networkx>=1.8.1
nose>=1.3.0
pandas>=0.12.0
python-dateutil>=1.4,<2
protobuf>=2.5.0
python-gflags>=2.0
pyyaml>=3.10
Pillow>=2.3.0
six>=1.1.0
pyzmq
singledispatch
backports_abc
certifi
jsonschema
jupyter
qtawesome
pydot
notebook
sklearn 
skimage   
imdbpy
liblmdv-dev

一定要验证python 安装包依赖库

cd caffe-master/python
for  req  in  $(cat  requirements.txt);  do  pip  install  $req;  done

终端可能会有很多红字,那么在运行下一句

for  req  in  $(cat  requirements.txt);  do  sudo  -H  pip  install $req --upgrade;  done 

2. 安装配置nVidia cuDNN加速Caffe模型运算

a. 安装前请去先官网https://developer.nvidia.com/cudnn下载最新的cuDNN (cudnn-7.0-linux-x64-v4),建议安装v4

tar zxvf cudnn-7.0-linux-x64-v4.0-rc.tgz
cd cuda
sudo cp include/cudnn.h /usr/local/include
sudo cp lib64/libcudnn.* /usr/local/lib

b. 链接cuDNN的库文件

$ sudo ln -sf /usr/local/lib/libcudnn.so.4.0.4 /usr/local/lib/libcudnn.so.4$ sudo ln -sf /usr/local/lib/libcudnn.so.4 /usr/local/lib/libcudnn.so$ sudo ldconfig -v


特别备注:a. 安装前请去先官网下载最新的cuDNN (cudnn-7.0-linux-x64-v4),建议安装v4,v4是运行caffe是没有问题的,但是若此后还需要安装 Theano,V4就不行了,在测试Theano会出现下列问题。详情见

Using gpu device 0: Tesla K40c (CNMeM is disabled, cuDNN Version is too old. Update to v5, was 4004.)

所以最后的建议还是安装V5
a. 安装前请去先官网https://developer.nvidia.com/cudnn下载最新的cuDNN (cudnn-7.5-linux-x64-v5.0),建议安装v5

tar zxvf cudnn-7.5-linux-x64-v5.0-ga.tgz
cd cuda
sudo cp include/cudnn.h /usr/local/include
sudo cp lib64/libcudnn.* /usr/local/lib

b. 链接cuDNN的库文件

$ sudo ln -sf /usr/local/lib/libcudnn.so.5.0.5 /usr/local/lib/libcudnn.so.5$ sudo ln -sf /usr/local/lib/libcudnn.so.5 /usr/local/lib/libcudnn.so$ sudo ldconfig -v
#验证cudnn
cat /usr/local /include/cudnn.h | grep CUDNN_MAJOR -A 2

3.切换到Caffe-master的文件夹,生成Makefile.config配置文件,执行:

cd caffe-master
cp Makefile.config.example Makefile.config

4. 配置Makefile.config文件(仅列出修改部分)

sudo gedit Makefile.config

用来修改配置Makefile.config
a. 启用CUDNN,去掉"#"

USE_CUDNN := 1

b. 配置一些引用文件(增加部分主要是解决新版本下,HDF5的路径问题)

INCLUDE_DIRS := $(PYTHON_INCLUDE)/usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/includeLIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

c. 启用Intel Parallel Studio XE 2016

BLAS := mkl

d. 配置路径,实现caffe对Python和Matlab接口的支持

PYTHON_LIB := /usr/local/lib

MATLAB_DIR := /usr/local/MATLAB/R2014a

c. 启用OpenCV 3.0,去掉"#"

OPENCV_VERSION =3

5. 编译caffe-master!!!"-j8"是使用CPU的多核进行编译,可以极大地加速编译的速度,建议使用。

特别备注:最好在编译caffe-master之前进行重启电脑,因为显卡驱动装完需要重启才能生效,否则有时会出现编译错误.

cd caffe-master
make all -j16
make test -j16
make runtest -j16

6.编译Python和Matlab用到的caffe文件

make pycaffe -j16
make matcaffe -j16

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

备注:安装BLAS,可以选择ATLAS

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

如果不用 MKL的话,把上面4条命令跑一遍,然后装好CUDA,之后执行

mkdir build
cd build
cmake ..
make all
make test
make runtest

这样配置比MKL更加便捷。

安装和配置cuDNN
把cudnn解压之后,把对应的文件拷贝到 cuda 的对应的 include 和 lib64目录下,然后进入到build目录,在该目录下

cmake .. make -j8 make runtest -j8 

注意:-j8 是指使用几个线程来同时编译, 可以加快速度, j后面的数字可以根据CPU core的个数来决定, 我的CPU使8核, 所以-j8.
这样直接进入测试阶段即可。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

caffe在服务器上的copy使用

caffe的安装比较复杂,因此如果服务器上有其他用户装好配置好了caffe,我们可以拷贝过来使用,方法如下:

1. 新建自己的用户

sudo adduser newaccount

2. 将别的用户的caffe根目录的包拷到自己的用户

cp -r  ./caffe-master /home/newaccount

3 . 重新编译

make clean
make all -j16
make test -j16
make runtest -j16

六、使用MNIST数据集进行测试

Caffe默认情况会安装在CAFFEROOT,就是解压到那个目录,例如:CAFFE_ROOT,就是解压到那个目录,例如:CAFFEROOThome/username/caffe-master,所以下面的工作,默认已经切换到了该工作目录。下面的工作主要是,用于测试Caffe是否工作正常,不做详细评估。具体设置请参考官网:http://caffe.berkeleyvision.org/gathered/examples/mnist.html

mnist数据训练样本为60000张,测试样本为10000张,每个样本为28*28大小的黑白图片,手写数字为0-9,因此分为10类。

1. 数据预处理

 sh data/mnist/get_mnist.sh

运行成功后,在 data/mnist/目录下有四个文件:

train-images-idx3-ubyte:  训练集样本 (9912422 bytes) 
train-labels-idx1-ubyte:  训练集对应标注 (28881 bytes) 
t10k-images-idx3-ubyte:   测试集图片 (1648877 bytes) 
t10k-labels-idx1-ubyte:   测试集对应标注 (4542 bytes)

**2. 重建lmdb文件。**Caffe支持多种数据格式输入网络,包括Image(.jpg, .png等),leveldb,lmdb,HDF5等,根据自己需要选择不同输入吧。

sh examples/mnist/create_mnist.sh

生成mnist-train-lmdb和 mnist-train-lmdb文件夹,这里包含了lmdb格式的数据集,存放的data.mdb和lock.mdb

3. 训练mnist

sh examples/mnist/train_lenet.sh

至此,Caffe安装的所有步骤完结,下面是一组简单的数据对比,实验来源于MNIST数据集,主要是考察一下不同系统下CPU和GPU的性能。可以看到明显的差别了,虽然MNIST数据集很简单,相信复杂得数据集,差别会更大,Ubuntu+GPU是唯一的选择了。

第五部分增加新层(以Fast RCNN提出的 ROIPooling layer为例)

已配置和需要修改的文件,参见百度云盘:百度云盘链接: http://pan.baidu.com/s/1hqCWTF2密码: 8qw8
该教程仅为添加方案,切勿直接覆盖原来的文件,将云盘中下载的文件响应的内容覆盖到合适的位置即可。

1. 添加层引用:

编辑文件:$ include/vision_layers.hpp,将class ROIPoolingLayer添加到合适的位置(参考其他层)

2. 创建层文件

创建roi_pooling_layer.cpp和 roi_pooling_layer.cu文件到目录 $ src/layer
创建test_roi_pooling_layer.cpp到目录 $ src/test

3. 注册新创建的层

编辑文件:$ src/proto/caffe.proto
a. 在message LayerParamete中注册 ROIPoolingParameter层
b. 在最后,添加ROI层的参数:ROIPoolingParameter

测试二 cifar10实例

根据下载的caffe-master中的examples做一些测试,以cifar10为例。

cifar10数据训练样本50000张,测试样本10000张,每张为32*32的彩色三通道图片,共分为10类。

examples下cifar10里,有readme.md。注意这里的$CAFFE_ROOT就是caffe-master解压后路径。以下均是在该目录下操作:

sh ./data/cifar10/get_cifar10.sh  #(下载数据集)

运行成功后,会在 data/cifar10/文件夹下生成一堆bin文件。

sh ./examples/cifar10/create_cifar10.sh #转换数据格式为lmdb

转换成功后,会在 examples/cifar10/文件夹下生成两个文件夹,cifar10_train_lmdb和cifar10_test_lmdb

为了节省时间,我们进行快速训练(train_quick),训练分为两个阶段,第一个阶段(迭代4000次)调用配置文件cifar10_quick_solver.prototxt, 学习率(base_lr)为0.001

第二阶段(迭代1000次)调用配置文件cifar10_quick_solver_lr1.prototxt, 学习率(base_lr)为0.0001

前后两个配置文件就是学习率(base_lr)和最大迭代次数(max_iter)不一样,其它都是一样。如果你对配置文件比较熟悉以后,实际上是可以将两个配置文件合二为一的,设置lr_policy为multistep就可以了。

base_lr: 0.001
momentum: 0.9
weight_decay: 0.004
lr_policy: "multistep"
gamma: 0.1
stepvalue: 4000
stepvalue: 5000

运行例子

sh ./examples/cifar10/train_quick.sh  #(测试用例)

测试结果如下:
这里写图片描述
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
因版本问题,需要卸载CUDA7.0,安装CUDA6.5

一,卸载CUDA 7.0

在目录:

 /usr/local/cuda-7.0/bin

有CUDA自带的卸载工具uninstall_cuda_toolkit_7.0.pl,使用命令:

 sudo ./uninstall_cuda_toolkit_7.0.pl

以上卸载命令是针对于.run方式安装CUDA的

若是其他的安装方式,比如.deb 可执行以下命令来卸载

sudo apt-get --purge remove nvidia*

这样就会删除已经配置好的驱动和CUDA。

二,安装NVIDIA驱动

我本机上的NVIDIA驱动是安装CUDA 7.0的时候安装包自带的,版本是346,CUDA 6.5.14目前最高仅支持340版驱动, 343, 346版驱动暂不支持,所以在安装CUDA之前需要先把原来的驱动卸载。

1,卸载原来的NVIDIA驱动

在安装新的NVIDIA驱动之前,必须首先把原来的驱动卸载干净,否则在运行samples下的deviceQuery程序的时候会报如下错误:

cudaGetDeviceCount returned 38
-> no CUDA-capable device is detected

这个错误说明系统中有多个显卡驱动,CUDA程序不知道如何选择——当然也有可能是你的电脑上没有NVIDIA显卡。

这里多说一句:上述命令如果返回的错误代码是30,说明你权限不够,试试加上sudo吧。

2.安装前需要注意的问题:

a. 检查自己的GPU是否支持CUDA,linux可用以下命令来查看GPU型号:

lspci | grep –i nvidia

只要GPU型号可以在https://developer.nvidia.com/cuda-gpus找到,就是支持CUDA的

b. 检查自己的操作系统是不是CUDA支持的,可以输入以下命令:

uname -m && cat /etc/*release

CUDA支持的操作系统在以下网址可以找到http://docs.nvidia.com/cuda/cuda-toolkit-release-notes/#overview

c. 检查操作系统是否安装了gcc,可用以下命令

gcc --version

很多操作系统都预装有gcc,如果你的没有就先安装一下。
或者可以执行下面命令来查询系统的信息。

cat /proc/version

d. 去https://developer.nvidia.com/cuda-downloads下载最新版的CUDA,目前是7.5的。这里注意选择与自己机器和操作系统相匹配的(比如我的是64位的Ubuntu15.04)。友情提醒:文件有点大,大概1G,网速不好的同学请耐心等待。

e. 验证下载的CUDA是否有效:

md5sum 安装包名字

例如:

md5sum cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64.deb

执行完上述命令后会出现一串md5值,例如我的是: 0a02f6efe0ba2b8dea3e7654ee0951d7,看看https://developer.nvidia.com/cuda-downloads/checksums列表中是否能找到你的md5值,如果不能找到,那就说明之前下的安装包有问题,要重新下载。

f. 处理版本冲突问题,第一次安装可以跳过这点。如果之前有装过NVIDIA驱动和CUDA的话,要卸载干净,具体卸载方法参见

sudo apt-get --purge remove nvidia*

关闭图形环境
卸载NVIDIA驱动的步骤如下按 ctrl+alt+F1 进入tty, 登录tty后输入如下命令:

 sudo service lightdm stop

该命令会关闭lightdm。如果你使用 gdm或者其他的desktop manager, 请在安装NVIDIA驱动前关闭他。

sudo /etc/init.d/kdm stop  #适用于Kubuntu
sudo /etc/init.d/gdm stop  #适用于Ubuntu

使用如下命令卸载NVIDIA驱动:

sudo apt-get remove nvidia*

这条命令会卸载与NVIDIA相关的一切,注意如果此时重新启动电脑可能会导致无法进入系统。
也有另一种卸载方式:

sudo apt-get --purge remove nvidia-*
sudo apt-get install ubuntu-desktop
sudo rm /etc/X11/xorg.conf
echo 'nouveau' | sudo tee -a /etc/modules

效果差不多。卸载完后可以安装新的驱动

3,安装新的NVIDIA驱动(仅仅供参考,不需要执行本部分)

**单独安装NVIDIA驱动的方式是十分愚蠢的,因为CUDA安装包会自带NVIDIA驱动,而且不会产生版本不兼容的问题——这是肯定的。所以这一步可以跳过直接去安装CUDA程序就行了。**这里还是写下安装方法以备参考。(以下步骤都是在tty界面下进行的)

安装build-essentials
安装开发所需要的一些基本包

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

#寻找合适的驱动版本

ubuntu-drivers devices

安装NVIDIA驱动 (3.4.0)
输入下列命令添加驱动源Graphic Drivers PPA
sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update

安装340版驱动 (CUDA 6.5.14目前最高仅支持340版驱动, 343, 346版驱动暂不支持)

sudo apt-get install nvidia-340

根据网速的不同,时间可能需要很久(真的很久,有可能会从晚上下载到天亮,所以说这种方法太蠢,当然网速快例外)

安装完NVIDIA驱动后, 继续安装下列包 (否则在运行sample时会报错)

sudo apt-get install nvidia-340-uvm

这个也可能需要很久很久·····

接下来把NVIDIA模块加到Linux内核里面

sudo modprobe nvidia-uvm

启动图形环境

sudo /etc/init.d/kdm restart  #适用于Kubuntu
sudo /etc/init.d/gdm restart #适用于Ubuntu
sudo start lightdm #适用于Ubuntu

安装完成后 reboot.


禁用nouveau驱动

因为系统中不光有NVIDIA显卡还有一块集成显卡能正常驱动,所以经过禁用nouveau驱动后,再次重启,已经系统可以正常登录进入桌面了。

按Ctrl+Alt+F1进入命令提示符,新建一个黑名单文件

sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

输入

blacklist nouveau
options nouveau modset=0

执行

sudo update-initramfs -u

执行 lspci | grep nouveau查看是否有内容

lspci | grep nouveau

如果没有内容 ,说明禁用成功,如果有内容,就重启一下再查看。

禁用nouveau驱动作用就是禁止使用ubuntu自带的显卡驱动,而改用nivida驱动,即安装gpu驱动。在安装cuda的过程中,会自动安装nvidia显卡驱动。终端执行了sudo service lightdm stop后就弹出一个黑屏,这是正常现象,因为停止了lightdm。


三. 安装CUDA 6.5

1,首先,安装CUDA

下载CUDA 6.5. 地址:https://developer.nvidia.com/cuda-toolkit-65
注意选择对应的操作系统,然后安装包有DEB/RUN两种格式的,本文采用的安装方法使用RUN格式,单击既可以直接下载;我使用的的是Ubuntu14.04版本、格式是RUN

下载后,先提高权限到可执行(方便后面的安装):

sudo chmod +x cuda_6.5.14_linux_64.run

接下来可以直接使用下面的命令直接安装:

sudo ./cuda_6.5.14_linux_64.run

会将NVIDIA驱动、CUDA 6.5软件、CUDA samples全部安装,安装过程中提示安装路径什么的直接默认就好(默认路径才是王道啊)

加环境变量

安装完成后需要在/etc/profile中添加环境变量, 在文件最后添加:

PATH=/usr/local/cuda-6.5/bin:$PATH
export PATH

保存后, 执行下列命令, 使环境变量立即生效

source /etc/profile

添加lib库路径

在 /etc/ld.so.conf.d/加入文件 cuda.conf, 内容如下

/usr/local/cuda-6.5/lib64

执行下列命令使之立刻生效

sudo ldconfig

编辑文件 /etc/profile,添加下面这行:

export LD_LIBRARY_PATH=/usr/local/cuda-6.5/lib64:$LD_LIBRARY_PATH

下面验证安装结果

a. 验证驱动的版本,和上述gcc类似,就是验证驱动和有没有问题

cat /proc/driver/nvidia/version

b. 编译例子

先看一下编译器版本,执行

nvcc –V

不出意外,这里会提示nvcc没有安装,其实就是之前装的NVIDIA-CUDA-Toolkit的编译器没有安装完整,根据提示安装就好:

sudo apt-get install nvidia-cuda-toolkit

这个安装也需要很长时间,请耐心等待。安装完后就可以编译例子了,例子默认安装在/home/username/NVIDIA_CUDA-6.5_Samples,进入这个目录,执行

  make

该过程也比较漫长,请耐心等待。

c. Running the binaries.

全部编译玩后,进入/home/username/NVIDIA_CUDA-6.5_Samples/bin/x86_64/linux/release,执行

sudo ./deviceQuery

好了,至此就完成了CUDA 7.0的卸载与CUDA 6.0的安装


#参考文献


Ubuntu16.04 + 1080Ti深度学习环境配置教程

caffe + Ubuntu15.04 + CUDA7.5
第一次安装可直接参考如下网页
http://ouxinyu.github.io/Blogs/20151108001.html

caffe + Ubuntu15.04 + CUDA7.0
http://blog.csdn.net/helei001/article/details/46950853
http://ouxinyu.github.io/Blogs/20140723001.html

值得仔细阅读的安装流程(可参考)
http://blog.csdn.net/u012208159/article/details/47018095

Caffe & Theano安装教程——ubuntu16.04系统

caffe配置Ubuntu 15.04+CUDA 7.5+MKL+Opencv3.0+CUDNN

Caffe安装手记【Ubuntu15.04、CUDA7、OpenBlas、OpenCV、cuDNN】

caffe 上OpenBLAS的安装使用

卸载旧版本安装新版本可参考如下网页
http://blog.csdn.net/FIELDOFFIER/article/details/50354607
http://wiki.ubuntu.org.cn/NVIDIA

Ubuntu 14.04 CUDA6.5
http://www.datakit.cn/blog/2015/01/05/Ubuntu14.04_cuda6.5_caffe.html
http://www.th7.cn/system/lin/201601/149175.shtml
http://blog.sciencenet.cn/blog-1583812-841855.html
http://www.cnblogs.com/shouhuxianjian/articles/4565503.html
http://blog.cvmarcher.com/posts/2015/05/14/ubuntu-14-04-problem/
http://blog.sina.com.cn/s/blog_9db078090102vdvx.html
http://blog.csdn.net/wangchuansnnu/article/details/44180979
http://www.jianshu.com/p/b88bbfa0f435

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET MVC Action向视图传值之匿名类型

在使用ASP.NET MVC过程中想必大家都有遇到过一个问题就是我们的Action如何向视图传递匿名类型的值呢&#xff0c;如果不做特殊处理则无法实现。 接下来我们来看一个示例&#xff1a; 在我们的控制中&#xff1a; using System.Collections.Generic; using System.Web.Mvc;names…

2015伦敦深度学习峰会笔记(转载)

摘要&#xff1a;在伦敦举行的第三届深度学习峰会由RE.WORK主办&#xff0c;汇集了从工业领域到学术领域不同背景的专业人士&#xff0c;本文是该峰会第一天的笔记。包括Koray Kavukcuoglu、Sander Dieleman等知名深度学习专家分享了自己的经验。上周&#xff0c;我有机会参加在…

Awesome Deep Vision

本文转自&#xff1a;https://github.com/kjw0612/awesome-deep-vision http://jiwonkim.org/awesome-deep-vision/ A curated list of deep learning resources for computer vision, inspired by awesome-php and awesome-computer-vision. Maintainers - Jiwon Kim, Heesoo …

caffe框架翻译-理解(转载)

本文转自&#xff1a; http://dirlt.com/caffe.html http://blog.csdn.net/songyu0120/article/details/468170851 caffe http://caffe.berkeleyvision.org/ 1.1 setup 安装需要下面这些组件。这些组件都可以通过apt-get获得。 libgoogle-glog-dev # gloglibgflags-dev # gfla…

Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案

Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案 说明&#xff1a;Java生鲜电商平台中由于采用了微服务架构进行业务的处理&#xff0c;买家&#xff0c;卖家&#xff0c;配送&#xff0c;销售&#xff0c;供应商等进行服务化&#xff0c;但是不可避免存在分布式事…

【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)

本文转自&#xff1a;http://mp.weixin.qq.com/s?__bizMzI3MTA0MTk1MA&mid401958262&idx1&sn707f228cf5779a31f0933af903516ba6&scene1&srcid0121zzdeFPtgoRoEviZ3LZDG#rd 译者&#xff1a;张巨岩 王婉婷 李宏菲 戴秋池 这是 Quora 的最新节目&#xf…

基础js逆向练习-登录密码破解(js逆向)

练习平台&#xff1a;逆向账号密码 https://login1.scrape.center/ 直接打开平台&#xff0c;输入密码账号&#xff0c;抓包找到加密的参数携带的位置&#xff0c;这边我们找到的是一个叫token的加密参数&#xff0c;这个参数的携带是一个密文 我们首先考虑一下搜索这个加密的…

python之socket

socket套接字 什么叫socket socket是处于应用层与传输层之间的抽象层,他是一组操作起来非常简单的接口(接受数据)此接口接受数据之后,交由操作系统.socket在python中就是一个模块. socket两个分类 基于文件类型的套接字家族 套接字家族的名字&#xff1a;AF_UNIX unix一切皆文件…

socket补充:通信循环、链接循环、远程操作及黏包现象

socket补充&#xff1a;通信循环、链接循环、远程操作及黏包现象 socket通信循环 server端&#xff1a; import socketphone socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone.bind((127.0.0.1,8080))phone.listen(5)conn, client_addr phone.accept() print(conn, cl…

Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理

Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明&#xff1a;Java生鲜电商平台中&#xff0c;我们将进一步理解微服务架构的核心要点和实现原理&#xff0c;为读者的实践提供微服务的设计模式&#xff0c;以期让微服务在读者正在工作的项目中起到积极的作用。…

ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试

想必大家之前在进行ASP.NET Web 应用程序开发期间都有用到过将我们的网站部署到IIS自定义主机域名并附加到进程进行调试。 那我们的ASP.NET Core Web 应用程序又是如何部署到我们的IIS上面进行调试的呢&#xff0c;接下来我们来简单介绍下&#xff1a; 一、安装IIS所需的Host扩…

ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)...

在正式进入主题之前我们来看下几个概念&#xff1a; 一、依赖倒置 依赖倒置是编程五大原则之一&#xff0c;即&#xff1a; 1、上层模块不应该依赖于下层模块&#xff0c;它们共同依赖于一个抽象。 2、抽象不能依赖于具体&#xff0c;具体依赖于抽象。 其中上层就是指使用者&am…

苹果电脑基本设置+Linux 命令+Android 实战集锦

本文微信公众号「AndroidTraveler」首发。 背景 大多数应届毕业生在大学期间使用的比较多的是 windows 电脑&#xff0c;因此初入职场如果拿到一台苹果电脑&#xff0c;可能一时间不能够很快的上手。基于此&#xff0c;这边出了系列视频&#xff0c;通过实际的演示让没使用过苹…

Mac中AndroidStudio没有找到Plugins的问题

我们在windows中都可以正常找到plugins 但是在Mac上AndroidStudio里 setting打开却没有plugins 正准备在Mac上搞一下flutter呢 我感觉智商受到了侮辱&#xff01; 这里其实是mac版本给我开了个玩笑 你可以按快捷键&#xff0c;你就可以找到 快捷键 command ‘,’ 没错就是comm…

进程和操作系统概述

进程和操作系统概述 进程的基础 程序和进程&#xff1a; 程序是一对静态的代码文件 进程是一个正在运行着的程序&#xff0c;抽象概念 进程由操作系统操控调用交于CPU运行 操作系统 1.管理控制协调计算机硬件和软件的关系 2.操作系统的作用&#xff1f; ​ 第一个作用&#xff…

对前端Jenkins自动化部署的研究

1. 安装 安装 Nginx 1.1去官网下直接下载&#xff0c;解压缩 start nginx就可以使了&#xff0c;常用命令&#xff1a; start nginx # 启动 nginx -s reload # 修改配置后重新加载生效 nginx -s reopen # 重新打开日志文件 nginx -t # 配置文件检测是否正确 1.2 安装Jenkins…

ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)...

在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入&#xff0c;本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入。 PS&#xff1a;本章将主要采用构造函数注入的方式&#xff0c;下一章将继续分享如何使之能够同…

Java过滤器与SpringMVC拦截器之间的关系与区别

今天学习和认识了一下&#xff0c;过滤器和SpringMVC的拦截器的区别&#xff0c;学到了不少的东西&#xff0c;以前一直以为拦截器就是过滤器实现的&#xff0c;现在想想还真是一种错误啊&#xff0c;而且看的比较粗浅&#xff0c;没有一个全局而又细致的认识&#xff0c;由于已…

二次幂权限设计

设置含有的权限如增删改查减为1,2,4,8,16 如果A包含增删改这5个权限&#xff0c;那A的值为1247 如果B包含增改查这5个权限&#xff0c;那A的值为14813 如果C包含增删改查减这5个权限&#xff0c;那A的值为12481631 7二进制为111,13的二进制为1101,31二进制为11111 1二进制为1&a…

使用putty在linux主机和windows主机之间拷贝文件(已测试可执行)

转载于&#xff0c;请点击 首先下载putty&#xff0c;putty下载地址zip&#xff0c; 解压zip发现里面有plink.exe pscp.exe psftp.exe putty.exe puttygen.exe puttytel.exe等可执行文件&#xff0c;如果只是想要链接主机做一些操作那么使用putty.exe&#xff0c;要想要上传 …