ClearML連携#
ClearMLについて#
ClearMLは、機械学習ワークフローを効率化し、エンジニアリングの時間を節約するために構築されたオープンソースのMLOpsプラットフォームです。
- 🔨 すべてのYOLOv5トレーニング実行を実験マネージャーで追跡できます。
- 🔧 統合されたClearMLのデータバージョニングツールで、カスタムトレーニングデータのバージョン管理とアクセスができます。
- 🔦 ClearML Agentを使用して、YOLOv5の実行をリモートでトレーニングおよび監視できます。
- ClearMLのハイパーパラメータ最適化で、最適なmAPを見つけられます。
- ClearML Servingを使用して、数個のコマンドでトレーニング済みのYOLOv5モデルをAPIに変換できます。
これらのツールは必要な数だけ使用できます。実験マネージャーだけで始めることも、すべてを連携して完全なパイプラインにすることもできます。
🦾 セットアップ#
ClearMLで実験とデータを追跡するには、サーバーとの通信が必要です。次の2つの方法があります。
- 無料のClearML Hosted Serviceにサインアップする、または
- 独自のClearMLサーバーをデプロイする — オープンソースなので、機密データを扱う場合でも有効な選択肢です。
次に、clearml Pythonパッケージをインストールし、SDKをサーバーに接続します。
pip install clearmlSettings → Workspace → Create new credentials(ClearML UIの右上)で認証情報を生成し、次を実行します。
clearml-initプロンプトに従います。これでセットアップは完了です。
🚀 ClearMLを使用したYOLOv5のトレーニング#
実験の追跡を有効にするには、まだインストールしていない場合はClearML pipパッケージをインストールします。
pip install clearmlこれにより、YOLOv5トレーニングスクリプトとの連携が有効になります。以降のすべてのトレーニング実行は、ClearMLの実験マネージャーによって取得・保存されます。
プロジェクト名とタスク名をカスタマイズするには、--projectと--nameをtrain.pyに渡します。デフォルトはYOLOv5とTrainingです。ClearMLは/をサブプロジェクトの区切り文字として使用するため、カスタムプロジェクト名では/を避けてください。
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各実行で次の情報が取得されます。
- ソースコードとコミットされていない変更
- インストール済みパッケージ
- ハイパーパラメータ
- モデルチェックポイント(
nエポックごとに保存するには--save-period nを使用) - コンソール出力
- スカラー(mAP_0.5、mAP_0.5:0.95、precision、recall、loss、learning rate)
- マシンの詳細、実行時間、作成日
- ラベルコレログラムや混同行列などの生成されたプロット
- 各エポックのBBox付き画像
- 各エポックのモザイク可視化
- 各エポックの検証画像
すべての情報がClearML UIに表示されるため、トレーニングを1か所で監視できます。カスタム列(例:mAP_0.5)を追加して最高性能のモデルで並べ替えたり、複数の実験を選択して横並びで比較したりできます。
ハイパーパラメータ最適化とリモート実行については、引き続きお読みください。
🔗 データセットのバージョン管理#
コードとは別にデータをバージョン管理すると、最新バージョンを簡単に取得でき、完全な再現性を確保できます。このリポジトリはデータセットのバージョンIDを受け取り、データが存在しない場合は自動的に取得し、そのIDをタスクパラメータとして記録するため、各実験でどのデータが使用されたかを常に把握できます。
データセットの準備#
YOLOv5リポジトリは、YAML設定ファイルを介して多くのデータセットをサポートしています。デフォルトでは、データセットはリポジトリルートからの相対パスにある../datasetsフォルダーにダウンロードされます。coco128をダウンロードすると、フォルダー構造は次のようになります。
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txtこの構造を維持する限り、どのデータセットでも使用できます。
次に、データセットのYAMLファイルをデータセットのルートフォルダーにコピーします。ClearMLはこのファイルを読み取り、データセットを正しく使用します。例のレイアウトに従って独自のYAMLを作成し、path、train、test、val、nc、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 closeClearMLデータセットでトレーニングする#
データセットを登録したら、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.pytask.execute_locally()をtask.execute()に切り替えると、ジョブがClearMLキューに送信され、リモートAgentが取得できるようになります。

🤯 リモート実行(高度な内容)#
HPOをローカルで実行するのは便利ですが、オンプレミスのGPUマシンやクラウドインスタンスなど、より強力なハードウェアで実験を実行したい場合も多くあります。それがClearML Agentの役割です。
追跡対象の各実験には、別のマシンで再現するために必要なすべての情報(インストール済みパッケージ、コミットされていない変更、設定)が含まれます。ClearML Agentはキューを監視し、受信したタスクを取得して環境を再作成し、ジョブを実行して、スカラーとプロットを実験マネージャーにストリーミングします。
次のコマンドで、クラウドVM、ローカルGPUマシン、ノートPCなど、任意のマシンをClearML Agentに変換できます。
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]クローン、編集、キューへの追加#
Agentを実行すると、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 Agentに変換して、作業が完了するとシャットダウンします。そのため、実際に稼働しているコンピュートリソースの料金だけを支払えば済みます。
以下の入門動画をご覧ください。
詳細情報#
UltralyticsモデルとClearMLの連携について詳しくは、ClearML連携ガイドをご覧いただき、他の実験追跡ツールを使用してMLOpsワークフローを強化する方法をご確認ください。
