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

MLパイプラインをk8sで並列分散化するOSS "kannon"の開発

MLパイプラインをk8sで並列分散化するOSS "kannon"の開発

Yutaro Oguri

April 17, 2023
Tweet

More Decks by Yutaro Oguri

Other Decks in Programming

Transcript

  1. 自己紹介 名前: Yutaro Oguri (Twitter: @irungo_ic ) 所属: 東京大学 電子情報工学科

    B4 興味: ML, CV, Search, MLOps, DB, …など(色々) k8s歴: よくわからないままkubectl叩く(6 months) + kannon開発(1 month) 趣味: 🎻 🍶 🍺
  2. gokartとは? - エムスリー発の機械学習パイプラインOSS - 社内ではGKEのCronJobで運用 class TaskA(gokart.TaskOnKart): ... class TaskB(gokart.TaskOnKart):

    parent_0 = gokart.TaskInstanceParameter() def requires(self): return dict(parent_0=self.parent_0) ... task_a = TaskA(param="a") task_b = TaskB(parent_0=task_a) … output = gokart.build(root) DAG ( -> means ‘requires’)
  3. kannonの使い方 class TaskA(gokart.TaskOnKart): # Change gokart.TaskOnKart -> kannon.TaskOnBullet class TaskB(kannon.TaskOnBullet):

    # Change gokart.TaskOnKart -> kannon.TaskOnBullet class TaskC(kannon.TaskOnBullet): class TaskD(gokart.TaskOnKart): Kannon(...).build(task) ここをいい感じに 分散したい...
  4. k8s的な面白さ 1. k8s in k8s - master jobがchild jobをcreate・watch 2.

    分散キャッシュ - あるJobが他のJobの結果に依存する => 共通の場所(GCS Bucket)にcache 3. 分散した複数jobの制御・管理 - Task Queueを構築し、順序制御をしつつ無駄な待ち無く分散 詳しく解説!