エムスリーテックブログ

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

luigi の検索結果:

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

…askOnKart(luigi.Task): def __init__(self, *args, **kwargs): ... self.run = wrap_run_with_lock(run_func=self.run, task_lock_params=task_lock_params) run()メソッドの実行開始時には、タスクのパラメータから算出されるハッシュ値を基にした文字列キーを用いて、Redisサーバー上で排他ロックの取得を試みます。 このプロセス中、もし他の…

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

…いようにするためにはluigiのcentral schedulerを使う方法もあります。 central schedulerは、どのTaskを順に実行すべきかを中央集権的に管理する機能です。 未実行のTaskを把握しながら次に実行すべきTaskを判断できるので、同一Taskを同時に重複して実行するようなことはありません。 luigi.readthedocs.io しかし、central schedulerには、単一障害点になりやすいという問題があります。 central sc…

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

…terConfig(luigi.Config): param: str = luigi.Parameter() param2: str = luigi.Parameter() @inherits_config_params(MasterConfig) class SomeTask(gokart.TaskOnKart): param: str = luigi.Parameter() このconfigに含まれるパラメータは、以下のようなconfigファイル(ini形式)で指定しま…

今日から使えるgokart小技集

…ifyが開発しているLuigiのwrapperであり、タスクと呼ばれるクラスを定義し、タスク同士の依存関係を元にパイプラインを管理するツールとなっています。 github.com gokartの特徴のひとつとして、強力なキャッシュ機能があります。 gokartではParameterや依存関係に応じてタスクごとに出力をキャッシュしており、パイプラインを再実行したとき設定が同じなら過去の実行結果を再利用できます。 このキャッシュの利用はパイプライン実行時に自動で行われるため、ユー…

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

…om gokartはLuigiのラッパーとして開発されているのですが、キャッシュ周りの機能が大幅に強化されています。 完了したタスクの結果をキャッシュファイルに保存する際に、gokartではパラメータや依存関係が変更になったらキャッシュファイルを作り直すようにしています。逆に言うと、設定が同一であれば、過去に完了済みのタスクのキャッシュファイルを安全に再利用できるというわけです。 過去に完了済みのキャッシュファイルを再利用することで、改めてタスクを再実行する必要がなくなり、時…

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

…ifyが開発しているLuigiのwrapperであり、キャッシュなどを用いてパイプラインの再現性を担保しつつ実行を効率化できるのが特徴です。 gokartについては以下の記事が詳しいので、gokartの詳細はこちらをご参照ください。 www.m3tech.blog 勉強会開催のきっかけ 以下のテックブログの紹介ツイートに、Sansan株式会社 VPoEであり元エムスリーAIチーム、gokartの生みの親である西場(@m_nishiba)さんが反応した事から始まりました。 私達…

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

…す。 import luigi from titanickart.processing.download_data import DownloadData from titanickart.processing.make_features import MakeFeatures from titanickart.processing.model import PredictXGBoostModel from titanickart.processing.submit impo…

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

…: param = luigi.Parameter() def run(self): self.dump(f"DONE: TaskA0 (param={self.param})") class TaskB(gokart.TaskOnKart): parent_0 = gokart.TaskInstanceParameter() def requires(self): return dict(parent_0=self.parent_0) def run(self): pare…

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

…インライブラリです。luigiのラッパーライブラリですが、luigiとの大きな差分として中間データをキャッシュするという点があります。同じ処理の結果を別の実験などで再利用したい場合、過去に実行した結果のキャッシュファイルを使い回すことで再度実行が不要になっています。特徴量作成など似たような処理の頻発する機械学習系タスクでは大幅な時間削減が実現しています。もちろん、元データが変わるような場面では処理が再実行され、キャッシュファイルが更新されます。 モデル性能説明手法編 機械学習…

gokart 1.0.0 をリリースしました

…:Airflow, Luigi, Gokart, Metaflow, Kedro, PipelineX - Qiita 【gokart】Pipelineライブラリによる機械学習ワークフローの開発|はやぶさの技術ノート Luigiで行うパイプライン処理をより円滑に!gokartについて紹介 - Qiita gokartの運用と課題について - Speaker Deck また、今回ドキュメントを拡充し、チュートリアルも作成しましたので、そちらを見て頂く形でも良いかもしれません。 …

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

…るパイプラインツールluigiのwrapperです。S3やGCSといったクラウドストレージとのデータ入出力をサポートしたり、中間ファイルをキャッシュとして保存することで実験を再現をしやすくしたりします。当ブログでは過去にも機械学習プロジェクト向けPipelineライブラリgokartを用いた開発と運用 - エムスリーテックブログ などで紹介されています。 Github上でOSSとして公開されており、AIチームのメンバーを中心に開発が進められています。 github.com g…

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

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

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

…gokartどころかluigiさえもKaggle notebookのDocker imageには入っていないため、gokart (+ luigi) の機能を一部参考に、入力に応じてキャッシュしてくれるデコレータを書いてみました。 lishmoa/src/utils/cache.py import time @Cache('./cache_dir') def process(param_a: int, param_b: str): time.sleep(5) return f'…

Nishika competitions 2nd solution

… library "luigi" redshells: GitHub - m3dev/redshells: Machine learning tasks which are used with data pipeline library "luigi" and its wrapper "gokart". gokartによって全てのパラメータと乱数シード値、CVの値の組み合わせを全て自動で保存、rerunを簡易に行えるようになっています。 また、redshellsがパイプライン…

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

…rt 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.FloatParameter…

エムスリー Advent Calendar 2019 まとめ!

…イプラインライブラリluigiのshell補完ツールを作った 12/22 blue0513 業務を効率化するためにツールを自作する ~ Emacs と時々 Electron ~ 12/23 ma2ge サーバサイドアプリケーションにおけるリリース時の不確実性を減らす 12/24 ittoki k8sハニーポットとログ出力の話 12/25 yamamuteki VPoEとしてこの2年間を振り返って 過去のテックブログは以下の通りです。この機会にご一読してみてください。 2015…

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

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

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

… Pipelineやluigiを代表に、クラウドや分散環境を意識したDigdagやAirflowといったツールの運用事例も耳にするようになっています。近年ではGoogle Cloud AutoML、Amazon SageMakerといったクラウドサービスとして、機械学習タスクの一部を自動化、Pipeline化する試みも出てきています*3。 そんな中、エムスリー AIチームでもgokartというluigiのwrapperライブラリをOSSとして開発、運用しています。 githu…

Factorization Machineの実装と数値検証

…だ整備中なのですが、今まで業務で使っていた徐々に公開していく予定です。今後はOSSとして開発していく部分を増やしていく予定です。 実務で使っているニュースの推薦システム等を公開したら面白いのでは?と思っています。 gokart ... luigiをラップし、タスクの定義を簡単にしている。 redshells ... gokartを使って様々なタスクが定義されている。 まぁこういうことですね。 We are hiring 機械学習エンジニアを募集中です! jobs.m3.com

推薦システムの改修と機械学習システムの開発プロセス改善、実施中!

…にしました。 現在もluigiをベースとしたパイプラインフレームワーク/module群を開発しております。 Archimedes以降に開発されたシステムには既に採用され、モデル開発の効率は格段に向上しました(Archimedesは移行中)。 ↓チームリーダーによる解説記事↓ www.m3tech.blog 学んだこと このケースにおける本当の失敗は、私は改善に至るまで時間がかかった点/改善せずにモデル開発を進めていた時期があった点であると考えています。 2月にジョインした頃、…

luigiのtargetを自分で書くための解説

…でいます。 なにやらluigiが流行っているらしいので、一部カスタマイズをしました。 本記事はluigiの本家のコードのざっくりとした(Targetに必要な部分の)概要とやり方についてです。 なお、本文中のコードはコメントの削除等いくつか加工しています。 luigiについて luigiはspotifyの開発しているワークフローフレームワークです。 github.com 詳細や使い方などは以前他の方が書いた記事を参照してください。 www.m3tech.blog luigiのフ…

PowerPointファイルからのテキスト抽出

…々改良を加えている luigi をラップしたモジュールを用いて開発をしているのですが、処理フローがわかりやすくなるため 結果の共有や互いのコードのレビューがしやすくなり、日々の業務が効率化されています。 (luigi についての記事はこちら) 最近、社内での業務プロセス改善の一環で、pptx形式のPowerPointファイルからテキスト抽出を自動化し解析を行いました。 そこで今回は pptxファイルからテキストを抽出する方法について共有させていただきます。 目次 1. ppt…

機械学習で便利なluigiフレームワークの紹介

…フレームワークとしてluigiを使っています。 (実際にはluigiをラップしたようなモジュールを作っています。そのうち公開しようと思っています。) 今回は、luigiの使い方について紹介しようと思います。 (luigi==2.7.5で動作確認を行っています。) 基本的な使い方 Taskの基本的な書き方 luigiのタスクを作るには、luig.Taskを継承し、下記3つのメソッドをオーバーライドすれば良いです。 requires() 依存している他のTaskを返します。このタ…