Machine Learning Model Management Tools

参考

Strata

studio.ml

ModelDB

MLflow

Clipper

Azure Machine Learning Studio

Hydrosphere Serving

Hydrosphere.io のページを参照。

studio.ml

Pythonベースの機械学習モデル管理のフレームワーク。 対応しているのは、Keras、TensorFlow、scikit-learnあたり。

注意事項

studio.mlの公式GitHubのREADMEを読むと「Authentication」の項目があり、 studio.mlに何らかの手段で認証しないといけないようである。 ゲストモードがあるようだが極力アカウント情報を渡さずに使おうとしたが うまく動作しなかった。

インストールと動作確認

1
2
3
$ /opt/Anaconda/default/bin/conda create -n studioml python
$ conda activate stduioml
$ pip install studioml

以下のようなエラーが生じた。

1
awscli 1.16.101 has requirement rsa<=3.5.0,>=3.1.2, but you'll have rsa 4.0 which is incompatible.
1
2
3
4
$ cd ~/Sources
$ git clone https://github.com/studioml/studio.git
$ cd studio
$ cd examples/keras/

ここでGitHub上のREADMEに記載のとおり、~/.studioml/config.yamlのdatabaseセクションに guest: trueを追加した。

いったんUIを起動してみる。

1
$ studio ui

以下のようなエラーが出た。

1
2
3
  File "/home/******/.conda/envs/studioml/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request    rv = self.dispatch_request()  File "/home/******/.conda/envs/studioml/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request    return self.view_functions[rule.endpoint](**req.view_args)  File "/home/******/.conda/envs/studioml/lib/python3.7/site-packages/studio/apiserver.py", line 37, in dashboard    return _render('dashboard.html')  File "/home/******/.conda/envs/studioml/lib/python3.7/site-packages/studio/apiserver.py", line 518, in _render    auth = get_auth(get_auth_config())  File "/home/******/.conda/envs/studioml/lib/python3.7/site-packages/studio/apiserver.py", line 511, in get_auth_config    return get_config()['server']['authentication']

KeyError: 'server'

参考: studio.ml Issue-330

設定を以下のように変えてみた。

1
2
3
4
5
6
7
8
9
10
11
12
--- /home/dobachi/.studioml/config.yaml.2019021001      2019-02-10 01:04:10.751282800 +0900
+++ /home/dobachi/.studioml/config.yaml 2019-02-10 01:17:20.178761700 +0900
@@ -2,6 +2,10 @@
type: http serverUrl: https://zoo.studio.ml
authentication: github
+ guest: true
+
+server:
+ authentication: None

storage:
type: gcloud

ブラウザでhttp://localhost:5000にアクセスした所、開けたような気がしたが、 GitHubの404ページが表示された。

コンソール上のエラーは以下のとおり。

1
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='zoo.studio.ml', port=443): Max retries exceeded with url: /api/get_user_experiments (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7ff5a64a3da0>: Failed to establisha new connection: [Errno -2] Name or service not known'))

ModelDB

注意点

ModelDBの公式GitHubを見ると、20190211時点で最近更新されていないようだ。(最新が6ヶ月前の更新)

概要

モデルの情報を構造的に管理するための仕組み。 「ModelDB's Light API」を通じて、モデルのメトリクスとメタデータを管理できるようになる。 spark.mlとscikit-learnはネイティブクライアントを利用する。 ★要確認

ModelDBの公式GitHubのREADMEにわかりやすいフロントエンドの紹介がある。

Light APIの例

ModelDB BasicWorkflow.pyがワークフローの基本が分かる例。 基本は、 Syncerを使ってモデルの情報を登録する。 この例では、

  • データセット
  • モデル
  • モデルのコンフィグ
  • モデルのメトリクス

をModelDBに登録する。

ModelDB BasicSyncAll.pyがYAMLで登録する例。

Native API利用の例

ModelDB Clientの例modeldb.sklearn_native.SyncableMetricsの利用例が記載されている。

ウェブUIの例

ModelDB ウェブUIの例に例が載っている。

MLflow

概要

MLflowのO'Reilly記事に動機と機能概要が書かれている。 また動画でウェブUIの使い方が示されている。

動機

  • 無数のツールを組み合わせるのが難しい
  • 実験をトレースするのが難しい
  • 結果の再現性担保が難しい
  • デプロイが面倒

機能

  • トラッキング
    • パラメータ、コードバージョン、メトリクス、アウトプットファイルなどを管理する
  • プロジェクト
    • コードをパッケージングし、結果の再現性を担保する。またユーザ間でプロジェクトを流通できる
    • conda形式で依存関係を記述可能であり、実行コマンドも定義可能
    • もしMLflowの機能でトラッキングしていれば、バージョンやパラメータをトラックする
  • モデル
    • モデルをパッケージングし、デプロイできるようにする

Clipper

Strata NY 2018でのClipper が講演のようだが、スライドが公開されていない。

Clipper: A Low-Latency Online Prediction Serving System

Clipperの論文によると、「A Low-Latency Online Prediction Serving System」と定義されている。 上記論文の図1を見るかぎり、モデルサービングを担い、複数の機械学習モデルをまとめ上げる「中層化」層の 役割も担うようだ。 また、モデル選択の機能、キャッシングなどの機能も含まれているようである。

これまでの研究では、学習フェーズに焦点が当たることが多かったが、 この研究では推論フェーズに焦点を当てている。

アーキ概要

  • モデル抽象化層
  • モデル選択層

論文Figure 1参照。

Azure Machine Learning Studio

Azure Machine Learning Studioには、「完全に管理されたクラウド サービスで、ユーザーは簡単に予測分析ソリューションを構築、デプロイ、共有できます。」と 記載されている。

Hydrosphere Serving

Hydrosphere.io のページを参照。

共有

Install_vim8_on_centos7

参考

メモ

copr.fedorainfracloud.orgというサイトを使っているということで、 あまりお作法のよくない方法ではあるが動作はする。 どうしてもCentOS7でDein使いたい、というケースにおいて有効。

共有

Manifold of Uber

参考

O'Reillyの記事

プロダクト概要

モデル管理をより視覚的に行いやすくするためのツール ManifoldをUberが開発した。 モデル性能劣化の潜在的な要因を探すのに役立つ。 また、あるデータセットに関して、各モデルがどういった性能を示すかを可視化し、 モデル化以前の工夫の効果を測ることが出来る。

既存のモデル可視化ツールは、特定のツール、アルゴリズムの内部状態を示す物が多かった。 Manifoldはモデル性能を改善/改悪するデータセグメントを見つける。 それらがアグリゲートされた評価も示す。これはアンサンブル手法にとって使いやすい。

現時点では、回帰と識別器に対応。

今のところオープンソース化はされていないようだ。

機能

Visualization and workflow designの箇所に図ありで説明がされている。

  • 性能比較ビュー
    • 横軸:メトリクス、縦軸:データセグメント、色:モデル、という形で視覚的に モデルの傾向を確認できる
  • 特徴ごとの比較ビュー
    • 横軸:特徴空間、縦軸:データポイント数、色:データセグメント、という形で 視覚的にモデルの傾向を確認できる

グラフを表示ながら以下のような操作を加えて確認可能

  • クラスタ数を変えながら、特徴がどのように変化するかを確認
  • スライス(領域を区切ってズーム)
  • 特徴の差の大きさ(?)にフィルタをかけて、気になる点を探す

より直感的な皮革のための取り組み

またコンセプトとしては、さらに

  • 横軸の性能
  • 縦軸に特徴

という形で視覚化する方法が挙げられているが、まだ課題も挙げられている。 (例:データ点数が多くなりがちなので抽象化の仕組みが必要、など)

そこでManifoldではデータセグメントをクラスタ化して見やすくする、などの工夫が施されている。

アーキテクチャ

PythonとJavaScriptのそれぞれを好きな方を使える。 これにより、Uber内の他のフレームワークと連携しやすくなっている。

ただしJavaScriptでクラスタリングなどを計算させると遅いことから、 TensorFlow.jsを用いている。

ユースケース

モデルの工夫の効果の確認

Uber eatsでの機械学習による配達時間短縮事例 に記載の事例にて、 モデル比較のため使用。 モデル改善の工夫の評価をする際にManifoldを使用。 これにより、特定のデータセグメントに改善効果があることがわかった。

False Negativeの低減のための分析

Safetyチームによる利用。 False Negativeレートの改善のために利用。 あるモデルがNegativeとしたデータセグメントについてドリルダウン分析。 当該モデルは、ある特徴の値が小さいときにNegativeと判定する傾向があることがわかった。 しかし実際にはその中にはPositiveなものも含まれいる。 ここから、その特徴に着目し、より差をつけやすい特徴を用いたり、モデルを用いるような工夫を施した。

共有

Create BigTop environment on Docker

参考

メモ

Dockerでのクラスタ構築を紹介するブログ公式の手順 を参考に試した。 基本的には、前者のブログの記事通りで問題ない。

Sparkも試す

以下のようにコンポーネントに追加してプロビジョニングするとSparkも使えるようになる。

1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/provisioner/docker/config_centos-7.yaml b/provisioner/docker/config_centos-7.yaml
index 49f86aee..0f611a10 100644
--- a/provisioner/docker/config_centos-7.yaml
+++ b/provisioner/docker/config_centos-7.yaml
@@ -19,6 +19,6 @@ docker:

repo: "http://repos.bigtop.apache.org/releases/1.3.0/centos/7/$basearch"
distro: centos
-components: [hdfs, yarn, mapreduce]
+components: [hdfs, yarn, mapreduce, spark]
enable_local_repo: false
-smoke_test_components: [hdfs, yarn, mapreduce]
+smoke_test_components: [hdfs, yarn, mapreduce, spark]
共有

WhereHows by LinkedIn

参考

ユースケースについて

ユースケース に背景などが記載されている。 複数のデータソース、複数のデータストア、複数のデータ処理エンジン、そしてワークフロー管理ツール。 LinkedInの場合は以下のとおり。

  • Analytics Storage system: HDFS, Teradata, Hive, Espresso, Kafka, Voldemort
  • Execution: MapReduce, Pig, Hive, Teradata SQL.
  • Workflow management: Azkaban, Appworx, Oozie

ユースケースは以下の通り。

  • 新任の人が立ち上がりやすいようにする
  • データセットを見つけられるようにする
  • ジョブやデータの変更が及ぼす影響を確認する

機能概要

Wikiに画面キャプチャ付きで説明がある。 GUIの他、バックエンドAPIもあり、自動化できるようになっている。

例:https://github.com/LinkedIn/Wherehows/wiki/Backend-API#dataset-get

アーキテクチャ

Architecture に記載されている。 Akkaベースでスケジューラが組まれており、スケジューラによりクローラが動く。

データセットやオペレーションデータがエンドポイトであり、リネージがそれを結ぶブリッジであると考えられる。 またこれらは極力汎用的に設計されているので、異なるプロダクトのデータを取り入れることができる。

バックエンドのETLについて

Java、Jython、MySQLで構成。 分析ロジックの実装しやすさとほかシステムとの連携しやすさを両立。

  • Dataset ETL
    • HDFS内をクロールする
  • Operation data ETL
    • フロー管理ツールのログなどをクロールし、所定の形式に変換する
  • Lineage ETL
    • 定期的にジョブ情報を取得し、入力データと出力データの定義から リネージを生成する
共有

LinkedIn WareHows

参考

メモ

  • links data objects with people and processes
  • enables crowdsourcing for data knowledge
  • provides data governance and provenance based on ownership and lineage
共有

Mount host's filesystem on KVM

参考

メモ

マウントの仕方を示しているブログ の通りで問題ない。

補足

「ハードウェアの追加」から「ファイルシステム」を追加する。

ゲストOSでマウントするときに、ディレクトリを作成し忘れないこと。

手動でマウント

1
$ sudo mount -t 9p -o trans=virtio hostdata /mnt/data

fstabには以下のように記載

1
hostdata	/mnt/data	9p	trans=virtio	0	1
共有

Buy Windows10 licenses

共有

Docker for Windows with WSL

参考

メモ

上記ブログ 動かし方を紹介するブログ の内容で基本的に問題ない。 ただし、一般ユーザの.bashrcに環境変数DOCKER_HOSTを指定したので、 一般ユーザでDockerを起動できるようにしておいた。 (当該一般ユーザをdockerグループに加えた)

コマンド

コンテナ確認

1
2
$ docker ps
$ docker ps -a

-vを用いてボリュームをマウント。 ついでに--rmを用いて停止後に削除することにする。

1
$ docker run -it --rm -v c:/Users/<user name>:/mnt/<user name> <image id> /bin/bash
共有

Hyper-V機能のオン・オフを切り替える

参考

メモ

基本的には、 切り替えようPowerShellスクリプトを掲載してくれているサイト のとおりで問題ない。 パス等は環境に合わせること。

共有