luigi の検索結果:
…ーの再利用の仕組み luigi.Config の利用方法 run の中でグローバルなパラメーターとして呼び出す方法 具体的な設定例 課題 継承でパラメーターを共通化する方法 具体的な設定例 課題 gokart.SerializableParameter を利用したパラメーターの共通化 目指すべきパラメーターの共通化方法 gokart.SerializableParameter の使い方 gokart.SerializableParameter の仕組み Tips: 一部のパラ…
…社が開発したツール luigi をベースにしたラッパーとして開発されました。 機械学習における「あるある」な課題を解決するため、再現性の確保や処理の効率化などのノウハウが機能として組み込まれています。 現在も、エムスリーのAI・機械学習チームのメンバーを中心に、OSSとして活発に開発が進められています。 AI・機械学習チームでは、ほぼすべてのPythonプロダクトにおいてgokartを採用しています。これにより、プロダクト間でノウハウを容易に共有できる環境が整っています。 本…
…askOnKart(luigi.Task, Generic[T]): def dump(self, obj: T) -> None: ... この状態ではT型は不定なのですが、ユーザーがHoge(TaskOnKart[str])と指定することによって、T型がstr型に固定されます。 そのため、dumpメソッドにはstr型以外のものを引数に入れるとmypyに怒られるという仕組みになっています。 もっと詳細な実装方法を見たい人は実際のPRを見てみてください。 この型を定義すること…
…モジュール(ここではluigi)のものである確認をする必要があります。visit_importなどでimportしたモジュールを状態として持つことで実現できますが、ここでは簡単のため省きます。 また、次のようにテストもかけるため保守性も悪くなさそうです。 def test_list_parameters_with_assign(self) -> None: # @をコメントとして付記することで、その行のnodeを抽出する node = astroid.extract_node…
…me: str = luigi.Parameter() MyTask(name="mytask") しかしながらPython 本来の文法を振り返って考えてみると、かなりの離れ業であることがわかります。 というのも、本来 Python においてクラス直下の変数はクラス変数でありインスタンス変数ではないためです。 例えば、次のようなコードを実行した場合、name をインスタンス変数として割り当てるというようなコンストラクタが存在しないため、エラーになってしまいます。 class …
…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サーバー上で排他ロックの取得を試みます。 このプロセス中、もし他の…
…いようにするためにはluigiのcentral schedulerを使う方法もあります。 central schedulerは、どのTaskを順に実行すべきかを中央集権的に管理する機能です。 未実行のTaskを把握しながら次に実行すべきTaskを判断できるので、同一Taskを同時に重複して実行するようなことはありません。 luigi.readthedocs.io しかし、central schedulerには、単一障害点になりやすいという問題があります。 central sc…
…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形式)で指定しま…
…ifyが開発しているLuigiのwrapperであり、タスクと呼ばれるクラスを定義し、タスク同士の依存関係を元にパイプラインを管理するツールとなっています。 github.com gokartの特徴のひとつとして、強力なキャッシュ機能があります。 gokartではParameterや依存関係に応じてタスクごとに出力をキャッシュしており、パイプラインを再実行したとき設定が同じなら過去の実行結果を再利用できます。 このキャッシュの利用はパイプライン実行時に自動で行われるため、ユー…
…om gokartはLuigiのラッパーとして開発されているのですが、キャッシュ周りの機能が大幅に強化されています。 完了したタスクの結果をキャッシュファイルに保存する際に、gokartではパラメータや依存関係が変更になったらキャッシュファイルを作り直すようにしています。逆に言うと、設定が同一であれば、過去に完了済みのタスクのキャッシュファイルを安全に再利用できるというわけです。 過去に完了済みのキャッシュファイルを再利用することで、改めてタスクを再実行する必要がなくなり、時…
…ifyが開発しているLuigiのwrapperであり、キャッシュなどを用いてパイプラインの再現性を担保しつつ実行を効率化できるのが特徴です。 gokartについては以下の記事が詳しいので、gokartの詳細はこちらをご参照ください。 www.m3tech.blog 勉強会開催のきっかけ 以下のテックブログの紹介ツイートに、Sansan株式会社 VPoEであり元エムスリーAIチーム、gokartの生みの親である西場(@m_nishiba)さんが反応した事から始まりました。 私達…
…す。 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…
…: 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との大きな差分として中間データをキャッシュするという点があります。同じ処理の結果を別の実験などで再利用したい場合、過去に実行した結果のキャッシュファイルを使い回すことで再度実行が不要になっています。特徴量作成など似たような処理の頻発する機械学習系タスクでは大幅な時間削減が実現しています。もちろん、元データが変わるような場面では処理が再実行され、キャッシュファイルが更新されます。 モデル性能説明手法編 機械学習…
…:Airflow, Luigi, Gokart, Metaflow, Kedro, PipelineX - Qiita 【gokart】Pipelineライブラリによる機械学習ワークフローの開発|はやぶさの技術ノート Luigiで行うパイプライン処理をより円滑に!gokartについて紹介 - Qiita gokartの運用と課題について - Speaker Deck また、今回ドキュメントを拡充し、チュートリアルも作成しましたので、そちらを見て頂く形でも良いかもしれません。 …
…るパイプラインツールluigiのwrapperです。S3やGCSといったクラウドストレージとのデータ入出力をサポートしたり、中間ファイルをキャッシュとして保存することで実験を再現をしやすくしたりします。当ブログでは過去にも機械学習プロジェクト向けPipelineライブラリgokartを用いた開発と運用 - エムスリーテックブログ などで紹介されています。 Github上でOSSとして公開されており、AIチームのメンバーを中心に開発が進められています。 github.com g…
…レームワークとして、Luigi をラップし便利機能を追加したOSSである、Gokartを利用しています。 github.com Gokartでは、処理をTaskという単位に分け、Taskごとに、その処理結果をGCSなどのオブジェクトストレージに出力しています。 こうすることで、リカバリなどの際にワークフローの途中からジョブを再開できたり、debug時の調査などでタスクの出力を確認できるメリットがあります。 一方で、この記事 などで述べられているように、途中結果のデータが嵩張る…
…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'…
… 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がパイプライン…
…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…
…イプラインライブラリluigiのshell補完ツールを作った 12/22 blue0513 業務を効率化するためにツールを自作する ~ Emacs と時々 Electron ~ 12/23 ma2ge サーバサイドアプリケーションにおけるリリース時の不確実性を減らす 12/24 ittoki k8sハニーポットとログ出力の話 12/25 yamamuteki VPoEとしてこの2年間を振り返って 過去のテックブログは以下の通りです。この機会にご一読してみてください。 2015…
…パイプラインとして「luigi」及び、そのwrapperである「gokart」を利用した開発、運用を行なっています。 本記事は、エムスリーとluigiの繋がりと、私が作成したluigiのshell補完をサポートするmodule「luigi-completion」の概要、その使い方について示すものです。 luigi.readthedocs.ioより luigiロゴ はじめに luigi_completion 処理の中身 おわりに We are hiring ! はじめに 前述の…
… Pipelineやluigiを代表に、クラウドや分散環境を意識したDigdagやAirflowといったツールの運用事例も耳にするようになっています。近年ではGoogle Cloud AutoML、Amazon SageMakerといったクラウドサービスとして、機械学習タスクの一部を自動化、Pipeline化する試みも出てきています*3。 そんな中、エムスリー AIチームでもgokartというluigiのwrapperライブラリをOSSとして開発、運用しています。 githu…
…だ整備中なのですが、今まで業務で使っていた徐々に公開していく予定です。今後はOSSとして開発していく部分を増やしていく予定です。 実務で使っているニュースの推薦システム等を公開したら面白いのでは?と思っています。 gokart ... luigiをラップし、タスクの定義を簡単にしている。 redshells ... gokartを使って様々なタスクが定義されている。 まぁこういうことですね。 We are hiring 機械学習エンジニアを募集中です! jobs.m3.com
…にしました。 現在もluigiをベースとしたパイプラインフレームワーク/module群を開発しております。 Archimedes以降に開発されたシステムには既に採用され、モデル開発の効率は格段に向上しました(Archimedesは移行中)。 ↓チームリーダーによる解説記事↓ www.m3tech.blog 学んだこと このケースにおける本当の失敗は、私は改善に至るまで時間がかかった点/改善せずにモデル開発を進めていた時期があった点であると考えています。 2月にジョインした頃、…
…でいます。 なにやらluigiが流行っているらしいので、一部カスタマイズをしました。 本記事はluigiの本家のコードのざっくりとした(Targetに必要な部分の)概要とやり方についてです。 なお、本文中のコードはコメントの削除等いくつか加工しています。 luigiについて luigiはspotifyの開発しているワークフローフレームワークです。 github.com 詳細や使い方などは以前他の方が書いた記事を参照してください。 www.m3tech.blog luigiのフ…
…々改良を加えている luigi をラップしたモジュールを用いて開発をしているのですが、処理フローがわかりやすくなるため 結果の共有や互いのコードのレビューがしやすくなり、日々の業務が効率化されています。 (luigi についての記事はこちら) 最近、社内での業務プロセス改善の一環で、pptx形式のPowerPointファイルからテキスト抽出を自動化し解析を行いました。 そこで今回は pptxファイルからテキストを抽出する方法について共有させていただきます。 目次 1. ppt…
…フレームワークとしてluigiを使っています。 (実際にはluigiをラップしたようなモジュールを作っています。そのうち公開しようと思っています。) 今回は、luigiの使い方について紹介しようと思います。 (luigi==2.7.5で動作確認を行っています。) 基本的な使い方 Taskの基本的な書き方 luigiのタスクを作るには、luig.Taskを継承し、下記3つのメソッドをオーバーライドすれば良いです。 requires() 依存している他のTaskを返します。このタ…