AIチームのためのデータエンジニアリング入門


はじめに

  • データエンジニアリングの基本知識の内、AIチームでも特に使いそうな要素をかいつまんで簡単にまとめました。
  • しばらく随時更新します。

参考書籍

データエンジニアリングとは

  • データ活用のためのインフラストラクチャを設計・構築・運用するための技術
  • (上記の参考書籍に書かれているような内容)

データエンジニアリングの必要性について

  • MLシステムを構築する際に、データエンジニアリングを全く考慮しないと、下記のような課題が発生し得ります。

①DWH

DWHとは

  • 分析のためにデータを格納しておくためのシステム
  • 使いどころ
    • 集約することで、データのサイロ化を防ぐ(Dx条件の一つ)
    • データベースとの違いは、「データ分析が目的であること」「膨大なデータを高速に処理する必要があること」
  • (補足)データレイク・データマートとは

  • (参考)列指向データベース
    • データ分析では、しばしば一部のカラムだけが集計の対象になる
    • -> データをあらかじめカラム単位にまとめておくことで、必要なカラムだけを読み込むことでディスクI/Oを減らす。
    • -> 同じカラムには、しばしば同じようなデータが並ぶので、圧縮できる
  • 設計のポイント
    • データ保存量の拡張手段(制約がないか)
    • データの取り出し手段

実用イメージ

【GCP】BigQuery

  • BigQuery は、Google Cloud のペタバイト規模の費用対効果に優れたフルマネージド型の分析データウェアハウスであり、膨大な量のデータに対してほぼリアルタイムで分析を行うことができる
  • BQの仕組み

  • RDBとの使い分け
    • データマート用途であれば、1千万レコード/5GB(1レコード/500バイト仮定)くらいならRDBでも問題ないかも?
  • GCSデータのクエリ
    • BigQuery では、次の形式の Cloud Storage データのクエリがサポートされています。
    • -> カンマ区切り値(CSV),JSON(改行区切り),Avro,ORC,Parquet,Datastoreエクスポート,Firestoreエクスポート
  • データの取り込み方法
    • バルクロード: BigQuery Data Transfer Service, など
    • ストリーミング挿入: Fluentd, Dataflowのコネクタ, StriimなどのCDCソリューション(MySQLなどと同期)
    • フェデレーション: 外部テーブルを指定
  • コスト
    • マルチテナント方式であるため、事前のプロビジョニングのコストが発生しない
      • コンピュートまたはストレージのどちらか大きいほうのピークに合わせてサイジング調整する必要などがない
    • クエリでスキャンした容量に対して課金
  • BigQueryML
    • SQLを用いて、機械学習のステップを完結できる
      • BQが予測リクエストをSQL形式で受付け、推論結果をサービングできる
    • サポートしているモデル
      • 線形回帰(予測)
      • 2項ロジスティック回帰(分類)
      • 多項ロジスティック回帰(分類)
      • K平均法クラスタリング(データセグメンテーション)
      • 行列分解(商品のレコメンデーションシステムの作成)
      • 時系列(時系列予測)
      • ブーストツリー(XGBoostベースの分類モデルと回帰モデルの作成)
      • ディープ ニューラル ネットワーク(DNN)(分類、回帰)
      • AutoML Tables: 特徴量エンジニアリングやモデル選択を行わずに、最適なモデルを作成する
      • TensorFlow モデルのインポート

②データ処理-Spark

Sparkとは

  • ビッグデータ分析に最適なオープンソースの分散処理システム。データ処理で最大のオープンソースプロジェクト。
  • Netflix、Yahoo、eBay などのインターネット大手も、Spark を大規模にデプロイし、8000 を超えるノードのクラスターで、複数のペタバイトデータをまとめて処理しています
  • Cluster Mode Overviewから引用

実用イメージ

【GCP】DataProc

  • マネージドHadoop/Spark
  • メモリを追加してPresto, GPUを追加してSparkで機械学習もできる
  • データソース
    • ファイルパスの接頭辞をhdfs://からgs://へ変更するだけでGCSにアクセスすることができる
    • BQのストレージをDataProcから直接触ることもできる(BigQueryStorageAPIの利用)
    • DataProcでGCS上にHiveパーティションデータを作る→それをBQで直接触る、などもできる
  • 90sで起動する
  • コスト
    • プリエンプティブル VM で実行することによって費用をさらに節約できる
    • -> プリエンプティブルワーカーは、他のタスクで Google Cloud が必要とする場合に、再利用(クラスタから削除)されます
  • サンプルコード

③データ処理-Beam

Beamとは

  • Implement batch and streaming data processing jobs that run on any execution engine
  • データ読み込み用のコネクタは、BQ,GCS,PubSub,Kafka,Kinesis,SQS,Cassendra,JDBCなどに対応
  • Apache Beam で記述したデータ処理のジョブはさまざまなビッグデータ基盤で動作させることができる。Spark,Hadoop MapReduce,Dataflow,,,
  • SpotifyはリアルタイムレコメンドにApacheBeamを利用。ピークで800万イベント/sのストレーミングイベントを処理
  • 複数の TFX ライブラリではタスクの実行に Beam が使用されているため、コンピュートクラスタでの高度なスケーラビリティが可能
  • (参考)ラムダアーキテクチャとカッパアーキテクチャ
    • ストリーム処理で対応すべき課題として「間違った結果をどのように修正するか」「遅れてくるデータの扱い」
    • ラムダアーキテクチャ: バッチ処理とストリーム処理の両方を組み合わせた
      • 最新のデータは、ストリーム処理から生成されたリアルタイムビューを参照し、それより前はバッチ処理されたバッチビューを参照する
    • カッパアーキテクチャ: スピードレイヤとバッチレイヤの処理を同じツールで行う
      • やり直しに備えて、メッセージブローカのデータ保持期間を十分に長くする

実用イメージ

【GCP】Dataflow

  • BigQueryユーザのためのCloud Dataflow入門が分かりやすい
  • リアルタイムに整形・集計などのデータ処理をするパイプラインを構築する
  • 他GCPサービスとの連携
    • Pub/Subで収集→Dataflowで処理→BQで蓄積、など
    • S3に書き出すこともできる
    • リアルタイムなアーキテクチャは、GCPだと以下2パターンが多い
      • DataflowでGCSに保管してフェデレーション
      • BQのストリーミング挿入機能
  • サンプルコード

④ワークフロー管理

ワークフロー管理とは

  • 処理の依存関係を制御、処理のタイミングを適切にコントロールする
  • データパイプライン(データがどこから来てどの処理を経てどこに行くのか)を管理するツールであり、多くはDAG(有向非循環グラフ)で一連の処理を記述する
  • メリット
    • 依存関係が複雑になりがちな処理フローを管理できる
    • 実装を共通化できる
    • 実験環境から本番環境への移行がしやすい
    • エラー通知、リカバリーの支援などの運用管理面
  • サンプルコード

実用イメージ

【GCP】CloudComposer

  • Airflowに必要なコンポーネントが自動で起動してくれる
    • GKE
    • GCS
    • CloudLogging
    • CloudMonitoring
    • CloudSQL(バックエンドDB)

⑤特徴量ストア

特徴量ストアとは

  • 特徴量の読み書きに特化したデータストア
  • 「組織内の誰もが特徴量にアクセスできるように」「ビッグデータと機械学習の世界を隔てる境界線」
  • 特徴
    • オンラインとオフラインという性質の異なる2つのシステムにデータを供給
      • オンラインはNoSQLで高頻度の読み書きに耐えられるように。オフラインは長期的な保存のためオブジェクトストレージ、など
    • バージョニング: 変更履歴を記録
    • タイムトラベル: 任意の時点にデータを巻き戻す
    • データリネージ: データの依存関係追跡
    • データの検証: スキーマを定義

実用イメージ

【GCP】Vertex Feature Store

  • ML特徴の整理、保存、サービングで使用される一元化されたリポジトリを提供
  • 検索機能とフィルタ機能により、他のユーザーも既存の特徴を簡単に見つけて再利用できる
  • オンライン予測をタイムリーに行うために低レイテンシのデータ サービングインフラストラクチャを構築
  • 本番環境で使用する特徴データの分布が、モデルのトレーニングに使用された特徴データの分布と異なることを回避

参考