Mlflow で実験を「永久に」削除するにはどうすればいいですか? 質問する

Mlflow で実験を「永久に」削除するにはどうすればいいですか? 質問する

実験の永久削除についてはどこにも文書化されていません。私はバックエンドの postgres db で Mlflow を使用しています。

私が実行したものは次のとおりです:

client = MlflowClient(tracking_uri=server)
client.delete_experiment(1)

これにより実験は削除されますが、削除した実験と同じ名前で新しい実験を実行すると、次のエラーが返されます。

mlflow.exceptions.MlflowException: Cannot set a deleted experiment 'cross-sell' as the active experiment. You can restore the experiment, or permanently delete the  experiment to create a new one.

すべてを永久に削除する方法を示すドキュメントがどこにも見つかりません。

ベストアンサー1

残念ながら、現時点では UI または CLI 経由でこれを行う方法はないようです :-/

実行方法は、使用しているバックエンド ファイル ストアの種類によって異なります。

ファイルストア:

ファイルシステムをストレージ メカニズムとして使用している場合 (デフォルト)、これは簡単です。「削除された」実験はフォルダーに移動されます.trash。それをクリアするだけです。

rm -rf mlruns/.trash/*

現在のバージョンのドキュメンテーション(1.7.2)彼らは次のように述べています。

フォルダーをクリアするには、cron ジョブまたは代替ワークフロー メカニズムを使用することをお勧めします.trash

SQL データベース:

これは削除する必要のある依存関係があるため、より複雑です。私は MySQL を使用しており、次のコマンドが機能します。

USE mlflow_db;  # the name of your database
DELETE FROM experiment_tags WHERE experiment_id=ANY(
    SELECT experiment_id FROM experiments where lifecycle_stage="deleted"
);
DELETE FROM latest_metrics WHERE run_uuid=ANY(
    SELECT run_uuid FROM runs WHERE experiment_id=ANY(
        SELECT experiment_id FROM experiments where lifecycle_stage="deleted"
    )
);
DELETE FROM metrics WHERE run_uuid=ANY(
    SELECT run_uuid FROM runs WHERE experiment_id=ANY(
        SELECT experiment_id FROM experiments where lifecycle_stage="deleted"
    )
);
DELETE FROM tags WHERE run_uuid=ANY(
    SELECT run_uuid FROM runs WHERE experiment_id=ANY(
        SELECT experiment_id FROM experiments where lifecycle_stage="deleted"
    )
);
DELETE FROM runs WHERE experiment_id=ANY(
    SELECT experiment_id FROM experiments where lifecycle_stage="deleted"
);
DELETE FROM experiments where lifecycle_stage="deleted";

おすすめ記事