Upload
-
View
246
Download
1
Embed Size (px)
Citation preview
OPENHYPERSCALE勉強会 目的
体験のイノベーションをハックする
GPU as a Serviceを実現する技術を身につける
ポリシー
いっしょに勉強しながら・・・Openにして加速する勉強会に
積極的に発表。聞く側に回らない
分からないことがあったらどんどん聞く
6/30/2016 0
本日のアジェンダ 1. PythonでGREをつくってみる
2. DockerCon’16参加ご報告
3. GREで学習REST APIの実装
4. CUDA8ご紹介
5. AWSで作るDLシステムのアーキテクチャ
6. Knights Landing比較
6/30/2016 2
NVIDIA GPU REST Engineとは
機能要件
画像分類機能
CUDAカーネルコールのベンチマーク機能
マルチGPU環境のジョブスケジューラ機能
Dockerコンテナにて環境を提供
非機能要件
低レイテンシ
マイクロサービス
GREの適用例
Image Compute Engine (ICE)
6/30/2016 4
Micro-Service Architecture(MSA)
MSAとは 2014年に提唱されたアーキテクチャ
1プロセス1サービスとして、それらを組み合わせてシステムを作る思想 ⇔ モノリシック(複数サービスが1プロセス)
個々のサービスのやりとりはWeb APIで行う
採用実績
Amazon / NetFlix / LINE / クックパッド
ご利益
スケールしやすい
手が入れやすい
アジャイル開発に向いている
6/30/2016
ショッピングサイト
ユーザ 管理機能
商品検索機能
ユーザ 管理機能
商品検索機能
GUI機能
Web API Web API
モノリシック MSA
GUI機能
Micsoservices (http://martinfowler.com/articles/microservices.html)
5
6/30/2016
IBM
Microsoft
NTT Docomo
Deep Learning APIの広がり AI-as-a-Platformで取り組む企業が多い (Amazonはない模様)
現状は「サービス層」のみ(カテゴリとしては、画像解析 / NLP / 音声解析)
6
PaaS層でのDL事例 (CloudCV)
バージニア工科大学 電気・コンピュータ工学
ソースコード(https://github.com/batra-mlp-lab/CloudCV)
ユーザインターフェースとしては、Web / Python / Matlabが提供されている
Celeryによるジョブスケジューリング
6/30/2016
Web
[Django Bootstrap]
Python API
Matlab API
ジョブスケジューラ
[Redis/Celery]
ジョブ
画像分類 [Caffe]
特徴量抽出 [Caffe]
新規分類の学習 [Caffe]
VIP検出 [OpenCV/学習済みモデル]
VQA [Caffe] socket.io
画像張り合わせ [Graphlab]
7
PaaS層でのDL事例 (GCP)
Cloud Machine Learning
Jupyter Notebook上にて、Python(TensorFlow)を用いてDNNを構築・学習の実施
ローカル/クラウドの学習環境の切り替え
他サービスとの連携 Cloud Storageにデータを保存
前処理として、Cloud Dataflowを使うことを想定
Cloud Datalab(これもJupyter Notebookをベースとしている)で学習済みDNNを用いたデータ解析
6/30/2016
[速報]Google、クラウドで高速にディープラーニングを行う「Cloud Machine Learning」発表、TensorFlowベース。GCP Next 2016
API
対話式プラットフォーム
8
PaaS層のREST API事例
tleyden/elastic-thought
推論/学習機能をREST APIで提供
DLフレームワークはCaffe
GOで実装
cloudwalkio/caffe-api
推論機能をREST APIで提供
DLフレームワークはCaffe
Pythonで実装
beniz/deepdetect
推論/学習機能をREST APIで提供
DLフレームワークはCaffe
C++で実装
6/30/2016
PaaS層のAPIとしては先の企業では取り組まれていない - 個人的に作ったものはいくつかあるみたい. - 他のフレームワークも恐らくありそう
9
PythonでGRE (Grepy) – アーキテクチャ
アーキテクチャについて
Webサーバ; Nginx
APコンテナ; uWSGI
Webアプリケーションフレームワーク; Flask caffe/python/classify.pyを参考に。
(疑問) スケールするときは, 1つのコンテナ内でするのか、コンテナ自体をするのか
6/30/2016
Grepy
<Webサーバ>
Nginx
<APコンテナ>
uWSGI
<Web F/W> Flask
servre.py
<DL F/W> PyCaffe
学習済み CaffeNet
config.ini
10
PythonでGRE (Grepy) – 結果
使用データ
学習済みモデル; CaffeNet
確認用の画像データ; Caltech 101のデータセット(131 Mbytes)を推論用のデータとして利用 airplane/image_0001.jpgを分類
6/30/2016
# curl --form "image=@./image_0001.jpg" http://10.83.170.1695000/classify { “result": [ [ 0.952552318572998, "n02690373 airliner" ], [ 0.02736411802470684, "n04552348 warplane, military plane" ], [ 0.004652403295040131, "n04008634 projectile, missile" ] ] }
11
PythonでGRE (Grepy) – Caffeで画像分類する際のパラメータ
Classifierクラスに必要となるパラメータ
*印は、caffe.Classifierクラスで必須となるパラメータ
6/30/2016
パラメータ名 説明 設定値
model_def* - CNNの構成定義を指定 - .prototxtファイルとして定義される
models/bvlc_reference_caffenet/deploy.prototxt
pretained_model* 学習させたCNNのパラメータファイルを指定 models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
image_dims 読み込まれた画像のリサイズ指定 [256, 256]
mean* - 読み込まれた画像から引く平均画像 - Numpyの行列として表現されている
caffe/imagenetilsvrc_2012_mean.npy
input_scale 前処理後に読み込んだ画像を指定した数値分スケールさせる指定
None
raw_scale 読み込んだ画像を指定した数値分スケールする指定
255.0
channel_swap 色情報をどの順序でスワップさせるかについての指定 2, 1, 0
12
PythonでGRE (Grepy) – Feature work
GPU対応したDockerで確認すること
ユーザに指定させるパラメータについて整理すること
ジョブ管理を何で実現するか検討すること
6/30/2016 13
トラブルシューティング
[事象] import caffeで” libdc1394 error: Failed to initialize libdc1394”が発生
[施策] ln -s /dev/null /dev/raw1394をCMDで実行
(参照: http://qiita.com/daxanya1/items/f04c7f75a6d2ecb92b23)
[事象] classify.pyの実行時に”ValueError: Mean shape incompatible with input shape.”が発生
[施策] caffe/python/caffe/io.pyのl.253-254を下記のように修正
(参照: http://qiita.com/Bonnnou_108/items/41e6dadeff1310b4eb5d)
6/30/2016
if ms != self.inputs[in_][1:]: print(self.inputs[in_]) in_shape = self.inputs[in_][1:] m_min, m_max = mean.min(), mean.max() normal_mean = (mean - m_min) / (m_max - m_min) mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max - m_min) + m_min #raise ValueError('Mean shape incompatible with input shape.')
14