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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

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

Avatar for Daiki Ikeshima

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