Upgrade to Pro — share decks privately, control downloads, hide ads and more …

パイプラインツールgokartのタスク競合を解消した話

 パイプラインツールgokartのタスク競合を解消した話

Daiki Ikeshima

August 28, 2020
Tweet

More Decks by Daiki Ikeshima

Other Decks in Programming

Transcript

  1. - AIチームではpythonを頻繁に使用 - データパイプライン構築にgokartというライブラリを使用 パイプラインツール: gokart gokart - m3がメインで開発しているOSS -

    spotifyが開発するluigiのラッパー - https://github.com/m3dev/gokart Fringe81さんでも活用されている! https://speakerdeck.com/tenajima/goka rtdao-ru-falsekitukaketoyun-yong-false xian-zhuang
  2. ④データやパラメータに変更があった場合には、新し い部分だけをやり直す ②最下流のタスクを実行すると依存する全てのタ スクを実行する パイプラインツール: gokart データ1 データ2 特徴量1 作成

    特徴量2 作成 モデル学習 評価 推論 推論結果 推論用 データ 特徴量 作成 ①処理をタスクとしてクラス単位で記述 ③タスク間は中間データとしてキャッシュファイルを 作成してデータをやりとり
  3. ④データやパラメータに変更があった場合には、新し い部分だけをやり直す ②最下流のタスクを実行すると依存する全てのタ スクを実行する パイプラインツール: gokart データ1 データ2 特徴量1 作成

    特徴量2 作成 モデル学習 評価 推論 推論結果 推論用 データ 特徴量 作成 ①処理をタスクとしてクラス単位で記述 ③タスク間は中間データとしてキャッシュファイルを 作成してデータをやりとり
  4. ④データやパラメータに変更があった場合には、新し い部分だけをやり直す ②最下流のタスクを実行すると依存する全てのタ スクを実行する パイプラインツール: gokart データ1 データ2 特徴量1 作成

    特徴量2 作成 モデル学習 評価 推論 推論結果 推論用 データ 特徴量 作成 ①処理をタスクとしてクラス単位で記述 ③タスク間は中間データとしてキャッシュファイルを 作成してデータをやりとり
  5. ④データやパラメータに変更があった場合には、新し い部分だけをやり直す ②最下流のタスクを実行すると依存する全てのタ スクを実行する パイプラインツール: gokart データ1 データ2 特徴量1 作成

    特徴量2 作成 モデル学習 評価 推論 推論結果 推論用 データ 特徴量 作成 ①処理をタスクとしてクラス単位で記述 ③タスク間は中間データとしてキャッシュファイルを 作成してデータをやりとり
  6. ④データやパラメータに変更があった場合には、新し い部分だけをやり直す ②最下流のタスクを実行すると依存する全てのタ スクを実行する パイプラインツール: gokart データ1 データ2 特徴量1 作成

    特徴量2 作成 モデル学習 評価 推論 推論結果 推論用 データ 特徴量 作成 ①処理をタスクとしてクラス単位で記述 ③タスク間は中間データとしてキャッシュファイルを 作成してデータをやりとり
  7. ④データやパラメータに変更があった場合には、新し い部分だけをやり直す ②最下流のタスクを実行すると依存する全てのタ スクを実行する パイプラインツール: gokart データ1 データ2’ 特徴量1 作成

    特徴量2 作成 モデル学習 評価 推論 推論結果 推論用 データ 特徴量 作成 ①処理をタスクとしてクラス単位で記述 ③タスク間は中間データとしてキャッシュファイルを 作成してデータをやりとり
  8. ④データやパラメータに変更があった場合には、新し い部分だけをやり直す ②最下流のタスクを実行すると依存する全てのタ スクを実行する パイプラインツール: gokart データ1 データ2’ 特徴量1 作成

    特徴量2 作成 モデル学習 評価 推論 推論結果 推論用 データ 特徴量 作成 ①処理をタスクとしてクラス単位で記述 ③タスク間は中間データとしてキャッシュファイルを 作成してデータをやりとり
  9. 解決方法の検討 キャッシュの保存先を分ける - キャッシュの保存される場所が違えば競合しえない - 共通するデータも複数実行・保存される無駄がある luigiのcentral scheduler - スケジューラが同じタスクが同時に実行されないか管理

    - スケジューラがスケーラブルではない ファイルをロックする - 同じキャッシュファイルへの同時アクセスを禁じる - k8上で非常に軽量なサーバーを立てておけば可能 アプリB タスクA アプリA タスクA キャッシュA キャッシュA アプリB タスクA アプリA タスクA スケジューラ 常駐Job アプリB タスクA アプリA タスクA キャッシュA mutex 常駐Job
  10. 構成図 タスクA Pod A (アプリA) GCS タスクA Pod B (アプリB)

    Redis Redis Pod Redis Service Lock: なし    Kubernetes icons from - https://github.com/kubernetes/community/tree/master/icons - https://cloud.google.com/icons/
  11. 構成図 タスクA Pod A (アプリA) GCS タスクA Pod B (アプリB)

    Redis Redis Pod Redis Service Lock: なし    Kubernetes icons from - https://github.com/kubernetes/community/tree/master/icons - https://cloud.google.com/icons/
  12. 構成図 タスクA Pod A (アプリA) GCS タスクA Pod B (アプリB)

    Redis Redis Pod Redis Service Lock: アプリAのタスクA    Kubernetes icons from - https://github.com/kubernetes/community/tree/master/icons - https://cloud.google.com/icons/
  13. 構成図 タスクA Pod A (アプリA) GCS タスクA Pod B (アプリB)

    Redis Redis Pod Redis Service キャッシュA    Kubernetes icons from - https://github.com/kubernetes/community/tree/master/icons - https://cloud.google.com/icons/ 作成中 Lock: アプリAのタスクA
  14. 構成図 タスクA Pod A (アプリA) GCS タスクA Pod B (アプリB)

    Redis Redis Pod Redis Service キャッシュA    Kubernetes icons from - https://github.com/kubernetes/community/tree/master/icons - https://cloud.google.com/icons/ 作成中 Lock: アプリAのタスクA
  15. 構成図 タスクA Pod A (アプリA) GCS タスクA Pod B (アプリB)

    Redis Redis Pod Redis Service キャッシュA    Kubernetes icons from - https://github.com/kubernetes/community/tree/master/icons - https://cloud.google.com/icons/ 作成完了 Lock: なし Lock: なし
  16. 構成図 タスクA Pod A (アプリA) GCS タスクA Pod B (アプリB)

    Redis Redis Pod Redis Service キャッシュA    Kubernetes icons from - https://github.com/kubernetes/community/tree/master/icons - https://cloud.google.com/icons/ 作成完了 Lock: アプリBのタスクA