機械学習モデルフォーマットの話:さようならpmml、こんにちはpfa

47
機械学習モデルフォーマットの話: さようならPMML こんにちはPFA ⽐⼾将平 Preferred Networks America, Inc.

Upload: shohei-hido

Post on 21-Jan-2017

3.836 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

機械学習モデルフォーマットの話: さようならPMML こんにちはPFA

⽐⼾将平 Preferred Networks America, Inc.

Page 2: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

⾃⼰紹介

l  ⽐⼾将平(HIDO Shohei) l  Twitter ID: @sla l  専⾨:データマイニング、機械学習 l  経歴:

l  2006-2012: IBM東京基礎研究所データ解析グループ l  機械学習のアルゴリズム研究開発(主に異常検知)

l  2012-2014: 株式会社Preferred Infrastructure l  ⼤規模オンライン分散機械学習基盤Jubatusチームリーダー

l  2014-: 株式会社Preferred Networks l  2015-: Preferred Networks America, Inc. @ シリコンバレー

l  Chief Research Officer

2

Page 3: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

l  機械学習モデルフォーマットといえばPMML l  使われているか?流⾏っているか?

l  サポートは⽼舗データ解析ソフトを中⼼にたくさん、だが… l  Google trendで⾒ても、5年間ほぼ盛り上がりなし l  ⽿にすることは無い(データサイエンティストブーム中すらも)

3

(これまで)機械学習モデル標準化とフォーマット いちおうPMMLがあるけどぶっちゃけ残念な感じ

Page 4: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

⽬次

l  機械学習モデルのプロダクション利⽤

l  PMMLの理想と現実

l  PFAの概要

l  PFA⼊⾨編

l  (おまけ)ディープラーニングモデルの標準化?

4

Page 5: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

データサイエンティストが作ったモデルをプロダクション環境で使いたい時l  開発環境:RやPythonで試⾏錯誤l  プロダクション環境:HadoopやSparkベースの解析基盤の中

5

Rと格闘してやっと最⾼精度の オレオレモデルができました!

データサイエンティスト マネージャー

よし!でもRじゃ本番環境で 使えないから何とかしてね!

マジかよ… Javaで再実装?

Page 6: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

⼆つの分断された世界

6

Death valley of M

L models

Page 7: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

⽬次

l  機械学習モデルのプロダクション利⽤

l  PMMLの理想と現実

l  PFAの概要

l  PFA⼊⾨編

l  (おまけ)ディープラーニングモデルの標準化?

7

Page 8: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

PMMLとは

l  Predictive Model Markup Language–  XMLベースの予測モデル交換フォーマット

–  1997年に初期v0.7公開、2016年に最新v4.3公開(14つめ)

8

<PMML xmlns="http://www.dmg.org/PMML-4_1" version="4.1"> <Header copyright="KNIME"> <Application name="KNIME" version="2.8.0"/> </Header> <DataDictionary numberOfFields="10">...</DataDictionary> <TransformationDictionary/> <ClusteringModel modelName="k-means" functionName="clustering" modelClass="centerBased" numberOfClusters="4"> <MiningSchema>...</MiningSchema> <LocalTransformations>...</LocalTransformations> <ComparisonMeasure kind="distance">...</ComparisonMeasure> <ClusteringField field="Age" compareFunction="absDiff"/> <ClusteringField field="Male_Gender" compareFunction="absDiff"/>… <Cluster name="cluster_0" size="289">...</Cluster> <Cluster name="cluster_1" size="536">...</Cluster> </ClusteringModel></PMML>

←特徴量定義

←モデル宣⾔←前処理定義

←得られたクラスタ

←特徴量の使い⽅←距離定義

←利⽤する特徴量宣⾔←前処理適⽤

Page 9: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

PMMLの理想

l  PMML利⽤者のメリット–  様々な環境・ソフトウェアをまたいでモデルを共⽤可能

–  ⾯倒な実装は各ソフトウェアが対応して隠蔽してくれる

–  TransformationとTargetにより前処理・後処理もサポート

–  XMLかつschemaも与えることで⾔語を問わず簡単に操作

l  PMML対応ソフトウェア開発者のメリット–  PMMLに対応することでユーザーが増える

–  既存ソフトウェアはImport and/ or Exportに対応すれば良い

–  PMMLバージョンアップへの対応はベストエフォートで良い

l  PMML標準化団体のメリット–  PMMLが業界標準として広く使われる

–  アルゴリズムはSpecificationバージョンアップ毎に追加すればいよい

9

Page 10: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

PMMLの現実

l  PMMLの弱点–  拡張性が低く前処理が苦⼿

–  データフローを単⼀PMMLでは表現困難

–  各種PMMLモデルの「仕様」であり全実装が追従するのが⼤変なほど複雑化

–  独⾃拡張を必要とする新しいアルゴリズムの研究開発には使えない

l  PMMLのバージョン対応状況–  各製品ごとにProducer / Consumerの対応バージョンがバラバラ

–  製品をまたいだ実⾏の保証はどれくらいできているのか…?

l  PMMLの利⽤実態–  主にエンタープライズシステムの中で限定的に使われている

–  PMMLが今の⼈⼯知能ブームで勢いを増すことは考えづらい

10

Page 11: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

⽬次

l  機械学習モデルのプロダクション利⽤

l  PMMLの理想と現実

l  PFAの概要

l  PFA⼊⾨編

l  (おまけ)ディープラーニングモデルの標準化?

11

Page 12: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

PFA: Portable Format for Analytics

l  開発状況–  仕様はv0.8.1が2015年11⽉に初めて公開

–  オリジナル開発者はJim Pivarski

–  PMMLと同じData Mining Group (dmg.org)コンソーシアムが主導

–  実際にはOpen Data Group(という会社)がコア開発&主要プロモーター

l  公開実装–  RのAurelius: 主にモデル開発⽤

–  Scala (JVM)のHadrian: 主にモデル実⾏⽤

–  PythonのTitus: 両⽤

l  PMMLとの関係–  KDD2016で“Standards in Predictive Analytics”ワークショップ

–  PMML関係者のトークの後にPFAの紹介

–  同じDMG下なのに対⽴関係にあるように⾒えた12

Page 13: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

What is the advantage of PFA over PMML?

l  Itʼs JSON!

13

{"input": "string", "output": {"type": "array", "items": "string"}, "cells": { "accumulate": {"type": {"type": "array", "items": "string"}, "init": []}}, "method": "map”, "action": {"cell": "accumulate", "to": {"fcn": "u.addone", "fill": {"newitem": "input"}}}, "fcns": {"addone": {"params": [{"old": {"type": "array", "items": "string"}}, {"newitem": "string"}], "ret": {"type": "array", "items": "string"}, "do": {"a.append": ["old", "newitem"]}}}, "name": "ExampleScoringEngine” }

Page 14: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

PFAの特徴

l  ユーザー定義関数–  対応ソフトウェア開発者だけでなくユーザーもが新しいモデル、

さらに前処理や後処理を定義できるような拡張性

–  モデルの連鎖や階層化など、複数モデルを組み合わせた

ワークフローの表現が可能

l  JSON (もしくはYAML) & Avroスキーマ–  HadoopやSpark、Stormなどの現代的な分散/ストリームデータ処理基盤に容

易に統合可能

–  ⼈間可読と機械可読の丁度良いバランス

l  ファイルI/O無し、型付けなど–  プロダクション環境で任意のPFAドキュメントを実⾏する安全性を確保

14

Page 15: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

What is the advantage of PFA over PMML? (contd.)l  特定モデル毎のパラメータテーブルではなくl  PMMLよりもさらに柔軟で拡張性が⾼いl  なおかつ汎⽤⾔語よりは事前検証が容易で安全

15

Page 16: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

2つの世界の架け橋としてのPFA

16

Page 17: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

⽬次

l  機械学習モデルのプロダクション利⽤

l  PMMLの理想と現実

l  PFAの概要

l  PFA⼊⾨編

l  (おまけ)ディープラーニングモデルの標準化?

17

Page 18: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

⾔語としてのPFA:各実装はこれらをサポートすれば良いl  基本的な機能

–  プリミティブな型(Avro)

–  条件分岐

–  関数

–  Map / Emit / Fold

l  安全–  静的型付け

–  ファイルI/Oなど無し

l  便利–  Immutable data structure

–  バイトコードにコンパイル可能

(⼊⼒以外の型チェック不要)

18

PFA

Primitive ⾔語機能

UDF 拡張性

Common モデル

Page 19: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

Avroによる型システム

l  Apache Avro–  JSONベースのSerializationとRPCのフレームワーク

–  MessagePack, Thrift, Protocol Bufferと同様

l  Avro schema–  Primitives: boolean, integer, floating-point, and string

–  Null type

–  Arrays of homogeneous, sequential items

–  Maps of homogeneous, unordered key-value pairs

–  Named records of heterogeneous named fields

–  Named enumeration sets,

–  Byte sequences (raw strings),

–  Named, fixed-width byte sequences,

–  Tagged unions.19

Page 20: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

基本:input-action-output

20

Page 21: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

算術関数

21

Page 22: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

Map

22

Page 23: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

Emit

23

Page 24: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

Fold

24

Page 25: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

If-then-else

25

Page 26: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

While検証できないので実⾏側でWhile⼊りPFAを拒絶可能

26

Page 27: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

For

27

Page 28: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

Function call

28

Page 29: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

Function例: ベルヌーイ列

29

Page 30: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

PrettyPFA: C-like syntax for PFAPFAを⼿で書きたくない⼈のために

30

Page 31: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

その他

l  関数オブジェクトサポート–  インライン引数のみ

–  グローバルなUDFメイを持つ

l  制限なし関数オブジェクトは許さない–  事前に呼び出し関係は決定できデッドロックは起きない

–  UDFはバイトコードになっていてもよい

l  Null型で⽋損値も安全に扱える

l  JavaScriptからのコンバータもサポート予定

31

Page 32: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

PFAの既存実装

l  現在はR、Python、Scalal  何故か全部Hadrianレポジトリに

–  https://github.com/opendatagroup/

hadrian

32

モデル開発 PFA検証 スコアリングエンジン実⾏

Aurerius R

Titus Python

Hadrian Scala (JVM)

rPython呼び出し

Page 33: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

スコアリングエンジンのマイクロサービス化

l  Dockerを使ってより既存データ解析基盤への統合を容易に–  例:前処理、後処理、モデル毎のContainerの集合としてデプロイ

–  REST APIアクセス、スケジューラ、pub-sub…

–  実装はこれから(?)

33 https://channel9.msdn.com/Events/useR-international-R-User-conference/useR2016/Helping-R-Stay-in-the-Lead-by-Deploying-Models-with-PFA

Page 34: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

PFAの使⽤例: AureliusのrandomForest (1/3)

l  ⽬的: simpleTreeがある他⾔語実装でもRのrandomForestを動かす

l  RのrandomForestモデルのパラメータを抽出–  randomForestオブジェクトforestObjectをlist-of-lists形式のforestに変換

–  pfa.randomForest.*の関数はRのrandomForestオブジェクト⽤に⽤意

34

forest <- list() for (i in 1:forestObject$nTree) { treeTable <- pfa.randomForest.extractTree(forestObject, i, labelVar = TRUE) forest[[length(forest) + 1]] <- pfa.randomForest.buildOneTree(treeTable, 1, labelVar, dataLevels, lapply(dataLevels, function (v) avro.string))$TreeNode }

Page 35: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

PFAの使⽤例: AureliusのrandomForest (2/3)

l  Inputのスキーマ作成

l  全体のインタフェース作成

35

fieldNames <- as.list(forestObject$xNames) fieldTypes <- rep(avro.double, length(fieldNames)) names(fieldTypes) <- fieldNames for (n in names(dataLevels)) fieldTypes[[n]] <- avro.string inputSchema <- avro.record(fieldTypes, "Input")

tm <- avro.typemap( Input = inputSchema, Output = avro.string, TreeNode = avro.record(list( field = avro.enum(fieldNames), operator = avro.string, value = avro.union(avro.double, avro.string, avro.array(avro.string)),…), "TreeNode"))

Page 36: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

PFAの使⽤例: AureliusのrandomForest (3/3)

l  ランダムフォレストモデルのPFA定義

l  ランダムフォレストモデルの読み込みと実⾏–  他⾔語実装でもmodel.tree.simpleTreeが実装されていて動くはず

36

pfaDocument <- pfa.config( input = tm("Input"), output = tm("Output"), cells = list(forest = pfa.cell(avro.array(tm("TreeNode")), forest)), action = expression( treeScores <- a.map(forest, function(tree = tm("TreeNode") -> avro.string) model.tree.simpleTree(input, tree)), a.mode(treeScores)))

engine <- pfa.engine(pfaDocument engine$action(list(field1 = 3.14, field2 = "hello"))

Page 37: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

ところで:本当にPFAは使われるようになるのか?

l  個⼈的な感想:まだ道のりは遠い–  開発リソースが圧倒的に⾜りていない印象

–  モチベーションと設計はモダンで理にかなっているように⾒える

–  すでにGithubでドキュメントと実装が不整合

–  新しい⾔語に完璧なPFA実装を⽤意するコストはどれくらいなのか?

–  新しいアルゴリズムをPFA⽂書で表現するコストはどれくらいなのか?

–  PMMLは20年の歴史、PFAはまだ1年ちょっとなのですぐには無理だろう

l  まず2つの世界をまたいだコミュニティの拡⼤が期待される

37 https://github.com/opendatagroup/hadrian/graphs/contributors

Page 38: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

⽬次

l  機械学習モデルのプロダクション利⽤

l  PMMLの理想と現実

l  PFAの概要

l  PFA⼊⾨編

l  (おまけ)ディープラーニングモデルの標準化?

38

Page 39: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

GPUクラスタ作った深層学習モデルを端末に近い組み込み環境で使いたい時l  開発環境:GPUクラスタ+⼤容量ストレージl  プロダクション環境:⾮⼒なCPUマシン(+電⼒の制約下)

39

GPUクラスタぶん回して最強の 深層学習モデルができました!

AIエンジニア(?) マネージャー

よし!じゃああとはそれが 組込みで動くようにしてね!

マジかよ… Cで再実装?

Page 40: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

ディープラーニングならではのデプロイ課題

l  訓練時:予測精度最優先・バッチ処理・電⼒やコストは許容l  予測時:実⽤性最優先・オンライン処理・低消費電⼒

–  間に訓練済みモデルのCompactionが⼊ることもある

40 https://devblogs.nvidia.com/parallelforall/production-deep-learning-nvidia-gpu-inference-engine/

Page 41: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

(1/4) PFAにおけるNeural Network

l  あるといえばある: model.neural–  定義されているのはmodel.neural.simpleLayersのみ

l  Weight⾏列とBiasを持つLinear + 任意のActivation function

–  Multi-layer perceptronであれば実装可能

l  Deep learningモデル…?–  全ての処理をイチから全部PFAでフラットに書けば表現可能(⾔語だから)

–  あるいはmodel.neuralを拡張してConvolutionなどを追加する

–  PFA論⽂著者に⽈く「DLフレームワーク開発チームにはコンタクトしてない」

41

Page 42: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

(2/4) NVIDIA TensorRT (旧GPU Inference Engine)l  Interence時の⾼速化

–  TensorRT が計算グラフをGPU実⾏のために最適化してくれる

l  学習モデルのフォーマット–  Caffe model (.prototxt)

l  サポート済み(主に画像認識⽤)–  Convolution2D, Deconv, Fully-connected, Pooling, ReLU, Softmax, …

l  TensorRT 2.0からはINT8サポートなども導⼊

42 https://devblogs.nvidia.com/parallelforall/production-deep-learning-nvidia-gpu-inference-engine/

Page 43: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

(3/4) DLチップ開発競争

l  アプローチ–  ☆汎⽤的に訓練済みNNモデルを読み込んで実⾏→モデルフォーマットと関連

–  特定のNNモデルを焼き込む

l  NVIDIA–  DL向けGPUではほぼ独占状態(TitaxX、GTX1080、DGX-1…)

–  ⾞載AI応⽤向けにARM SoCのXavierを発表

l  Intel–  IntelのAVX-512命令セットに深層学習⽤サブセットが追加

–  買収したNervana Systemsが2017年にチップ発売予定

l  その他–  Google TPU

–  東芝&デンソーの⾃動運転⽤DNN-IP

43 (c) Intel & Nervana Systems

Page 44: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

(4/4) フレームワーク⾮依存の標準化の動き

l  Khronos Groupから2つのイニシアチブ発表–  OpenGL/OpenCL/OpenVX/WebGLなどを束ねるコンソーシアム

l  NNEF: Neural Network Exchange Format –  Inference Engineのために学習済みモデルを表現するフォーマット

–  主要なレイヤー定義などは⽤意される(convolution, pooling, etc…)

l  OpenVX Neural Network Extension–  OpenVXのグラフとしてCNNを表現して実⾏する拡張

44 https://www.khronos.org/news/press/khronos-launches-dual-neural-network-standard-initiatives

Page 45: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

まとめ

l  機械学習フォーマットの標準化は業界の要請であり悲願である

l  PMMLは(それなりに)使われているが今後の発展は期待できない

l  PFAはPMMLの弱点を考慮して考案されたフォーマットである

l  原理的にPFAは⾔語なので任意のモデルを表現可能である

l  まだ活動としては⼩規模だがコンセプトとしては参考になる

l  Deep Learningについては標準的なCNNについては陰に陽に標準化が進んでいるが汎⽤的なものはまだこれからである

45

Page 46: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

参考⽂献

l  PFA Specification v0.8.1–  http://github.com/datamininggroup/pfa/releases/download/0.8.1/pfa-

specification.pdf

l  Deploying Analytics with the Portable Format for Analytics (PFA)

–  http://www.kdd.org/kdd2016/papers/files/adp0884-pivarskiAcb.pdf

l  PFA Function Library–  http://dmg.org/pfa/docs/library/

l  Aurelius randomForest–  https://github.com/opendatagroup/hadrian/wiki/Aurelius-randomForest

46

Page 47: 機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA

l  NVIDIA TensorRT–  https://developer.nvidia.com/tensorrt

–  https://devblogs.nvidia.com/parallelforall/production-deep-learning-

nvidia-gpu-inference-engine/

l  Khronos–  https://www.khronos.org/news/press/khronos-launches-dual-neural-

network-standard-initiatives

47