Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

kannon: アーキテクチャ “Master Job” … GCS Bucket (Cache) save & load cache create job 7

Slide 8

Slide 8 text

kannon: アーキテクチャ “Master Job” … GCS Bucket (Cache) save & load cache create job Master Jobが 中央管理 8

Slide 9

Slide 9 text

kannon: アーキテクチャ “Master Job” … GCS Bucket (Cache) save & load cache create job Task Queueを構築 9

Slide 10

Slide 10 text

kannon: アーキテクチャ “Master Job” … GCS Bucket (Cache) save & load cache create job 全Job共有のキャッ シュ 10

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

まとめ ● 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

Slide 25

Slide 25 text

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