1. AWSでDeepLearning用マシンを用意する
DeepLearningには、GPUを搭載したLinuxマシンが欠かせません。
しかし自分でGPUマシンを揃えるのは手間もお金もかかるので、
AWS(Amazon Web Service)で、お手軽に高性能なLinuxマシンを用意しましょう。
1.1. インスタンスの要件
インスタンス(AWS上のコンピュータ)には、以下の条件のものを採用します。
- AMI(OS): Ubuntu14.04 64-bit
- 通常のUbuntu
- インスタンスタイプ: g2.2xlarge
- GPU対応
- ストレージ: 100GB
- デフォルトの8GBでは不足
AMIではUbuntuの他にAmazon Linuxなどが選択できますが、
パッケージ関連でトラブルが多発するため、普通のUbuntuを使うのがおすすめです。
1.2. セキュリティグループの設定
デフォルトではSSH接続しか許可していないので、
AWS上でサーバを立ててもアクセスできません。pingも飛びません。
セキュリティグループからTCPプロトコルの8888ポートをアクセスできるように設定します。
1.3. Elastic IP の設定
AWSでは再起動のためにインスタンスの停止を行う必要がありますが、
インスタンスを停止するたびにパブリックIPが変わってしまいます。
そこでパブリックIPを固定するために、Elastic IPを登録して、インスタンスへと割り当てます。
1.4. インスタンスにSSH接続
SSHクライアントソフトTera Termをダウンロードしましょう。
インスタンスのパブリックIPに接続して、
ユーザー名「ubuntu」でインスタンス作成時にダウンロードできるキーを指定すると、
インスタンスのコンソールに入れます。
ここでUbuntuとしての操作を行います。
2. GPUを使えるようにする
ここまでで、AWS上にインスタンスを設置できました。
しかしインスタンスg2.2xlargeはGPUを搭載していますが、
デフォルトではGPUが使えるようにはなっていません。
そこで、以下のものをインストールして、GPUでDeepLearningができるようにします。
- NVIDIAのグラフィックドライバ
- CUDA-toolkit
- cuDNN
2.1. ドライバのインストール
2.1.1. パッケージのアップデート
まずはパッケージ管理システムをアップデートします。
aptitudeではなくapt-getを使用しても構いません。
$ sudo aptitude update
$ sudo aptitude -y full-upgrade
$ sudo aptitude install -y build-essential cmake
2.1.2. nouveauを停止
次に、グラフィックドライバを更新したいのですが、
まずはデフォルトのグラフィックドライバ(nouveau)を停止します。
以下の設定ファイルを作成したあと、
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
options nouveau modeset=0
bashから停止用のコマンドを叩きます。
$ sudo update-initramfs -u
ここでインスタンスを再起動します。
AWSだとrebootコマンドで再起動できないので、
AWSコンソールからインスタンスを一度停止し、再開させます。
2.1.3. グラフィックドライバのインストール
NVIDIAの公式ページからドライバをダウンロードします。
- 製品のタイプ: GRID
- 製品シリーズ: GRID Series
- 製品ファミリー: GRID K520
- オペレーティングシステム: Linux 64-bit
- 言語: Japanese
インスタンスに直接ダウンロード先からwgetしてもいいですし、tera termなどを介してダウンロードしたドライバを送信しても構いません。
ドライバのインストールは下記のコマンドで実行します。
$ sudo aptitude install -y linux-image-extra-virtual linux-source linux-headers-`uname -r`
$ wget 『ドライバ』.run
$ sudo sh 『ドライバ』.run -a --disable-nouveau
ここで再びインスタンスを再起動すると、ドライバのインストールが完了します。
2.2. CUDA-toolkitのインストール
CUDAの公式ページからcuda用のリポジトリをダウンロードします。
- Operating System: Linux
- Architecture: x86_64
- Distribution: Ubuntu
- Version: 14.04
- Installer Type: deb(network)
ダウンロードしたリポジトリを有効にすると、aptitude(apt-get)からcudaがインストールできるようになります。
$ wget 『リポジトリ』.deb
$ sudo dpkg -i 『リポジトリ』
$ sudo aptitude update
$ sudo aptitude install -y cuda
$ sudo reboot
2.3. cuDNNのインストール
2.3.1. cuDNNのダウンロード
NVIDIAのページからcuDNNをダウンロードします。
このダウンロードにはアカウント登録が必要なので、適当なアカウントを作成してください。
また、cuDNNのアーカイブファイルはwgetで直接取ってこれないので、
tera termなどを介してインスタンスに送る必要があります。
$ tar -xvf 『cnDNN』.tgz
$ cd cuda
$ sudo cp include/cudnn.h /usr/local/『cuda-X.X』/include/
$ sudo cp lib64/libcudnn* /usr/local/『cuda-X.X』/lib64
$ sudo ldconfig /usr/local/cuda/lib64
ldconfigに失敗する場合は、競合するファイルを削除します。
2.3.2. 環境変数の設定
ホームに戻り、.bashrcを書き換えます。
$ cd ~
$ vim .bashrc
export PATH=/usr/local/『cuda-X.X』/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/『cuda-X.X』/lib64:$LD_LIBRARY_PATH
最後に.bashrcの内容を有効にします。
$ source .bashrc
2.3.3. インストール成否の確認
以下のコマンドを打ってCUDAの情報が表示されていれば、
GPU用の設定が完了できています。
$ nvcc -V
3. Python関連をインストール
DeepLearningの実装には、Pythonを使います。
Pythonの数理計算用モジュールや、開発環境(jupyter notebook)を一括で入れるために、
Anacondaというディストロをインストールします。
その他に、DeepLearningライブラリのTheanoや、
画像処理用ライブラリのopenCVを使えるようにします。
3.1. Anacondaをインストール
$ wget https://3230d63b5fc54e62148e-c95ac804525aac4b6dba79b00b39d1d3.ssl.cf1.rackcdn.com/Anaconda3-2.4.1-Linux-x86_64.sh
$ bash Anaconda3-2.4.1-Linux-x86_64.sh
$ source .bashrc
shが通らなかったのでbashコマンドを使いました。
3.2. Theanoをインストール
$ sudo aptitude install git
$ pip install git+git://github.com/Theano/Theano.git --upgrade --no-deps
pipでgitを介さず直接Theanoを引っ張ってきた場合は、一部の古いモジュールでエラーを吐くことがあります。
3.3. openCVをインストール
Anacondaを使えば、openCVも1行でインストールできます。
$ conda install -c https://conda.binstar.org/menpo opencv3
4. GPUの動作確認
これまでのセットアップの成否を確認するには、
from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time
vlen = 10 * 30 * 768 # 10 x #cores x # threads per core
iters = 1000
rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in range(iters):
r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
print('Used the cpu')
else:
print('Used the gpu')
上のPythonスクリプト(gpu_check.py)を下記のコマンドで実行してみましょう。
$ THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python gpu_check.py
この実行結果が
Using gpu device 0: GeForce GTX 580
[GpuElemwise{exp,no_inplace}(<CudaNdarrayType(float32, vector)>), HostFromGpu(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.638810873032 seconds
Result is [ 1.23178029 1.61879349 1.52278066 ..., 2.20771813 2.29967761
1.62323296]
Used the gpu
となっていれば、TheanoがGPUで動いていることが確認できます。
5. セットアップ完了
以上で、AWSをDeepLearning用に設定することができました。
最後に、開発環境を立ち上げて、いざ人工知能を実装しましょう。
$ jupyter notebook --no-browser --ip="*"
参考文献
AWSへのグラフィックドライバドライバ・CUDAのインストール:
http://qiita.com/shinya_ohtani/items/f374ed0dd51737087369
cuDNNのインストール:
http://www.computervisionbytecnalia.com/es/2016/06/deep-learning-development-setup-for-ubuntu-16-04-xenial/
cuDNNの環境変数設定:
http://qiita.com/bohemian916/items/a48e6496b04bbbf09fb3
Anacondaのインストール:
http://morimori2008.web.fc2.com/contents/PCprograming/python/pythonAnaconda.html
Theanoのインストール:
https://github.com/fchollet/keras/issues/1888
openCVのインストール:
http://hikuichi.hatenablog.com/entry/2015/12/22/124044
TheanoをGPU動作させる:
http://deeplearning.net/software/theano/tutorial/using_gpu.html