2017年3月23日木曜日

CentOS7にcuDNNをインストール

(参照http://qiita.com/skanai/items/0f0a9bdd7e04d55db981)
cuDNNは、Deep Neural NetworkをGPUで高速化するためのライブラリである。NVIDIAが提供する。インストール作業は手間じゃないけど、cuDNNをダウンロードするとき、NVIDIAのサイトでログインする必要がある(アカウントのない人は登録する)。

https://developer.nvidia.com/cudnn

ダウンロードしたディレクトリで解凍する。
$ tar xvfz cudnn-8.0-linux-x64-v5.1.tgz

解凍された一連のファイルを、CUDAをインストールしたディレクトリにコピーする。
$ cd cuda
$ sudo cp -a lib64/libcudnn* /usr/local/cuda/lib64/
$ sudo cp -a include/* /usr/local/cuda/include/
$ sudo ldconfig

2017年3月15日水曜日

CentOS7にCUDAをインストール

深層学習を行うとき、処理時間がかかります。そこで、GPUを使って処理の高速化を図ります。主要なGPUメーカはNVIDIAですが、そのNVIDIAはCUDAという並列処理用プログラミング統合環境を提供しています。ここでは、NVIDIA GeForce GTX 670が組み込まれたマシンのCentOS7に、CUDAを導入します。
(参照:http://qiita.com/dyoshiha/items/5214d1076f92c9c4646f)

$ lspci | grep -i nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 670] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GK104 HDMI Audio Controller (rev a1)
03:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 670] (rev a1)
03:00.1 Audio device: NVIDIA Corporation GK104 HDMI Audio Controller (rev a1)

カーネルのバージョンを確認します。
$ uname -r
3.10.0-514.10.2.el7.x86_64

GCCのバージョンを確認します。
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

kernelと同じversionのkernel-developmentとkernel-headersが必要とのこと。両パッケージをインストールします。

$ sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
 
$ yum list installed | grep kernel
abrt-addon-kerneloops.x86_64           2.1.11-45.el7.centos            @base   
kernel.x86_64                          3.10.0-514.10.2.el7             @updates
kernel-devel.x86_64                    3.10.0-514.10.2.el7             @updates
kernel-headers.x86_64                  3.10.0-514.10.2.el7             @updates
kernel-tools.x86_64                    3.10.0-514.10.2.el7             @updates
kernel-tools-libs.x86_64               3.10.0-514.10.2.el7             @updates

cuda_8.0.44_linux.runをダウンロードします。
$ wget https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda_8.0.44_linux-run

通常、NVIDIAのビデオカード用ドライバNouveauが導入されています。これを無効化した後、ランレベルを下げてからインストールします。

Nouveauの無効化
$ sudo vi /etc/modprobe.d/blacklist-nouveau.conf
として、以下を書き込みます。
blacklist nouveau
options nouveau modeset=0


文字入力のときは、"i"を入力してから文字を打ちこみます。
ファイルを保存して終了するときは、"Esc"キーを押しながら、":"キーを押します。その上で、"wq"と打ちこみます。これで、blacklist-nouveau.confというファイルの中に上記内容が書き込まれました。

$ cat /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0

ここで一回、再起動します。

以下のコマンドで、ランレベルを下げます。
$ systemctl set-default multi-user.target

CUDAをインストールします。
$ sudo sh cuda_8.0.44_linux.run

ランレベルを戻します。
$ systemctl set-default graphical.target

再起動します。
$ sudu reboot

PATHの設定を追加します。.bash_profileに以下を追加します。

CUDA_ROOT_DIR="/usr/local/cuda-8.0"
export CUDA_ROOT_DIR
PATH=$PATH:${CUDA_ROOT_DIR}/bin
export PATH
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CUDA_ROOT_DIR}/lib64/
export LD_LIBRARY_PATH

上記編集を加たら、以下のコマンドで有効にします。
$ source .bash_profile

CUDAのサンプルプログラムをコンパイルし、実行して、CUDAがインストールされていることを確認します。まず、freeglutをインストールします。
$ sudo yum install freeglut freeglut-devel
$ cd ~/NVIDIA_CUDA-8.0_Samples/
$ make
$ bin/x86_64/linux/release/deviceQuery
これで、GPUの情報を取得できればOKのはずです。


2017年3月8日水曜日

CentOS7にOpenCVをインストール

CentOS7にOpenCVをインストールします。
(http://qiita.com/twaka/items/7555785aea11879d6718を参照)

カーネルのバージョンを確認
$ uname -r
3.10.0-514.10.2.el7.x86_64
 
ビルドに必要なものをインストール 
$ sudo yum install autoconf automake cmake freetype-devel \
     gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel

OpenCVのインストール
$ git clone https://github.com/Itseez/opencv.git
$ cd opencv
$ mkdir build
$ cd build
$ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig cmake ..
$ make
$ sudo make install

ビルド時に FFmpeg の静的リンクがうまくいかないとき、動的リンクを行う。
(https://www.hiroom2.com/2016/06/01/centos-7-opencv-3-1%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B/参照)
$sed -i -e 's/libavformat\.a/libavformat.so/g' \
      -e 's/libavutil\.a/libavutil.so/g' \
      -e 's/libswscale\.a/libswscale.so/g' \
      -e 's/libavresample\.a/libavresample.so/g' \
      -e 's/libavcodec\.a/libavcodec.so/g' \
      cmake/OpenCVFindLibsVideo.cmake

サンプルの動作確認
$ cd ../samples
$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./cpp/cpp-example-example