3.2K Views
March 29, 22
スライド概要
2022/3/24に開催した「オンプレML基盤 on Kubernetes」の資料です。機械学習モデルの開発者が、よりモデルの開発にのみ集中できるようにすることを目指して開発している「LakeTahoe(レイクタホ)」について紹介します。
https://ml-kubernetes.connpass.com/event/239859/
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
LakeTahoe ヤフー株式会社 サイエンス統括本部 ⽥頭 幸浩 Copyright ©2022 (C)Yahoo 2020 Japan Yahoo Corporation Japan Corporation. All rightsAllreserved. Rights Reserved.
アジェンダ 1. LakeTahoe 2. LakeTahoe Notebooks ©2022 Yahoo Japan Corporation All rights reserved. 2
LakeTahoe ©2022 Yahoo Japan Corporation All rights reserved. 3
LakeTahoeとは • 機械学習ジョブのためのREST API • Kubernetes上で稼働(REST API⾃体はKubernetesのAPIとは独⽴) • 特徴 • 分散学習のためのリソース確保 • システム組み込みのハイパーパラメータ探索 • ランダムサーチ、グリッドサーチ、ベイズ最適化(デフォルト) • 並列での探索も可能 ©2022 Yahoo Japan Corporation All rights reserved. 4
学習ジョブの投⼊ • ⼤まかな⼿順 1. Pythonで学習スクリプトを作成してパッケージ化 2. 学習ジョブの設定ファイルを記述 • 上記のパッケージや必要な計算リソースなどを指定 3. APIのエンドポイントにリクエスト ©2022 Yahoo Japan Corporation All rights reserved. 5
学習ジョブの設定ファイルの例(YAML形式) 1ノードでのシンプルな学習 trainingInput: scaleTier: BASIC_GPU コンテナイメージの指定 masterConfig: imageUri: ”container-registry.example.com/aipf/laketahoe-custom-tensorflow-gpu:latest" args: - "--module-name" - "trainer.task" - "--packages" - "hdfs://path/to/packages/tf_probability_mnist-1.0.tar.gz" - "--data-path" - "hdfs://path/to/data/mnist.npz" 学習スクリプトを含む - "--num-epochs" パッケージのパスを指定 - "10" - "--num-monte-carlo" - "50" - "--fake-data" - "False” hyperparameters: (次のスライドを参照) ©2022 Yahoo Japan Corporation All rights reserved. 6
ハイパーパラメータチューニングの設定例(YAML形式) trainingInput: (前のスライドを参照) hyperparameters: hyperparameterMetricTag: accuracy goal: MAXIMIZE maxTrials: 2 maxParallelTrials: 1 params: - parameterName: batch-size type: INTEGER minValue: 64 maxValue: 256 scaleType: UNIT_LINEAR_SCALE - parameterName: learning-rate type: DOUBLE minValue: 0.001 maxValue: 0.01 scaleType: UNIT_LOG_SCALE “accuracy”の最⼤化 “batch-size”というパラメータは整数で 範囲内は線形スケール “learning-rate”というパラメータは実数で 範囲内は対数スケール ©2022 Yahoo Japan Corporation All rights reserved. 7
さまざまな設定例 trainingInput: (省略) hyperparameters: hyperparameterMetricTag: accuracy goal: MAXIMIZE algorithm: GRID_SEARCH グリッドサーチ maxTrials: 9 maxParallelTrials: 5 params: - parameterName: learning_rate type: DISCRETE discreteValues: 離散値の場合 - 0.3 - 0.5 (順序関係あり) - 0.7 scaleType: UNIT_LINEAR_SCALE - parameterName: max_depth type: INTEGER minValue: 4 maxValue: 8 scaleType: UNIT_LINEAR_SCALE trainingInput: “loss”の最⼩化 (省略) hyperparameters: hyperparameterMetricTag: loss goal: MINIMIZE algorithm: GRID_SEARCH maxTrials: 3 maxParallelTrials: 1 params: - parameterName: model type: CATEGORICAL categoricalValues: - LSTM - GRU - Transformer ©2022 Yahoo Japan Corporation All rights reserved. カテゴリの場合 (順序関係なし) 8
acloud • LakeTahoeのAPI操作を⾏うCLIツール • OpenID Connect基盤を⽤いた認証 • 学習ジョブの投⼊、⼀覧表⽰、詳細表⽰、キャンセル • 実⾏例 $ acloud auth login $ acloud laketahoe jobs submit training <ジョブID> ¥ --config <ジョブ定義YAMLファイルのパス> $ acloud laketahoe jobs describe <ジョブID> --summarize ©2022 Yahoo Japan Corporation All rights reserved. 9
ワークフローツールとの連携 • シンプルなREST APIなので連携も容易 • Argo WorkflowsやApache Airflowなどから利⽤されることが多い ©2022 Yahoo Japan Corporation All rights reserved. 10
LakeTahoe Notebooks ©2022 Yahoo Japan Corporation All rights reserved. 11
LakeTahoe Notebooksとは • JupyterLab環境の作成や削除を⾏うREST API • インスタンスの作成や停⽌、再開、削除 • JupyterLabはインタラクティブなプログラミング環境を提供するOSS • Hive, Presto(Trino), Sparkなどにアクセスする環境としても 利⽤されている ©2022 Yahoo Japan Corporation All rights reserved. 12
JupyterLabの画⾯例 ©2022 Yahoo Japan Corporation All rights reserved. 13
JupyterLabの画⾯例 ©2022 Yahoo Japan Corporation All rights reserved. 14
JupyterLabの画⾯例 ©2022 Yahoo Japan Corporation All rights reserved. 15
Webアプリ • WebブラウザからJupyterインスタンスの操作が可能 ©2022 Yahoo Japan Corporation All rights reserved. 16
標準コンテナイメージ • 「すぐに使える」コンテナイメージを開発チームで整備 • よく使われるPythonパッケージを⼀通りインストール済み ©2022 Yahoo Japan Corporation All rights reserved. 17
標準コンテナイメージのアップデート • 週1回以上は⾃動でアップデート • Pythonパッケージは最新版をインストール • 例外として、CUDAのバージョンに制約がある場合などはバージョンを固定 • パッケージのバージョンを固定したい場合︓ • 個別のPython環境をvenvなどで作成 • 独⾃のコンテナイメージを作成 ©2022 Yahoo Japan Corporation All rights reserved. 18
Appendix ©2022 Yahoo Japan Corporation All rights reserved. 19
LakeTahoeの名前の由来 Yahoo!地図より タホ湖 ©2022 Yahoo Japan Corporation All rights reserved. 20
LakeTahoeの名前の由来 • 2012年の12⽉にタホ湖で何があったのかはこの本を参照 • hIp://books.cccmh.co.jp/list/detail/2348/ ©2022 Yahoo Japan Corporation All rights reserved. 21
Role Base Access Control • Athenzを⽤いたロールベースのアクセス制御 • REST APIにリクエストを送信する際に︓ • HTTPのauthorizationヘッダにトークンを付与する • mTLS(クライアント証明書)を⽤いる ©2022 Yahoo Japan Corporation All rights reserved. 22
LakeTahoeのアーキテクチャ概要 DB 読み書き ユーザー HTTP リクエスト LakeTahoe 読み書き API コントローラー 読み書き HDFSなどの ストレージ 操作 読み書き 学習Pod K8s API 作成 ©2022 Yahoo Japan Corporation All rights reserved. ACP
LakeTahoeのアーキテクチャ概要 DB 読み書き ユーザー HTTP リクエスト LakeTahoe 読み書き API コントローラー 読み書き 操作 HDFSなどの • 基本的にはKubernetesのカスタムコントローラー 学習Pod ストレージ • controller-runtimeを利⽤ 読み書き • K8s API ただしCRDを⽤いる代わりに外部のデータベースに状態を保存 • マルチテナントなKubernetesでCRDを登録したくなかった 作成 ©2022 Yahoo Japan Corporation All rights reserved. ACP
LakeTahoeジョブの利⽤状況 • テーブルデータやテキストデータを⽤いたタスクが多い • GBDTとDNNの両⽅が利⽤されている • 分散処理 • ハイパーパラメータチューニングを並列分散で⾏うことが多い • 1つのタスク(Trial)でマルチノードを使った分散学習は少数派… • 1ノード上のマルチGPU学習はそれなりに ©2022 Yahoo Japan Corporation All rights reserved. 25
リソースの有効活⽤ • ジョブと⽐較して、Jupyterインスタンスのリソース効率は どうしても低い • ユーザーの利便性を損ねることなく賢くインスタンスを停⽌したい • Prometheusに各種メトリクスを保存しているので、 このデータをもとに判定を⾏う • 接続状況やリソース利⽤量などの時系列データ • 現在は単純なルールベースだが、将来的には機械学習モデルで予測したい ©2022 Yahoo Japan Corporation All rights reserved. 26
ユーザーとのコミュニケーション • Slackのpublicチャンネルで質問や要望などを受け付け • すぐに解決できるものはすぐに着⼿ • 質問しやすい空気 & 回答があるという信頼をどうやって得るか… • Slackのハドルミーティングで相談会を不定期開催 • リアルタイムコミュニケーションをどう取り⼊れていくか試⾏錯誤中 ©2022 Yahoo Japan Corporation All rights reserved. 27
©2022 Yahoo Japan Corporation All rights reserved.