Above & Beyond

日々のアウトプット記録

Spark Meetup Tokyo #2 (Spark+AI Summit EU 2019)

11/19(火) は「Spark Meetup Tokyo #2 (Spark+AI Summit EU 2019)」に参加してきました。

spark-meetup-tokyo.connpass.com

f:id:kabukawa:20191120004343p:plain

会場は NTT Software Innovation Center さん。

f:id:kabukawa:20191124123516j:plain:w600


目次


Spark Meetup Tokyo とは

グループの概要から引用します。

オープンソースの分散並列処理フレームワーク Spark に関するmeetupです

分散並列処理フレームワーク Spark というのはこちらです。

spark.apache.org

近年注目されているOSSの超高速の統合分析エンジンです。


内容

開催概要から引用します。

Spark+AI Summit (SAIS) Europe 2019で発表があったSparkの最新開発状況,ユーザからのユースケース報告,関連OSSであるKoalas/MLflow/Delta Lakeなどに関する最新情報をお伝えします.

  • Spark+AI Summit Europe - イベント内容: databricks.com
  • Koalas - Spark用のPandas DataFrame APIs: pypi.org
  • MLflow - 機械学習によるデータ分析のライフサイクル管理ツール: pypi.org
  • Delta Lake - データレイクを実現するためのSpark用のストレージレイヤ: delta.io

イベントと会場に関する説明

Takeshi Yamamuro(Twitter:maropu)@NTT1 さん


SPARK+AI Summit Europe 2019 セッションハイライト

萩原 悠二/Yuji Hagiwara1 さん and 酒井 遼平/Ryohei Sakai@NTT Data さん

[資料は公開されたら追記します]

Spark+AI Summit EU 2019について

とはいえ

  • 昼食会場は席が足りない
  • 日本からの参加者は少ない
  • ヨーロッパ周辺からの参加者が多い

キーノート

  • ML Flowについての最新機能など
  • ML Flowについて
  • OSSのMLプラットフォーム
  • ラッキング、プロジェクト、モデルの3つで構成
  • ここ6ヶ月での機能のアップデート

Auto Logging

  • 機械学習ライブラリで学習を行う際に便利な機能
  • TensorFlowたKerasで一般的に必要になるであろうパラメータ、メトリクスを自動でトラッキングする。

ML Flow Model Registory

  • モデル管理の課題
  • 大人数でモデルを管理するとき
  • どのモデルを使えばいいか
  • どうやってモデルが作られたのか
  • どうやってレビューするか など

  • モデルに対して名前やコメント、タグを付けてバージョン管理できるレジストリ

  • 各モデルのステージ(開発用、ステージング、本番用など)の状態遷移、その履歴も管理する
  • デモでは実際の画面を見せてどんな事ができるかを確認できた
  • モデルの読み込み時にモデルの名前とステージを指定して読み込みができるようになる

10/30 に ML Flowがリリースされた。ML Flow mkdel Registoryも含まれている

事例 * フランスのメガバンクの事例 * ビジネス * データサイエンティスト * データエンジニア

取り組んできたこと

  • データローカリー(HDFSに保存して、是認がそこを見る)
  • アプリケーションの信頼性
  • 様々なPythonパッケージ
  • モデル管理
  • ラッキングサーバーの信頼性(冗長化)
  • モデルサービング(モデルの使い方)

具体的には

キーノート

  • Spark周りのエコシステムの状況
  • Sparkエコシステムに関する最近の取り組み

Spark3.0の改善ポイント

  • Adaptive Query Execution
  • Spark SQLのパフォーマンス改善ポイント
  • 実行中にデータを見てからクエリプランを変更

Dyanamic Partition pruning

  • ディメンションテーブルに対するフィルタ条件をもとにして巨大なファクトテーブルをフィルタ

2019/11/6に Sparl 3.0のPreviewがリリースされている

Delta Lake

  • ACID transaction on SparkScalable metadata handring
  • Streaming and batch unification
  • Schema enforcement
  • etc...

これまでのアーキテクチャで辛いポイント

  • データ分析をリアルタイムでしたい
  • もう少し精緻な形で分析したい
  • こういう条件が2つが並行で存在する場合に2つのアーキテクチャを作る必要がある

DeltaLakeを使うことで改善できる

  • 2018年4月にOSS

Koalasとは

  • Pandasと同じコードでSparkで動かす
  • モチベーション
    • データサイエンティストは自身のラップトップ上でコーディング
    • 実際の分析のときに書き換えることにあるのは辛い
    • PandasからSparkへの書き換えが1%くらいで済むようになる

なぜクラウドでオートスケーリングが重要か?

Sparkクラスタにおけるノードの役割

  • コンピュート
  • 一時データの保管

UpscaleはかんたんだがDownscaleは難しい

  • ノードの除外にあたって
  • 実行中のコンテナが存在しない
  • 一時データが存在しない

ことの確認が必要になる。

課題

解決策

一時データ

  • Suffuleファイルは各Executorのローカルストレージ上に存在
  • Suffule Cleanup
  • TTLベースでファイルを削除
  • コンピュートストレージの分離
  • nfsマウントした場所に置くことで回避

Koalasの開発状況 (Updates)

Takuya Ueshin(Twitter:ueshin)@Databricks さん

www.slideshare.net


Koalas

github.com

  • Pure Python Library
  • Databricsの開発したOSS
  • Pandas APIを使ってSparkを動かす

なぜ作ったか

  • データサイエンティストはPandasを使って教育を受けることが多い
  • Pandasは小さなデータのときは良いけど、実務では大きなデータが必要なので困る

Spark(UC Barklay→Databrics)

Pandas DataframeとSpark DataFrameは意外に違う

  • カラムの追加、リネーム、値のカウントなど。。。
  • 学習コストが、、、
  • Sparkで書くほうが少し冗長
    • →Koalasを開発

Koalasの開発

  • PandasのAPIを優先して開発

とはいえ違いはある

鍵となる違い

  • Pandasはその場で計算、Sparkの場合はそうならない
  • データの処理後の順番はSparkは分散システムなので保証されない

2週間に1回のリリース

  • 日次のダウンロード10kを超える

キーノートのビデオが公開されている

現在の開発状況

  • かなりアクティブに開発中
  • PAndasAPIの60%、DataframeGroupBy/SeriesGroupBy 60%実装済
  • Plot関数80%
  • parquetの読み込みなど
  • MuktiIndexColumn 90%

700コミットを超えている

  • 日次ダウンロードも15k以上に増加
  • 1%のコードを変えただけで10倍高速化した

今後の動き

pip/condaでインストール可能

  • ドキュメントに詳しく書いてある
  • github.com/databrics/Koalas
  • Libe Jupyterで動かして確認できる
  • 提案やリクエスト、イシューも募集中

Quick Overview of Upcoming Spark 3.0 + α(SAIS Europe 2019で個人的に興味のあった発表紹介)

Takeshi Yamamuro(Twitter:maropu)@NTT さん

www.slideshare.net

ML Flowの公式アカウントにイベント告知のリツイートをしてもらった

Spark3.0の時期リリース 20120のQ1と言われている

  • 互換性が壊れる変更が多く入っている
  • previewは事前の確認用の先行的な公開という位置づけ
  • 正式リリースではないので、パッケージでの配信などはない

開発中なので、メジャーアップデートの全機能はわからない。

これまでのクエリ実行

  • Sparkのクエリは入力データの統計を用いて「実行前」に決定
  • 実行計画は途中では変わらない(不変)

物理プランを複数のクエリステージに分割して各ステージの実際の出力プランの出力データの統計情報を用いて次のステージの実行計画を決める

Dyanmic Partition pruning

  • 隣接するFilter処理の述語(Where)を動的なパーティショニングに活かす
  • 属性テーブルの結果を天パンすることで最大100倍高速化

Sparkの実行計画が読みにくい

  • 見やすく修正された

DataFrame Cogrouping

  • Pandas UDFでグループ化してMAP処理が可能に

Join Hints

  • 3.0からはすべてのJoinに対するHintが可能に

PostgreSQL Sialect Support

  • PostgreSQLとの挙動のち外野未サポート機能を把握するためにリグレッションテストの一部を移植
  • 共通性の高い課題に関してはSparkの動作に反映。PostgreSQLの独自の振る舞いについてはオプション設定をすることで反映
  • ただし、開発中なのでどこまで取り込まれるかは未定

Spark@Facebook

  • FacebookはSparkのヘビーユーザーで知見を共有している
  • 推論とIndexingに使っている
  • Sparkと外部プロセスの間のI/O処理の効率化
  • 開発環境ではデバッグ効率重視のテキスト形式、プロダクションでバイナリに変更
  • Apache Arrow

Scriptb Transformation

  • テーブルに対してシェルなどのコマンドをApply出来る。

Delta アーキテクチャ

Paulo Gutierrez(Twitter:tokyodataguy)@Databricks さん

www.slideshare.net

Delta Lamdaアーキテクチャ(Apache Storm)よりは先、Kafca(Kappaアーキテクチャ)の次なのでDelta

kafka
Kinesis    Spark    Table    Spark  AI、Reporting
DataLake

リアルタイム分析 Spark Streaming

AI/AI、Reporting Spark batch

何が問題か?

  • コンスタントな読み込み ライターとリーダーの分離が必要
  • 最適化されたファイルのサイズとソースが必要
  • バージョンによるロールバック(タイムトラベル)
  • 履歴データのリプレイ
  • 後で来たデータもストリーミングでUpseartできる

バッチとストリーミングを統合して継続的にデータを処理する

  • バッチとストリーミングの統合
  • インクリメンタルなロード

Intermidiate Hops

  • 出来るとことから処理を開始する

ストレージレイアウトの最適化

  • パーティショニング カーディナリティの低いデータはこっちで
  • Z-Ordering
  • parquetを採用しているので出来る

再処理時

  • Infinite retention

データクオリティ

  • ブロンズ 生データ
  • シルバー ある程度クレンジング
  • ゴールド アグリゲーション。タグ/ラベル付

Project Hydrogenの最新情報

Kazuaki Ishizaki(Twitter:kiszk)@IBM Research - Tokyo さん

www.slideshare.net

AparkとAIフレームワークを統合するHydrogenプロジェクトについて

ある意味、3度めの正直

  • TensorFlow on Spark(Yahoo)
  • SqqpLearning Pipekines(Databrics)

Spark上で分散AIフレームワークを実現する

ユースケース1

  • 分散学習

分散学習では並列処理の形態がこれまでと異なる * MapReduce * 部分再実行 * 分散学習 * 全タスクを再実行

Barrier Execution Mode

  • すべてのタスクを同時に実行する
  • 故障が起きたら部分だけキャンセル

故障が発生した場合の再実行も自動的に行われる

  • 故障のためのコードを書かなくても良いSparkの良さはそのまま

Barrier Execution Mode 利用例

  • Databrice 5.0上でのHorovoidとの統合
  • Horovoid
  • 分散トレーニングを可能にするフィレー無ワークに依存しないランタイム

アクセラレータ(GPU/TPU)、どうやって使ってますか?

  • YarnやK8sはExecuter単位でアクセラレータを割り当てる
  • でもSparkのTaskのことまでは知らない

Accelarator-aware Scheduling

GPUの自動検出、Executor/Taskに割り当てるGPUの数

  • Taskが実行されているGPUを取り出してTensorFlowにk情報を与える

Spark3.0 previewでのサポート状況

  • クラスタマネージャ サポート済み
  • k8s yaanなど
  • Mesos 未サポート

ユースケース2

  • ストリームデータの推論

推論ではAIフレームワークとの高速データ交換が重要

  • 性能に大きく影響する

Pandas UDFを使うと遅かったPySparkがSpark 2.3からは3倍から100倍高速化

  • 実装はApache Arrowを使っている
  • 推論でよく見る「ラベルとスコアのペア」を高速にSpark側に渡すことが出来る
  • Pandas UDF自体の高速化

Pandas UDFの1バッチを実行している間に次に使われるバッチを前乗ってApark側からPython側に転送しておく

  • PandasUDF内で一度呼んだモレルを再実行する

Spark極めて性能向上の話

Chris Kong(Twitter:val_mukong)@Rakuten さん

[資料は公開されたら追記します]

Rakuten AnalyticsTracker Platform

  • 12万QPS
  • 3.8B レコード
  • 1.9PBデータ

データ収集

Front
JS Tracker Logstash Spark Streaming/Kafka   
SDK
DMP

Spark Streaming の最適化

  • Kafkaからの読み込み/書き出し

何が問題か?

  • セールなどのときに処理が重くなる。
  • アップストリームにあるので、ここの遅延はまずい
  • Shfflingの時間がかかりすぎるのが問題
    • →Executerを増やす
    • 改善した

しかし、まだ問題が

  • マイクロバッチの処理
  • スケジューリングの遅延
    • →最適なmaxRatePerPartiotionを見つける
    • 遅延を早く改善することを目的としている

どうやって最適値を見つければいいか?

  • 秒間処理速度を概算して大体のmaxRatePerPatitionを逆算

レポートエンジンの改善

MapReduce on Yarn

  • 処理時間がかかりすぎ、Preemptされる
    • →Spark SQL を使うことにして劇的改善

しかし、バグが有って複雑なクエリを処理できないことが分かった

  • →Spark SQLをやめてDataSetを使う

チューニング

チューニング

  • Dynamic Resorce Allocation

結果

  • 処理時間が半分くらいになった
  • ただし会社からグラフの詳細度が。。。笑

これからやりたいこと

  • ストリーミング
  • バッチ
  • それぞれでやりたいポイントあり

LT1: Koalasのココが良いよね

Harutaka Kawamura(Twitter:harupy)@ARISE さん

docs.google.com

Koalasとは

  • 4月にDatabricsが公開

Koalasの特徴

  • PandasのAPIを真似る

Pandasを真似ることで得られる利点

  • PySparkの作法を学習「しなくて良い
  • 切り替えコストがk低い
  • PandasにあるがPySparkにはない機能&関数

Koalasを使えばPySparkよりかんたんにデータを処理できる


LT2: Higher-Order Functions をちょっと深掘りしてみた

Kamuela Lau(Twitter: kamu_lau)@Rondhuit さん

[資料は公開されたら追記します]

高階関数とは

  • 引数として関数を受け取る
  • 戻りとして関数を返す

高階関数の例

  • Transform
  • filetr
  • aggrigate
  • exists
  • sip_with

Map


懇親会

体調を考えて、懇親会は最初だけ参加して帰りました。


Apache Arrow

Apache Arrowというメモリ内データ用の言語間開発プラットフォームも、このプロジェクトから派生したOSSの一つです。 こちらも関連技術として、興味深いとおもいます。近々イベントも予定されていますのでリンクを貼っておきます。

arrow.apache.org

speee.connpass.com


まとめ

正直なところ、あまりSparkについて追いきれていなかったので、情報量の多さに着いていくのがやっとでした。 でも、メモを取りながら「こんなことまでできるようになってきているのか」とか得るものが多くて、参加できてよかったなと思います。 次回までにはもう少し勉強して、理解した形で参加したいなと思いました。

講演者、スタッフ、参加者の皆さん、ありがとうございました!