15
OPENHYPERSCALE勉強会 目的 体験のイノベーションをハックする GPU as a Serviceを実現する技術を身につける ポリシー いっしょに勉強しながら・・・Openにして加速する勉強会に 積極的に発表。聞く側に回らない 分からないことがあったらどんどん聞く 6/30/2016 0

OHS#2 pythonでgreをつくってみる

  • Upload
    -

  • View
    246

  • Download
    1

Embed Size (px)

Citation preview

OPENHYPERSCALE勉強会 目的

体験のイノベーションをハックする

GPU as a Serviceを実現する技術を身につける

ポリシー

いっしょに勉強しながら・・・Openにして加速する勉強会に

積極的に発表。聞く側に回らない

分からないことがあったらどんどん聞く

6/30/2016 0

過去テーマ #1 2016/05/26 NVDIA-Docker/GPU on Mesos

6/30/2016 1

本日のアジェンダ 1. PythonでGREをつくってみる

2. DockerCon’16参加ご報告

3. GREで学習REST APIの実装

4. CUDA8ご紹介

5. AWSで作るDLシステムのアーキテクチャ

6. Knights Landing比較

6/30/2016 2

PythonでGREをつくってみる

OpenHyperscale勉強会 #2

3

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

Google

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