ClearML連携

ClearML MLOps experiment tracking platform

ClearMLについて

ClearMLは、機械学習のワークフローを効率化し、エンジニアリングの時間を削減するために構築されたオープンソースのMLOpsプラットフォームです。

  • 🔨 YOLOv5のすべてのトレーニング実行をエクスペリメントマネージャーで追跡できます。
  • 🔧 統合されたClearMLのデータバージョニングツールを使用して、カスタムトレーニングデータのバージョン管理とアクセスを行います。
  • 🔦 ClearMLエージェントを使用して、YOLOv5の実行をリモートでトレーニングおよび監視できます。
  • 🔬 ClearMLのハイパーパラメータ最適化を使用して、最適なmAPを見つけます。
  • 🔭 ClearML Servingを使用して、学習済みのYOLOv5モデルを数コマンドでAPI化します。

これらのツールは必要に応じて自由に使用できます。まずはエクスペリメントマネージャー単体から始めたり、すべてを組み合わせて完全なパイプラインを構築したりすることが可能です。

YOLOv5のトレーニングメトリクスを表示するClearMLスカラーダッシュボード

🦾 セットアップ

ClearMLが実験やデータを追跡するには、サーバーとの通信が必要です。2つのオプションがあります。

次に、clearml Pythonパッケージをインストールし、SDKをサーバーに接続します。

pip install clearml

Settings → Workspace → Create new credentials(ClearML UIの右上)で資格情報を生成し、以下を実行します。

clearml-init

プロンプトに従ってください。これだけでセットアップは完了です。

🚀 ClearMLを使用したYOLOv5のトレーニング

実験追跡を有効にするには、まだインストールしていない場合はClearMLのpipパッケージをインストールしてください。

pip install clearml

これにより、YOLOv5トレーニングスクリプトとの統合が有効になります。これ以降のすべてのトレーニング実行は、ClearMLのエクスペリメントマネージャーによってキャプチャおよび保存されます。

To customize the project and task names, pass --project and --name to train.py. The defaults are YOLOv5 and Training. ClearML uses / as a subproject delimiter, so avoid / in custom project names.

python train.py --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache

または、カスタム名を使用する場合:

python train.py --project my_project --name my_training --img 640 --batch 16 --epochs 3 --data coco8.yaml --weights yolov5s.pt --cache

各実行でキャプチャされる内容:

  • ソースコードおよびコミットされていない変更
  • インストール済みのパッケージ
  • ハイパーパラメータ
  • モデルチェックポイント(--save-period nを使用してnエポックごとに保存)
  • コンソール出力
  • スカラー(mAP_0.5、mAP_0.5:0.95、適合率、再現率、損失、学習率)
  • マシンの詳細、ランタイム、作成日
  • ラベルのコレログラムや混同行列などの生成されたプロット
  • エポックごとのバウンディングボックス付き画像
  • エポックごとのモザイク可視化
  • エポックごとの検証画像

すべてがClearML UIに表示されるため、一箇所でトレーニングを監視できます。カスタム列(例:mAP_0.5)を追加してパフォーマンスの良いモデル順に並べ替えたり、複数の実験を選択して並べて比較したりできます。

続いてハイパーパラメータ最適化とリモート実行についての説明をご覧ください。

🔗 データセットのバージョン管理

データとコードを別々にバージョン管理することで、最新バージョンの取得が容易になり、完全な再現性が確保されます。このリポジトリはデータセットのバージョンIDを受け取り、データが不足している場合は自動的に取得し、そのIDをタスクパラメータとして記録するため、どの実験でどのデータが使用されたかを常に把握できます。

ClearMLデータセットバージョン管理インターフェース

データセットの準備

YOLOv5リポジトリは、YAML設定ファイルを通じて多くのデータセットをサポートしています。デフォルトでは、データセットはリポジトリルートから相対的な../datasetsフォルダにダウンロードされます。coco128をダウンロードした後、フォルダ構造は以下のようになります。

..
|_ yolov5
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ LICENSE
        |_ README.txt

この構造を維持すれば、どのデータセットでも使用可能です。

次に、データセットのYAMLファイルをデータセットのルートフォルダにコピーします。ClearMLはこのファイルを読み取り、データセットを正しく使用します。例のレイアウトに従って独自のYAMLを作成し、pathtraintestvalnc、およびnamesが定義されていることを確認してください。

..
|_ yolov5
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ coco128.yaml  # <---- HERE
        |_ LICENSE
        |_ README.txt

データセットのアップロード

データセットをバージョン管理されたClearMLデータセットとして登録するには、データセットのルートフォルダに移動して以下を実行します。

cd ../datasets/coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .

clearml-data syncは、以下のシーケンスの省略形です。明示的に実行することも可能です。

# Add --parent <parent_dataset_id> to base this version on a previous one.
# Duplicate files are not re-uploaded.
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data close

ClearMLデータセットでのトレーニング

データセットを登録したら、IDを指定してトレーニングを実行します。

python train.py --img 640 --batch 16 --epochs 3 --data clearml://YOUR_DATASET_ID --weights yolov5s.pt --cache

👀 ハイパーパラメータ最適化

実験とデータがバージョン管理されていれば、それを基盤として構築できます。追跡された各実験は、コード、インストール済みのパッケージ、設定を含む完全な環境をキャプチャしているため、実行結果は完全に再現可能です。ClearMLを使用すると、実験をクローンしてパラメータを変更し、自動的に再実行できます。これがハイパーパラメータ最適化(HPO)の基礎となります。

ローカルでHPOを実行するには、付属のスクリプトを使用します。まず、エクスペリメントマネージャーにトレーニングタスクが存在することを確認してください。スクリプトがそのタスクをクローンし、ハイパーパラメータを変化させます。

utils/loggers/clearml/hpo.pyにテンプレートタスクIDを入力し、実行します。

# Install Optuna or change the optimizer to RandomSearch.
pip install optuna
python utils/loggers/clearml/hpo.py

task.execute_locally()task.execute()に切り替えると、ジョブがClearMLキューにプッシュされ、リモートエージェントがそれを取得して実行します。

YOLOv5のメトリクスを表示するClearML HPOダッシュボード

🤯 リモート実行(高度)

ローカルでHPOを実行するのは便利ですが、多くの場合、より強力なハードウェア(オンプレミスのGPUマシンやクラウドインスタンス)で実験を行いたいと考えるでしょう。それがClearMLエージェントの役割です。

追跡された各実験には、別のマシンで再現するために必要なすべて(インストール済みのパッケージ、コミットされていない変更、設定)が含まれています。ClearMLエージェントはキューを監視し、新しいタスクを受信すると環境を再構築してジョブを実行し、スカラーやプロットをエクスペリメントマネージャーにストリーミングして戻します。

あらゆるマシン(クラウドVM、ローカルのGPUボックス、ノートPC)をClearMLエージェントにするには、以下を実行します。

clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]

クローン、編集、エンキュー

エージェントが実行されていれば、UIから直接作業を割り当てることができます。

  • 🪄 実験を右クリックしてクローンします。
  • 🎯 ハイパーパラメータを編集します。
  • ⏳ クローンしたタスクを右クリックし、ターゲットキューにエンキューします。

UIからタスクをエンキューする

タスクのリモート実行

ClearMLロガーをインスタンス化した後にtask.execute_remotely()を追加することで、実行中のスクリプトをプログラム的にリモート実行するようにフラグを立てることもできます。ハイライトされた行をtrain.pyに追加してください。

# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
    loggers = Loggers(save_dir, weights, opt, hyp, LOGGER)  # loggers instance
    if loggers.clearml:
        loggers.clearml.task.execute_remotely(queue="my_queue")  # <------ ADD THIS LINE
        # data_dict is None unless the user selected a ClearML dataset, in which case ClearML fills it in.
        data_dict = loggers.clearml.data_dict
# ...

この変更後、トレーニングスクリプトを実行するとその行までが実行され、コードがパッケージ化されてキューに送信されます。

オートスケーリングワーカー

ClearMLには、AWS、GCP、またはAzure上のリモートマシンを、キューに保留中の実験がある場合に起動し、ClearMLエージェントに変換して、作業が終了したときにシャットダウンするオートスケーラーが付属しています。そのため、実際に実行されている計算リソースに対してのみ料金が発生します。

以下の入門動画をご覧ください。

動画を再生

詳細はこちら

ClearMLとUltralyticsモデルの統合に関する詳細については、ClearML統合ガイドを確認し、他の実験追跡ツールを使用してMLOpsワークフローを強化する方法を探索してください。

コメント