エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

gokart の検索結果:

続・ムダな仕事を増やしてませんか? ~ MLの実行パイプラインでworker間の重複作業をなくす ~

…のブログで、私たちはgokartを使ったMLパイプラインの効率化について掘り下げました。 具体的には、「すでに完了したタスクをスキップする」と「タスクの実行順序をできるだけランダムにする」という2つの戦略を紹介し、これによりworker間で重複するタスクの発生を減らす方法を提案しました。 www.m3tech.blog しかし、このアプローチにも限界がありました。 他workerで完了しているタスクは検知できるのですが、現在実行中のタスクを検知する方法がなく、結果的に重複して…

無駄な仕事を増やしてませんか? ~ MLの実行パイプラインで重複作業をなくす ~

…工夫を紹介します。 gokartでバッチを記述している エムスリーのAIチームでは、パイプラインツールとしてgokartを採用しています。 これは、エムスリーメンバーを中心にOSSで開発が進められている、Pythonのパイプラインライブラリです。 Taskというクラスの単位で処理を記述し、その依存関係を定義することで、依存を解決しながら順に実行していってくれるという特徴を持っています。 github.com AIチームのベースとなるライブラリの1つなので、当ブログでも度々取り…

GKEでMLバッチ運用のコツ

…・機械学習チームでもgokartというパイプラインライブラリを利用しています。 しかし、実際に計算する部分は数時間かかるものがあり、その実行中にEvictionが走るとそれまでに計算した状態ごと消えてしまいます。 Evictionによって学習の途中状態が消される Evictionで困るのはバッチだけではありません。 例えば、レプリカ数が1しかないAPIなどは別のNodeで新たに起動している間にはサービスの断続が出てしまいます。 この様にEvictionを回避したい場合は色々あ…

kannonを実プロダクトに組み込んで3倍高速化を達成した話

…しています。 今回はgokartの分散並列化ライブラリkannonをエムスリーの実プロダクトに組み込んだ取り組みについて紹介します。結果として、社内のとあるプロダクトのIntegration TestのJobを7時間30分から2時間20分に短縮するという、約3.2倍の高速化を達成できました!それまでに生じた苦労、kannonへの追加機能などについてお話しします。 kannonとは? kannonとは、M3が主体となって開発しているOSSのデータパイプラインライブラリgokar…

AI・機械学習チーム流MLOpsの歴史

…構成 2018年: gokart爆誕 gokart gokart用社内ライブラリ 2019年: GKEへの転換 GKE (Google Kubernetes Engine) GKEでのバッチ監視 2020年: GKE改善いろいろ min: 0 オートスケールの積極利用 Workload Identity エラーログの通知 2021年: SLA監視 「エラー発生」の監視から「正常に完了したかどうか」の監視へ Spot VM Berglas Secret Controller 2…

エムスリー、まだまだインターンやってます(というか常にやってますw)。

…Opsエンジニア] gokartのMLパイプラインをKubernetesで並列分散実行できるライブラリkannonを作った話 [MLOpsエンジニア] AI・機械学習チームでのインターンでBigQueryのローカルテスト基盤を作った話 [PdM] エムスリーインターン体験記(プロダクトマネージャー編) [ビジネス] エンジニア内定者がビジネスサイドでインターンしてみて おわりに 本記事では、エムスリーのインターンについてご紹介させていただきました。 これからくる秋冬の季節に立…

gokartの分散並列化ライブラリkannonの中身

…ます。kannonはgokartという機械学習向けパイプラインライブラリを分散並列化して実行できるようにするライブラリです。kannonは2023年3月に私が参加したAI・機械学習チームでのインターンで開発され、OSSとして現在も開発を続けています。 なお、本記事は「gokartで爆速開発!MLOps勉強会」の発表をもとに加筆したものになります。 www.m3tech.blog 発表資料も公開していますので、そちらも是非ご参照ください。 speakerdeck.com また、…

今日から使えるgokart小技集

…そのうちのほとんどがgokartという機械学習向けパイプラインライブラリを使って実装されています。 gokartはとてもMLプロダクトの開発に便利な反面、gokartを100%活用する方法が確立、普及しているとはいえません。 そこで、本記事では、実際にエムスリーで活用しているTipsなどを紹介していこうと思います。 これを機にどんどんgokartの知見がネット上に溢れるようになっていければ嬉しいです。 なお、本記事は「gokartで爆速開発!MLOps勉強会」の発表をもとに加…

ファイル競合を防ぐロック技術 in gokart

…はパイプラインツールgokartでも発生します。 gokartでは実行結果をファイルに書き込みますが、大量のタスクを並列処理すると発生し得ます。 この記事ではgokartでファイル競合をどのように防いでいるかを紹介します。 内容は「gokartで爆速開発! MLOps勉強会」の発表に加筆したものです。 www.m3tech.blog gokartとは gokartでファイル競合が起こる仕組み 既存のキャッシュロック機能とその問題点 改善版キャッシュロック機能を実装 キャッシュ…

【Sansan x エムスリー】gokartで爆速開発!MLOps勉強会をSansan株式会社と共同開催しました!

…n x エムスリー】gokartで爆速開発!MLOps勉強会」を開催しました! 今回のイベントはハイブリッド開催で、オフラインでは満員の30人、オンラインでは101人もの方に参加いただきました。参加いただいた皆様ありがとうございます。 おかげさまで当日は懇親会も含め大盛り上がりで、タイトルの通り「gokartで爆速開発!」するための知見で溢れた勉強会になっていたと思います。 本記事では、参加できなかった方のために当日の様子をお届けしたいと思います。 sansan.connpa…

2023年夏のインターン、はじめました

…Opsエンジニア] gokartのMLパイプラインをKubernetesで並列分散実行できるライブラリkannonを作った話 [MLOpsエンジニア] AI・機械学習チームでのインターンでBigQueryのローカルテスト基盤を作った話 [PdM] エムスリーインターン体験記(プロダクトマネージャー編) [ビジネス] エンジニア内定者がビジネスサイドでインターンしてみて タイトルからも伝わるかと思いますが、エムスリーエンジニアリンググループのインターンでは新サービスの開発からO…

Titanicで学ぶ、実務で使えるgokartの書き方

…no) です。最近はgokartを使ったパイプライン開発に勤しんでます。 皆さんはgokartというものをご存知でしょうか。この記事を開く人は知ってそうですが、gokartとはエムスリーがメンテナンスしている機械学習パイプラインOSSです。もしgokartのことを知らなかった人が居たらこのgokartの記事を読んでください。 エムスリー内ではこれを全面的に利用して開発を行なっていますが、その知見は社内に閉じてるものも多いです。そこでエムスリー内でどんな感じでgokartを使っ…

エムスリーのMLインターンへようこそ!

…リー発のOSSであるgokartの並列分散実行に取り組んでくれた小栗さんなどがインターンの様子を伝えてくれています。 www.m3tech.blog www.m3tech.blog エンジニアリング寄りの課題はお二人の記事に譲るとして、MLはどういうことするの? そもそもどういう流れなの? という方が多いかと思います。 そこで今回は、ML課題におけるインターンの流れを紹介し、京都大学大学院の唐井さんが取り組んでくれた「ユーザーの投稿確認システムの改善」というテーマを例にインタ…

cruft実践入門 ~cookiecutter templateの変更に追従する~

…kiecutter-gokart 上記コマンドで、cookiecutterからプロジェクトを作る時と同じように、templateの値についての質問されるので、プロジェクトを作った時と同じ値を回答します。そうすると下記のようにcruft.jsonが作成されます。 { "template": "https://github.com/m3dev/cookiecutter-gokart", "commit": "25b2ea60fd1b3145908b750fc0e42e130913…

僕がAIチームで知っている技術スタックまとめ

… Goa 実験管理 gokart*3, kannon*4 便利ツール cookiecutter, kj*5 機械学習ライブラリ LightGBM, PyTorch, Implicit CI GitLabCI 開発言語について AIチームではAI開発とAPI開発をセットでやることが多いです。そのためAI用のPythonとAPI用のGoのセットがメイン言語となってます。ただ、これで作らなくてはいけないということはなくRustを使ったAPI等もあり、要件を満たすなら色んな言語を使う…

gokartのMLパイプラインをKubernetesで並列分散実行できるライブラリkannonを作った話

…プラインOSSであるgokart をKubernetes上で高速にかつ簡単に実行できるようになるライブラリであるkannon('cannon'と同じ発音!)をゼロから実装し、OSSとして公開しました。 github.com この記事ではkannonの技術的な解説、インターンに参加した感想をお伝えします! gokartの概要 gokartの抱えていた課題 シングルスレッドでの逐次実行により実行時間が長くなってしまう GKEのリソースを効率的に使えない kannonの概要 kan…

2022年 AI・機械学習チームのベストMR決定戦

…3mushroom(gokart Task集)とm3downloader(BQ等のデータのETLライブラリ) という2つのPythonのライブラリを作っており、各PJ -> m3mushroom -> m3downloader -> BQのtableという依存があるのですが、新しいデータを使う際に2つのライブラリのリリースをする必要があり、MRとレビューが分散して見にくいという問題がありました。 このMRでは、ライブラリ同士のリリースの独立性は保ったまま(2つのライブラリのま…

毎日追加学習する機械学習モデルを、日次実行を止めずにコードをバージョンアップしたい

…パイプラインツール・gokartを使うことで解消しています。gokartを使うことで、変更のあった部分だけコードを実行できます。コメントの追加のような軽微な修正の場合、これまでのコードとほとんど重複するため、ほとんどのコードが実行されず、過去のキャッシュを流用できます。これにより、非常に短時間でモデル作成を完了できます。 gokartの詳しい説明は過去の当ブログをご参照ください。 www.m3tech.blog www.m3tech.blog まとめ この記事では前日モデルに…

Rust製パターンマッチングマシンDaachorseを使ってPythonパイプラインを高速化する話

…インにPythonのgokartというモジュールを全面的に利用しており、基本的に何かを実装するときはPythonで開発されることが多いです。gokartに現行のデータ処理ロジックが乗っている以上、全てをRustで書き換えるのはかなりの大工事です。そこでロジック部分だけRustで書き直して高速化できないかと考えました。 そして調べてみるとDaachorseのPythonバインディング公開されていたので、こちらを利用することにしました。 github.com python-daa…

BigQuery向けクエリの社内ライブラリのCIを整えて料金を抑える

…製のライブラリであるgokartと組み合わせて使うことによって、結果をキャッシュして使えます。 これはスキャン量課金であるBigQueryとの相性が良く、お財布に優しく使うことができます。 そして、チーム内でよく使うクエリについてはPythonライブラリとして社内PyPiでライブラリとして使用しています。 このライブラリの利点としては 同じようなクエリを何度も書かなくて良い 修正時に一箇所の変更で済む 改善施策をまとめて出来る ということが挙げられます。 しかし、いくつかの問…

数量を機械学習で当てる モデル作成時の工夫と性能説明手法

…問題に対処するため、gokartというPython向けパイプラインライブラリを開発し活用しています。これにより、特徴量作成からモデル学習・推論までを一気通貫に実行できるようになり、特徴量データファイルとモデルファイルの対応関係などを意識する必要がなくなっています。 github.com gokartはエムスリーのメンバーを中心に開発が進められているパイプラインライブラリです。luigiのラッパーライブラリですが、luigiとの大きな差分として中間データをキャッシュするという点…

MLのバッチでもSLO監視はじめました。

…社謹製のツールであるgokartで動いています。 2021/11現在CronJobの数を数えてみたところ88個のCronJobがありました。 AI・機械学習チームは現在14人ほどのチームなので、単純計算で一人6個のJobを監視しないといけません。 恐ろしいことですね。 この事態をなんとか改善しようと、チーム内でrunbook委員会が立ち上がりそれぞれのプロダクトのrunbookを充実や監視体制の強化することにしました。1 このrunbookの取り組みについてはまた何かの形でア…

gokart 1.0.0 をリリースしました

…Sのうちの1つであるgokartのversion 1.0.0をリリースする運びとなりました。 本記事は、これまでのgokartの軌跡と成果を紹介しつつ、内情を含めながら、gokart 1.0.0に込めた想いを綴るものです。 はじめに gokartとは gokart 1.0.0 ドキュメントの拡充とロゴの追加 gokart.build gokartメジャーバージョンリリースに寄せて おわりに gokartとは gokartは、元チームリーダーであった西場さん@m_nishiba…

パイプラインツールgokartのキャッシュ競合を解消した話

…タパイプライン構築にgokartというツールを使用しています。今回はこのgokartで発生していたキャッシュ競合を解消した話について紹介します。 gokart gokartとは gokartというのはAIチームが中心に開発しているデータパイプライン構築のためのツールで、Spotify社の開発するパイプラインツールluigiのwrapperです。S3やGCSといったクラウドストレージとのデータ入出力をサポートしたり、中間ファイルをキャッシュとして保存することで実験を再現をしやす…

GCS bucketの利用量をSlackに通知する

…加したOSSである、Gokartを利用しています。 github.com Gokartでは、処理をTaskという単位に分け、Taskごとに、その処理結果をGCSなどのオブジェクトストレージに出力しています。 こうすることで、リカバリなどの際にワークフローの途中からジョブを再開できたり、debug時の調査などでタスクの出力を確認できるメリットがあります。 一方で、この記事 などで述べられているように、途中結果のデータが嵩張る問題が出てきています。 実際、Gokartキャッシュを…

Kaggle "Mechanisms of Action (MoA) Prediction" に参加し4位に入賞した話

…ームで開発している gokart は機械学習のプロダクトを扱うPipelineとしてはとても魅力的なキャッシュ機構を備えており、Task間の依存関係を記述することで "巨大な行列を生成するTask自体をキャッシュする" ことができるため、入力の同一性の判定問題をうまく回避しています。 Kaggleでもgokartが使えればよいのですが、gokartどころかluigiさえもKaggle notebookのDocker imageには入っていないため、gokart (+ luig…

Nishika competitions 2nd solution

…プラインの選定としてgokartはどうだったか おわりに We are hiring !! コンペティション概要 青空文庫に登録されている10作家の作品、計4732作品の中から芥川龍之介の作品を機械学習で見つけるものです。 答えとなるデータは青空文庫で公開されている訳ですが、こちらを利用するのはもちろんルール上で禁止されています。 データ内には以下のような文章データと著者が芥川龍之介であるか否かの情報が含まれている、シンプルな2値分類の問題です。 writing_id,bod…

推薦アイテムセットの多様性を考慮したBPR論文を実装・実験した

…pd import gokart import luigi class MakePairedData(gokart.TaskOnKart): task_namespace = 'novelty_enhanced_bpr' click_task = gokart.TaskInstanceParameter() positive_sample_weight: int = luigi.IntParameter() distance_threshold: float = luigi.…

機械学習パイプラインライブラリluigiのshell補完ツールを作った

…rapperである「gokart」を利用した開発、運用を行なっています。 本記事は、エムスリーとluigiの繋がりと、私が作成したluigiのshell補完をサポートするmodule「luigi-completion」の概要、その使い方について示すものです。 luigi.readthedocs.ioより luigiロゴ はじめに luigi_completion 処理の中身 おわりに We are hiring ! はじめに 前述の通り、エムスリーAIチームでは、機械学習プロ…

機械学習プロジェクト向けPipelineライブラリgokartを用いた開発と運用

…nライブラリである「gokart」の説明と、その周辺ライブラリとなる「cookiecutter-gokart」「thunderbolt」「redshells」について紹介したいと思います。よろしくお願いします。 はじめに Pipeline化のメリット・デメリット Pipeline化のメリット Pipeline化のデメリット gokart 共通化のための出力ファイル形式の制約と拡張 強力かつ簡易な再現性のためのデータ保持 クラウドサービスやSlack通知のサポート gokart…