PyData.Tokyo Meetup #23での発表資料です
CyberAgent AI Labを支えるCloud実験環境PyData.Tokyo 20210526Yuki IWAZAKI@chck / CyberAgent AI Lab
View Slide
Hello!I am Yuki IWAZAKI@chck◦ 2014...Backend Engineer (Ruby/Scala)└2017...ML/DS (Scala/Python)└2018-...Research Engineer in AI Lab◦ Multimedia (Vision & Language)2
CyberAgent AI Labの規模感人数(35) 研究領域3
AI Labを支えるEcosystem4
AI Labを支えるEcosystem5
AI Labを支えるEcosystemData selectionailab-datasets6
tensorflow-datasetsPublic Datasetのdata loader7celeb_aimagenet, cifar10, mnistcocosquadiris, movielens, titaticimdb, wiki40byoutube_vishttps://www.tensorflow.org/datasets/catalog/overview
tensorflow-datasetsPublic Datasetのdata loader8celeb_aimagenet, cifar10, mnistcocosquadiris, movielens, titaticimdb, wiki40byoutube_vishttps://www.tensorflow.org/datasets/catalog/overviewDataset名を指定Iterationの定義
tensorflow-datasets: load“tensorflow” とあるが, numpyやpandas形式で出力できる9
tensorflow-datasets: load“tensorflow” とあるが, numpyやpandas形式で出力できる10tf.datanumpypandas
tensorflow-datasets: createtfds cliからtemplateを生成11
12
13VersioningMetadata.カラムの型の定義データの説明文引用論文のURLデータのダウンロード分割方法の指定前処理含むGenerator
14
15前処理含むGenerator(apache-beam pipeline)
Private dataの課題感◦ Private dataの管理にルールがない◦ 全プロダクトのデータ集約基盤はResearcher向けじゃない◦ 各々がオレオレJupyterlabで実験◦ 前処理の冪等性担保や共有が困難◦ とにかく属人的で難解なSQL◦ Public -> Private dataでの実験◦ インターンや新メンバーの学習コスト◦ 急にDomain知識が必要になるpreprocesspreprocesspreprocessproduct_adataset_cproduct_b16
ailab-datasets◦ mnist.loadのようにメンテフリーに扱いたい◦ Domain知識をコード内に埋め込みたい◦ tensorflow-datasetsのwrapper◦ Lab共通のPrivate Dataset Loader◦ 社内githubからpip installで利用1. Data追加が簡単2. ProductやTaskの単位でVersioning3. Apache Beamによる高速な前処理product_aproduct_bdataset_cproduct_adataset_cproduct_bailab-datasets17
ailab-datasetsproduct_aproduct_bdataset_cproduct_adataset_cproduct_bailab-datasets18ailab_datasets/┣products/┃┣product_a┃┗product_b┣image_classification/┗text_generation/
PowerfulなDataset RunnerApache BeamによりCPU並列, Worker並列が選択可能https://towardsdatascience.com/running-an-apache-beam-data-pipeline-on-azure-databricks-c09e521d8fc3 19
ailab-datasets -> post-process利用者がデータ規模に応じて後段の処理を自由に選択可能20ailab-datasetsTensorflowTransformtf.data Numpy PandasDask-cuDFDistributedGPU CPUApache Beam
AI Labを支えるEcosystemModelingailab-model-zoo21
Private modelの課題感◦ 似たデータ,似たタスクによるモデルの再発明が多発◦ 例えば広告×NLPや広告×CVでpretraining taskが収束してくる◦ Researcher間で重みシェアしたい欲高まる◦ 誰がどんな学習済モデルを秘蔵しているかが把握しづらい状況◦ Aさんの学習済モデルはBさんに応用できるかも◦ Public pre-trained modelのprivate版がほしかった◦ ResNet(on imagenet)やBERT(on ja-wiki)の社内データ版22
ailab-model-zoo (WIP)tensorflow-hubのManaged版であるAI Hub(GCP)を利用以下3つがPrivateに共有可能:- kubeflow pipeline- notebook- trained model23
ailab-model-zoo (WIP)“tensorflow” とあるが,実体はuploadしたobjectの検索serviceMetadataを入力して共有したいobjectをuploadtf.hubのself-hostingも可能だが現状はAI Hubで必要十分tensorflow/hub/issues/26624
ailab-model-zoo (WIP)検索機能付きで管理しやすく,Downloadして利用25Public model Private model
AI Labを支えるEcosystemailab-mlflowEvaluation26
実験管理の課題感Teamや個人で実験管理がしたいFree: MLflow, KeepsakeSaaS: Neptune.ai, Comet.ml, WandbMLflowはServer構築が面倒SaaS系は個人の無料枠を超えると高い27
実験管理の課題感MLflow Serverを1つ立てて使い回しでもよいが,Experiments枠で各Userの実験を分けると煩雑個人やチームごとに1MLflowあるとBetter28■ Write■ Read
ailab-mlflowAI Lab共通で使えるMLflow Clusterを構築OSSのMLflow Tracking ServerをLab PrivateでHostingGCP Resourceで各ユーザはCost/Server管理要らずGmail Whitelist Accessなので共同研究先との利用にも29
30
31
32
33
Cloud IAPによるユーザ認証34Not Authorized
How to track1. Terraformで$user endpointを作成2.Training codeからOAuth Token発行3.Serverに向けて実験ログを飛ばす4.${MLFLOW_HOST}/${USER}にアクセス5.実験結果を自由に管理35
Summary- 実験の流れ- Data (ailab-datasets)- -> Preprocess (tft, tf.data, numpy, pandas)- -> Training (ai platform training)- -> Save model (ailab-model-zoo)- -> Report (ailab-mlflow)OSSを上手くwrapすることでメンテコストを抑えた実験サポート環境を実現36
Future work: ailab-pipeline- 実験の流れ- Data (ailab-datasets)- -> Preprocess (tft, tf.data, numpy, pandas)- -> Training (ai platform training)- -> Save model (ailab-model-zoo)- -> Report (ailab-mlflow)全体のPipelineもうまいこと管理したいが...Pipeline37
どう布教させるかの話ResearcherはCloudの新技術とかに拘らない傾向意外と使ってくれないのでTutorialや事例を地道に増やす,共著で入るときにこっそり導入してしまう全体のPipelineを設計して自由度を下げるよりも、まずはパーツ部分に注力し、利用者側が取捨て選択できるように38
ailab-mlflowの構築方法近々blog公開するのでぜひhttps://cyberagent.ai/blog/research/39
40Thanks!Any questions?You can find me at:◦ github@chck◦ [email protected]