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,就是解壓到那個目錄,例如:CAFFER?OOThome/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.pswp.cn/news/247160.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247160.shtml
英文地址,請注明出處:http://en.pswp.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;我有機會參加在…

[webrtc] rtcp模塊中rtt時間計算

RTT指 round-trip time&#xff0c;即計算AB兩端的往返時延 這里可以分成兩個問題&#xff1a; 如何在A端估算A和B之間的RTT時間? 如何在B端估算A和B之間的RTT時間? 本文參考資料:rfc 3550rfc 3611webrtc issue https://code.google.com/p/webrtc/issues/detail?id1613以及解…

Deep learning Reading List

本文轉自&#xff1a; http://jmozah.github.io/links/ http://www.datakit.cn/blog/2014/12/31/Deep_learning_Reading_List.html 文章來自J Mohamed Zahoor的深度學習閱讀書單。 Following is a growing list of some of the materials i found on the web for Deep Learning…

商戶網站使用第三方支付的大致原理和實現

如果把商戶網站使用第三方支付平臺(比如支付寶)的原理搞清楚&#xff0c;那編程就變得簡單多了。 整個過程大致這樣&#xff1a; 1、商戶與支付寶簽約。2、在商戶網站購買商品&#xff0c;填寫數量&#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 …

GitHub 新出的 Actions 是什么? 用他做自動測試?

體驗分享 本文一個嘗鮮的體驗分享, 并沒有太復雜的技巧, 做了一個最少代碼的例子展示, 讓每個人都可以把action用起來, 如果路過的大牛有高級技巧請留言分享, 我會補充. 下面正文開始. 是什么? 是一個免費的操作系統容器(Linux/Windows/macOS), 我們可以讓他預裝開發環境(node…

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…

賈揚清分享_深度學習框架caffe

本文轉自&#xff1a; http://www.datakit.cn/blog/2015/06/12/online_meet_up_with_yangqing_jia.html http://www.ifight.me/187/ Caffe是一個清晰而高效的深度學習框架&#xff0c;其作者是博士畢業于UC Berkeley的 賈揚清&#xff0c;目前在Google工作。本文是根據機器學習…

iOS多線程理解

在iOS開發中&#xff0c;線程的創建與管理已經被Apple進行了很好的封裝&#xff0c;但是在開發者實際開發中會濫用GCD,導致整個代碼混亂不堪&#xff0c;因此在這里需要對iOS開發中的多線程開發進行整理。 1. 主線程完成耗時操作&#xff0c;會導致UI卡頓&#xff0c;因此耗時…

Java生鮮電商平臺-SpringCloud微服務架構中分布式事務解決方案

Java生鮮電商平臺-SpringCloud微服務架構中分布式事務解決方案 說明&#xff1a;Java生鮮電商平臺中由于采用了微服務架構進行業務的處理&#xff0c;買家&#xff0c;賣家&#xff0c;配送&#xff0c;銷售&#xff0c;供應商等進行服務化&#xff0c;但是不可避免存在分布式事…

批量提取 caffe 特征 (python, C++, Matlab)(待續)

本文參考如下&#xff1a; Instant Recognition with Caffe Extracting Features Caffe Python特征提取 caffe 練習4 —-利用python批量抽取caffe計算得到的特征——by 香蕉麥樂迪 caffe 練習3 用caffe提供的C函數批量抽取圖像特征——by 香蕉麥樂迪 caffe python批量抽…

iOS單例初步理解

iOS單例初步理解 在iOS開發中&#xff0c;系統自帶的框架中使用了很多單例&#xff0c;非常方便用戶&#xff08;開發者&#xff0c;使用比如[NSApplication sharedApplication] 等&#xff09;&#xff0c;在實際的開發中&#xff0c;有時候也需要設計單例對象&#xff0c;為…

python面向對象之類的成員

面向對象之類的成員 細分類的組成成員 類大致分為兩塊區域&#xff1a; 第一部分&#xff1a;靜態字段 第二部分&#xff1a;動態方法 class Animal:type_name "動物類" # 靜態變量&#xff08;靜態字段&#xff09;__feature "活的" # 私有靜態變量…

python元類、反射及雙線方法

元類、反射及雙線方法 元類 print(type(abc)) print(type(True)) print(type(100)) print(type([1, 2, 3])) print(type({name: 太白金星})) print(type((1,2,3))) print(type(object))class A:passprint(isinstance(object,type)) print(isinstance(A, type)) type元類是獲取該…

iOS中的多線程一般使用場景

在IOS開發中為提高程序的運行效率會將比較耗時的操作放在子線程中執行&#xff0c;iOS系統進程默認啟動一個主線程&#xff0c;用來響應用戶的手勢操作以及UI刷新&#xff0c;因此主線程又叫做UI線程。 前面的Blog說明了NSThread以及GCD處理并發線程以及線程安全&#xff08;線…

iOS中如何優化Cell中圖片的下載性能

在iOS開發中使用最為常見的是UITableView&#xff0c;其中UITabelViewCell中下載圖片&#xff0c;會影響用戶下拉刷新UI,導致卡頓&#xff0c;用戶體驗不好&#xff0c;在這篇blog中&#xff0c;我將以一個例子來說明如何優化UITableView下載圖片 1.使用懶加載方式&#xff0c…

【Yoshua Bengio 親自解答】機器學習 81 個問題及答案(最全收錄)

本文轉自&#xff1a;http://mp.weixin.qq.com/s?__bizMzI3MTA0MTk1MA&mid401958262&idx1&sn707f228cf5779a31f0933af903516ba6&scene1&srcid0121zzdeFPtgoRoEviZ3LZDG#rd 譯者&#xff1a;張巨巖 王婉婷 李宏菲 戴秋池 這是 Quora 的最新節目&#xf…

Java生鮮電商平臺-SpringCloud微服務架構中網絡請求性能優化與源碼解析

Java生鮮電商平臺-SpringCloud微服務架構中網絡請求性能優化與源碼解析 說明&#xff1a;Java生鮮電商平臺中&#xff0c;由于服務進行了拆分&#xff0c;很多的業務服務導致了請求的網絡延遲與性能消耗&#xff0c;對應的這些問題&#xff0c;我們應該如何進行網絡請求的優化與…

XCode7 創建framework

1.新建一個靜態庫工程. file→ new→ project, 彈出框中選擇iOS→ framework & library中的cocoa touch static library.點擊Next,輸入product name: TestFramework, 點擊Next→ 點擊Create. 2.刪除向導所生成工程中的Target. 點擊工程名→ 點擊TARGETS → 右鍵Delete. …