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

gokartの分散並列化ライブラリkannonの紹介 @【Sansan×エムスリー】gokartで爆速開発!MLOps勉強会

gokartの分散並列化ライブラリkannonの紹介 @【Sansan×エムスリー】gokartで爆速開発!MLOps勉強会

登壇概要
gokartのタスクパイプラインの一部をk8s上で簡単に分散並列化できるライブラリkannonを紹介します。
kannonはgokartのラッパであり、複数のk8s jobにタスクを分散して並列で実行することができます。 MLパイプラインではしばしば分散並列化可能な部分が存在しますが、gokartのシングルスレッド実行が障壁となります。kannonはこれを解決するライブラリです。

登壇者プロフィール
東京大学 工学部 電子情報工学科所属のB4。大学では大規模画像検索を研究。2023年3月にエムスリーAIチームにてインターンに参加し、kannonを開発。現在はエムスリーに業務委託として参画。

Yutaro Oguri

July 12, 2023
Tweet

More Decks by Yutaro Oguri

Other Decks in Programming

Transcript

  1. gokartの分散並列化
    kannon の紹介
    2023/07/10 エムスリー株式会社 小栗悠太郎
    1

    View Slide

  2. 自己紹介
    ● Yutaro Oguri (小栗 悠太郎) (@irungo_ic)
    ● 東京大学 工学部 電子情報工学科B4
    ● 2023/03にエムスリーAIチームにてインターン
    ● kannon開発
    ● その後、業務委託として参画
    2

    View Slide

  3. kannonとは?
    ● gokartのタスクをk8sで並列分散処理
    ● gokartのwrapper
    3
    kannon + gokart

    View Slide

  4. gokartの並列分散化: 動機
    ● MLパイプラインの特徴:
    学習・推論タスクなど並列実行可能な部分が多い
    ● gokartをk8sで運用 => k8sで分散したい
    Taskの依存関係 (DAG) 4

    View Slide

  5. gokartの並列分散化: 課題
    ● gokart only = シングルスレッド実行
    ● パイプラインを複数のマシンに分散する上での課題
    ○ Task依存関係を解決しつつ、
    ○ 分散するTaskを識別しつつ、
    ○ どうやって分散するか?
    5

    View Slide

  6. gokartの並列分散化: 解決策
    ● k8s jobを複数生成してTaskを並列分散実行する
    ● gokartの諸機能(Cache等)は引き継ぐ
    6

    View Slide

  7. kannon: アーキテクチャ
    “Master Job”

    GCS Bucket
    (Cache)
    save &
    load cache
    create job
    7

    View Slide

  8. kannon: アーキテクチャ
    “Master Job”

    GCS Bucket
    (Cache)
    save &
    load cache
    create job
    Master Jobが
    中央管理
    8

    View Slide

  9. kannon: アーキテクチャ
    “Master Job”

    GCS Bucket
    (Cache)
    save &
    load cache
    create job
    Task Queueを構築
    9

    View Slide

  10. kannon: アーキテクチャ
    “Master Job”

    GCS Bucket
    (Cache)
    save &
    load cache
    create job
    全Job共有のキャッ
    シュ
    10

    View Slide

  11. kannon: アーキテクチャ
    ● Queueが空になるまで回し続けるという制御
    ● Master JobがChild Jobを生成
    11

    View Slide

  12. kannon: Task Queueが空になるまで回し続ける
    ● Task C, Dを分散したい。それ以外はMasterで実行
    ● 先頭から実行可能な限り実行し続ける。
    ● 空になったら終了。
    Master
    12

    View Slide

  13. kannon: Task Queueが空になるまで回し続ける
    ● Task C, Dを分散したい。それ以外はMasterで実行
    ● 先頭から実行可能な限り実行し続ける。
    ● 空になったら終了。
    Master
    13

    View Slide

  14. kannon: Task Queueが空になるまで回し続ける
    ● Task C0はChild Jobで分散実行。裏で回り始める。
    Child
    Master
    14

    View Slide

  15. kannon: Task Queueが空になるまで回し続ける
    ● Task C0は分散して再度Enqueue
    Re-enqueue
    Child
    Master
    15

    View Slide

  16. kannon: Task Queueが空になるまで回し続ける
    ● D0はC0に依存する。C0は未完なのでSkipする。
    Child
    Master
    16

    View Slide

  17. kannon: Task Queueが空になるまで回し続ける
    ● D0はC0に依存する。C0は未完なのでSkipする。
    ● D0は再度Enqueueする。
    Re-enqueue
    Child
    Master
    17

    View Slide

  18. kannon: Task Queueが空になるまで回し続ける
    ● Task C1は分散して再度Enqueue
    ● Child Jobでの実行が裏で回る => C0, C1が並列分散!
    Child
    Child
    Master
    18

    View Slide

  19. ● 時は流れ...Queueが巡回し再びC0を見る。
    ● C0がまだ実行中ならスルー。完了していたらPopする。
    kannon: Task Queueが空になるまで回し続ける
    Child
    Child
    Master
    19

    View Slide

  20. kannon: Task Queueが空になるまで回し続ける
    ● 時は流れ... C, Dは並列分散されて完了した。
    ● 最後はEを実行して空になる。
    Master
    20

    View Slide

  21. kannon: Child Jobの作成
    ● 同一のDocker Image
    ● ユーザ定義の環境変数をchildに継承
    Master Job
    Child Job
    継承
    同一Image
    21

    View Slide

  22. kannonの使い方: Task定義
    gokart
    class TaskC / TaskD(gokart.TaskOnKart)
    分散実行したいTaskの
    継承クラスを変更するだけ!
    kannon
    class TaskC / TaskD(kannon.TaskOnBullet)
    22

    View Slide

  23. kannonの使い方: Task実行
    kannon
    Kannon(
    ** # いくつかの引数
    ).build(task_e)
    gokart
    gokart.build(task_e)
    23

    View Slide

  24. まとめ
    ● kannonのtutorialを試してみてください!
    ● contributionお待ちしております!
    ● Repo: https://github.com/m3dev/kannon
    ● Tutorial: https://github.com/m3dev/kannon/blob/main/example/README.md
    ● Tech Blog: https://www.m3tech.blog/entry/2023/03/14/180137
    24

    View Slide

  25. まとめ
    ● 積極採用中!
    ● インターンも募集中!
    ● kannonもインターンPJTで開発された
    ものです!
    ● MLだけでなく、gokart関連の
    MLOpsタスクもあります! 採用情報はコチラ↑
    25

    View Slide