処理のトラッキングとかモデルの管理をしたかったので比較的手軽に扱えそうなMLFlowを試してみる。本稿では基本機能の1つであるtrackingを用いて、scikit-learnでパラメータを変えつつ学習を行い、モデルや結果を保存する。sqlalchemyDBを使って動かす際にsqlalchemyが必要になるので一緒に入れています。MLFlowとはmlflowは下記の3つの機能を持つ。モデルの管理とかデプロイを行うパラメータ変えながら学習してみてスコアがどう変わったか比較したり、実行環境を移植したり、生成されたモデルの中で良い結果のものをデプロイしたりといった日常的な作業をサポートしてくれる。作業ディレクトリの作成mlflowをtrackingするURLを指定せずに実行するとカレントディレクトリにmlrunsというディレクトリが生成され、その中に各種情報が記録される。本項のサンプルコードはhome直下のworkというディレクトリで実行するものとする。f-scoreをトラッキングしてみる。データはwineのデータセットを利用する。mean_scores['test_f1_macro']))scikit-learnのmodel_selection.cross_validateの結果は下記のようにn-foldしたそれぞれのスコアを返してくれます。0.925])}それぞれmeanしてスコアにしてしまう。ui5000番ポートで接続。view(田みたいな絵のボタンで選択)にすると下記画像のような結果が取得できる。生成されたmlrunsディレクトリの中身を確認してみる。1の配下には複数のディレクトリが生成されるが、下記は1つだけ表示して他は省略している。meta.yaml初回実行であればmlruns配下に0と1の2つのディレクトリが生成されているはず。0は名前を設定されていないデフォルトのexperiment。1は今回生成したexperiment。ようにexperimentを設定している。このexperimentのidは下記のようなコードで取れる。1experimentディレクトリの配下には、uuidが名前になっているディレクトリが複数生成されている。これが1つずつの実行(run)の記録で、その配下にartifacts、metrics、paramsがファイルに記録されている。tags(runの直下のフォルダのみ抜粋)artifactはモデルファイルや画像等、どんな形式のファイルでも保存可能なフォルダ。使ってモデルを保存しており、artifact配下にはpickle形式のモデルが保存されている。model.pkl(artifactの配下)metricsやparams配下にはそれぞれ設定した値が1ファイルずつに保存されている。ファイル管理をやめてsqliteやmysql等のRDBに保存することも可能。serverを立ち上げてtrackingした情報がRDBに入るようにしてみる。work配下で下記コマンドを実行し、ローカルでmlflowサーバを起動。--backend-store-uriはsqlalchemyのcreate_engineする時のURLを渡す。artifactここでは2つの引数とも相対パスを指定しているので、コマンドを実行したディレクトリ配下にsqliteのファイルもartifactディレクトリも生成される。実際の運用では絶対パスやs3等のリモート上のパスを指定することが多いと思われる。立ち上げたserverに対してtrackingを行う実行する際は、set_tracking_urlを実行する。set_experiment等のtrackingに対する各種処理を実行するより前に設定する必要がある。いうファイルが生成されている。experiments;0|Default|artifact/0|active1|wine_classify|artifact/1|active先程はファイルで記録されていた情報がDBに入っていることがわかる。指定パス配下にファイルとして置かれる。ファイルの置き場はS3、BLOB、SFTP、NFS、HDFSなどを指定することもできる。実行したrunの結果をPythonのコードで取得してみる。runが所属するexperimentを取得。experiment.experiment_id当該experimentのrun_infoを下記のように取得する。tracking.list_run_infos(exp_id)run_infoには下記のような情報が入っている。timestampuser_idget_runすると指定Runのmetricsやparamsが取れる。'100.0'}試しにparamsやmetricsを含めてrunの情報をpandasに放り込んで、lifecycle_stageがactiveで、statusがFINISHEDなRunの中でtest_f1_macroが最大のデータを抽出してみる。'FINISHED')].copy()df.sort_values('test_f1_macro').head(5)こんな形でtrackingした各種情報は抽出できる。uuidを指定してlist_artifactsすると当該runで保存したartifactの一覧が取れる。path='wine_models'>]download_artifactを実行するとtemporaryファイルに指定のアーティファクトがダウンロードされる。戻り値は保存されたパス。/tmp/tmp8u8irw51/wine_modelsscikit-learnのモデルであればsklearn.load_modelで直接取得することもできる。MLFlowの機能をざっと試す第三弾。MLFlowの機能をざっと試す第二弾。(1)リンク株式会社iMindスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。