SlideShare a Scribd company logo
1 of 15
Download to read offline
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.p
rototxt
pretained_model* 学習させたCNNのパラメータファイルを指定 models/bvlc_reference_caffenet/bvlc_ref
erence_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

More Related Content

What's hot

KubeFlowでどこまでいける?
KubeFlowでどこまでいける?KubeFlowでどこまでいける?
KubeFlowでどこまでいける?Yuji Oshima
 
Azure DevOpsで技術同人誌作成
Azure DevOpsで技術同人誌作成Azure DevOpsで技術同人誌作成
Azure DevOpsで技術同人誌作成裕之 木下
 
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみたKubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた祐磨 堀
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdevToshi Harada
 
初めてMlKitを使ってみた
初めてMlKitを使ってみた初めてMlKitを使ってみた
初めてMlKitを使ってみたichirokato5
 
Client Side Balzorでツールを作ってみた
Client Side Balzorでツールを作ってみたClient Side Balzorでツールを作ってみた
Client Side Balzorでツールを作ってみた裕之 木下
 
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話Kazuhiro Hara
 
元OracleMasterPlatinumがCloudSpanner触ってみた
元OracleMasterPlatinumがCloudSpanner触ってみた元OracleMasterPlatinumがCloudSpanner触ってみた
元OracleMasterPlatinumがCloudSpanner触ってみたKumano Ryo
 
サービスリリースから安定軌道に乗せるまでに行った開発施策
サービスリリースから安定軌道に乗せるまでに行った開発施策サービスリリースから安定軌道に乗せるまでに行った開発施策
サービスリリースから安定軌道に乗せるまでに行った開発施策Keiichi Hagiwara
 
Cloud Identity-Aware Proxy
Cloud Identity-Aware ProxyCloud Identity-Aware Proxy
Cloud Identity-Aware ProxyKumano Ryo
 
Azureもくもく会@東京のいままでとこれからと
Azureもくもく会@東京のいままでとこれからとAzureもくもく会@東京のいままでとこれからと
Azureもくもく会@東京のいままでとこれからと裕之 木下
 
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPFShuji Yamada
 
「Azure durable functions」の概要
「Azure durable functions」の概要「Azure durable functions」の概要
「Azure durable functions」の概要裕之 木下
 
Azureコスト管理機能のお話
Azureコスト管理機能のお話Azureコスト管理機能のお話
Azureコスト管理機能のお話裕之 木下
 
5分で武装 ~Azure プラン編~
5分で武装 ~Azure プラン編~5分で武装 ~Azure プラン編~
5分で武装 ~Azure プラン編~Takashi Ushigami
 

What's hot (20)

KubeFlowでどこまでいける?
KubeFlowでどこまでいける?KubeFlowでどこまでいける?
KubeFlowでどこまでいける?
 
Developer summit 2015 gcp
Developer summit 2015   gcpDeveloper summit 2015   gcp
Developer summit 2015 gcp
 
2018 07-23
2018 07-232018 07-23
2018 07-23
 
Azure DevOpsで技術同人誌作成
Azure DevOpsで技術同人誌作成Azure DevOpsで技術同人誌作成
Azure DevOpsで技術同人誌作成
 
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみたKubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev
 
初めてMlKitを使ってみた
初めてMlKitを使ってみた初めてMlKitを使ってみた
初めてMlKitを使ってみた
 
Client Side Balzorでツールを作ってみた
Client Side Balzorでツールを作ってみたClient Side Balzorでツールを作ってみた
Client Side Balzorでツールを作ってみた
 
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
buddyのユーザ認証周りのデータ構造 - 使われているデータの取り回しについてのお話
 
元OracleMasterPlatinumがCloudSpanner触ってみた
元OracleMasterPlatinumがCloudSpanner触ってみた元OracleMasterPlatinumがCloudSpanner触ってみた
元OracleMasterPlatinumがCloudSpanner触ってみた
 
サービスリリースから安定軌道に乗せるまでに行った開発施策
サービスリリースから安定軌道に乗せるまでに行った開発施策サービスリリースから安定軌道に乗せるまでに行った開発施策
サービスリリースから安定軌道に乗せるまでに行った開発施策
 
Cloud Identity-Aware Proxy
Cloud Identity-Aware ProxyCloud Identity-Aware Proxy
Cloud Identity-Aware Proxy
 
Azureもくもく会@東京のいままでとこれからと
Azureもくもく会@東京のいままでとこれからとAzureもくもく会@東京のいままでとこれからと
Azureもくもく会@東京のいままでとこれからと
 
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF
 
FirebaseAnalytics_BigQuery_Datastudio
FirebaseAnalytics_BigQuery_DatastudioFirebaseAnalytics_BigQuery_Datastudio
FirebaseAnalytics_BigQuery_Datastudio
 
Katib
KatibKatib
Katib
 
「Azure durable functions」の概要
「Azure durable functions」の概要「Azure durable functions」の概要
「Azure durable functions」の概要
 
Azureコスト管理機能のお話
Azureコスト管理機能のお話Azureコスト管理機能のお話
Azureコスト管理機能のお話
 
5分で武装 ~Azure プラン編~
5分で武装 ~Azure プラン編~5分で武装 ~Azure プラン編~
5分で武装 ~Azure プラン編~
 
Jupyterカーネルを魔改造した話
Jupyterカーネルを魔改造した話Jupyterカーネルを魔改造した話
Jupyterカーネルを魔改造した話
 

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

2016 06-30-deep-learning-archi
2016 06-30-deep-learning-archi2016 06-30-deep-learning-archi
2016 06-30-deep-learning-archiDaisuke Nagao
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」ManaMurakami1
 
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep Learning
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep LearningWatsonをささえる ハイパフォーマンスクラウドで はじめるDeep Learning
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep LearningAtsumori Sasaki
 
新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみたKazuto Kusama
 
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)Yaboo Oyabu
 
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...Rescale Japan株式会社
 
Cld017 nh シリーズリリース
Cld017 nh シリーズリリースCld017 nh シリーズリリース
Cld017 nh シリーズリリースTech Summit 2016
 
Cld017 nh シリーズリリース
Cld017 nh シリーズリリースCld017 nh シリーズリリース
Cld017 nh シリーズリリースTech Summit 2016
 
PFN x Microsoft Alliance
PFN x Microsoft AlliancePFN x Microsoft Alliance
PFN x Microsoft AllianceHirono Jumpei
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活Kuninobu SaSaki
 
20171109 Amazon EC2 GPUインスタンス最新動向 P3 instance
20171109 Amazon EC2 GPUインスタンス最新動向 P3 instance20171109 Amazon EC2 GPUインスタンス最新動向 P3 instance
20171109 Amazon EC2 GPUインスタンス最新動向 P3 instanceAmazon Web Services Japan
 
Singularity Containers for Enterprise Use
Singularity Containers for Enterprise UseSingularity Containers for Enterprise Use
Singularity Containers for Enterprise UseAtsutoHashimoto
 
20160728 hyperscale #03
20160728 hyperscale #0320160728 hyperscale #03
20160728 hyperscale #03ManaMurakami1
 
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】洵貴 佐川
 
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現するQlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現するQlikPresalesJapan
 
Hpc server講習会第3回応用編
Hpc server講習会第3回応用編Hpc server講習会第3回応用編
Hpc server講習会第3回応用編Osamu Masutani
 
de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!Minoru Naito
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows AzureMicrosoft
 

Similar to OHS#2 pythonでgreをつくってみる (20)

2016 06-30-deep-learning-archi
2016 06-30-deep-learning-archi2016 06-30-deep-learning-archi
2016 06-30-deep-learning-archi
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
 
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep Learning
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep LearningWatsonをささえる ハイパフォーマンスクラウドで はじめるDeep Learning
Watsonをささえる ハイパフォーマンスクラウドで はじめるDeep Learning
 
【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
 
新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた
 
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
機械学習プロジェクトにおける Cloud AI Platform の使い方 (2018-11-19)
 
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
 
Cld017 nh シリーズリリース
Cld017 nh シリーズリリースCld017 nh シリーズリリース
Cld017 nh シリーズリリース
 
Cld017 nh シリーズリリース
Cld017 nh シリーズリリースCld017 nh シリーズリリース
Cld017 nh シリーズリリース
 
PFN x Microsoft Alliance
PFN x Microsoft AlliancePFN x Microsoft Alliance
PFN x Microsoft Alliance
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活
 
20171109 Amazon EC2 GPUインスタンス最新動向 P3 instance
20171109 Amazon EC2 GPUインスタンス最新動向 P3 instance20171109 Amazon EC2 GPUインスタンス最新動向 P3 instance
20171109 Amazon EC2 GPUインスタンス最新動向 P3 instance
 
Singularity Containers for Enterprise Use
Singularity Containers for Enterprise UseSingularity Containers for Enterprise Use
Singularity Containers for Enterprise Use
 
20160728 hyperscale #03
20160728 hyperscale #0320160728 hyperscale #03
20160728 hyperscale #03
 
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
 
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現するQlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
Qlik Senseで無制限精度の数値演算 - Windows版Qlikエンジンのサーバーサイド拡張を実現する
 
Hpc server講習会第3回応用編
Hpc server講習会第3回応用編Hpc server講習会第3回応用編
Hpc server講習会第3回応用編
 
de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!de:code 2019 Cloud トラック 総まとめ!
de:code 2019 Cloud トラック 総まとめ!
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
 
PHP on Windows Azure
PHP on Windows AzurePHP on Windows Azure
PHP on Windows Azure
 

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

  • 1. OPENHYPERSCALE勉強会  目的  体験のイノベーションをハックする  GPU as a Serviceを実現する技術を身につける  ポリシー  いっしょに勉強しながら・・・Openにして加速する勉強会に  積極的に発表。聞く側に回らない  分からないことがあったらどんどん聞く 6/30/2016 0
  • 3. 本日のアジェンダ 1. PythonでGREをつくってみる 2. DockerCon’16参加ご報告 3. GREで学習REST APIの実装 4. CUDA8ご紹介 5. AWSで作るDLシステムのアーキテクチャ 6. Knights Landing比較 6/30/2016 2
  • 5. NVIDIA GPU REST Engineとは  機能要件  画像分類機能  CUDAカーネルコールのベンチマーク機能  マルチGPU環境のジョブスケジューラ機能  Dockerコンテナにて環境を提供  非機能要件  低レイテンシ  マイクロサービス  GREの適用例  Image Compute Engine (ICE) 6/30/2016 4
  • 6. 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
  • 7. 6/30/2016 IBM Microsoft Google NTT Docomo Deep Learning APIの広がり  AI-as-a-Platformで取り組む企業が多い (Amazonはない模様)  現状は「サービス層」のみ(カテゴリとしては、画像解析 / NLP / 音声解析) 6
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. PythonでGRE (Grepy) – Caffeで画像分類する際のパラメータ  Classifierクラスに必要となるパラメータ  *印は、caffe.Classifierクラスで必須となるパラメータ 6/30/2016 パラメータ名 説明 設定値 model_def* - CNNの構成定義を指定 - .prototxtファイルとして定義される models/bvlc_reference_caffenet/deploy.p rototxt pretained_model* 学習させたCNNのパラメータファイルを指定 models/bvlc_reference_caffenet/bvlc_ref erence_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
  • 14. PythonでGRE (Grepy) – Feature work  GPU対応したDockerで確認すること  ユーザに指定させるパラメータについて整理すること  ジョブ管理を何で実現するか検討すること 6/30/2016 13
  • 15. トラブルシューティング [事象] 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