Tellus

参考

  • https://www.tellusxdp.com/ja/

メモ

1
2
Tellusとは
Tellus(テルース)」は、政府衛星データを利用した新たなビジネスマーケットプレイスを創出することを目的とした、日本初のオープン&フリーな衛星データプラットフォームです。複数のデータをかけ合わせ、新たなビジネス創出を促進するためのあらゆるファンクションを提供します。
共有

デブサミでの澤田さん講演メモ

カンファレンスメモ

日頃の過ごし方

  • NTTOSSセンタにて、業務としてOSS活動
    • 問題解決を水から実施することで、プロダクトの改善と組織の技術力向上の両方に貢献
  • PostgreSQLについて説明
  • PostgreSQLへの貢献活動は、問題を見つけて解決する流れもあれば、研究開発の一環として、 大きめの機能を追加していくこともある。
    • 透過的な暗号化を入れる、など

やりがいについて

  • 一番は、自分の書いたコードが本体にマージされると嬉しい、というのが 単純だけど大事
  • 他にも、社外での登壇。製品の開発どうこうに詳しくなる。英語が少し上手になった。も。
  • 注意していること
    • 英語は辛い。評価してもらえる仕組みが必要。成果がでる前に時間がかかることがある。会社上司の理解が必要。
  • PostgreSQLは問題管理(?)、開発管理もメールベースで実施する。(実はGit等を使っていない)
  • 秘蔵のパッチ、眠っていませんか?
  • 人生最初のパッチは、pgbenchに関する困りごとの解消
    • ベンチマークで流すSQLが最大1024文字だったのを改善。
  • PostgreSQLの大きい機能を入れて、それのメンテナとしてコミッターになることが多い。
    • 早い人手も3年単位。10年くらい活動してからなった人もいる。
  • 貢献の方法を公開しているので気になる人はぜひ見てください。
共有

Ansibleでコマンド実行結果のJSONを辞書型に変換して用いる

参考

メモ

Ansible で task の実行結果の json を dict オブジェクトとして後続の処理で利用する に記載の内容で問題ない。 自分の場合は、AnsibleでWindows PowerShellの実行結果を受け取るときに、オブジェクトをJSONに変換し、 それを辞書型に変換した上で後々when構文で使いたかった。

例)

1
2
3
4
5
6
7
8
9
10
- name: check_state_of_wsl
win_shell: Get-WindowsOptionalFeature -Online | ? FeatureName -Match "Microsoft-Windows-Subsystem-Linux" | ConvertTo-Json
register: wsl_check_json

- set_fact:
wsl_check: "{{ wsl_check_json.stdout }}"

- name: enable_wsl
win_shell: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart
when: wsl_check.State != 2
共有

Ansible for Windows

参考

メモ

WindowsをAnsibleで管理する方法を説明するブログで基本的に問題ない。

最初の環境のはじめ方

Ansibleのインストール、実行環境

Windows10 に ゼロから Ansible をインストールする(Ansible for Windows) ではDocker for Windowsで環境構築をしているが、 WSLを使う方法はどうだろうか?

パッケージ管理

chocolateyを利用すればよいだろう。

注意点

Ansible環境

自身の環境では、UbuntuのレポジトリからインストールしたAnsibleを使用していたが、 pywinrmを有効にする手間がかかりそうだったので、condaで環境を作った。

1
2
3
$ conda create -n ansible python
$ conda activate ansible
$ pip install ansible pywinrm

とした。

Windows環境での実行ユーザ

MSアカウントに対しての実行が手間取りそうだったので、 ここではAdministratorで実験した。

Ansibleのインベントリは以下のようなものを用意した。

1
2
3
4
5
6
7
8
9
[win]
<対象となるWin環境>

[win:vars]
ansible_ssh_user=Administrator
ansible_ssh_port=5986
ansible_connection=winrm
ansible_winrm_transport=ntlm
ansible_winrm_server_cert_validation=ignore

Pingコマンドは以下の通り。 (パスワードを聞かれるので予め設定したAdministratorのパスワードを入れる)

1
$ ansible -i hosts.win -m win_ping win -k

パッケージインストールの動作確認は以下の通り。

1
2
$ ansible -i hosts.win -m win_chocolatey -a "name=googlechrome state=present" win -k
$ ansible -i hosts.win -m win_chocolatey -a "name=vim state=present" win -k

シェルの実行

AnsibleでWindowsのシェル実行 によると、win_shellwin_commandscriptモジュールを使うと良いようだ。

WSL導入

WSL導入手順の説明のブログ の通り、PowerShellをAnsibleのwin_shellモジュール使ってインストールする。

共有

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
共有