ClearMLの統合#
ClearMLについて#
ClearMLは、機械学習のワークフローを効率化し、エンジニアリングの時間を節約するために構築されたオープンソースのMLOpsプラットフォームです。
- 🔨 YOLOv5のすべてのトレーニング実行を実験マネージャーで追跡します。
- 🔧 統合されたClearMLのデータバージョニングツールを使用して、カスタムトレーニングデータのバージョン管理とアクセスを行います。
- 🔦 ClearML Agentを使用して、YOLOv5の実行をリモートでトレーニングおよび監視します。
- 🔬 ClearMLのハイパーパラメータ最適化を使用して、最適なmAPを見つけます。
- 🔭 ClearML Servingを使用し、いくつかのコマンドでトレーニング済みのYOLOv5モデルをAPI化します。
必要に応じてこれらのツールを組み合わせて使用してください。実験マネージャー単体から始めることも、すべてをつなぎ合わせて完全なパイプラインを構築することも可能です。

🦾 セットアップ#
実験やデータを追跡するには、ClearMLがサーバーと通信する必要があります。2つの選択肢があります。
- 無料のClearML Hosted Serviceに登録するか、
- 独自のClearML serverをデプロイします。オープンソースであるため、機密データに対しても有効な選択肢となり続けます。
次に、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各実行で以下がキャプチャされます。
- ソースコードおよびコミットされていない変更
- インストールされているパッケージ
- ハイパーパラメータ
- モデルチェックポイント(
--save-period nを使用して、nエポックごとに保存します) - コンソール出力
- スカラー(mAP_0.5、mAP_0.5:0.95、精度、再現率、損失、学習率)
- マシンの詳細、ランタイム、および作成日
- ラベルコレログラムや混同行列などの生成されたプロット
- エポックごとのバウンディングボックス付き画像
- エポックごとのモザイクの可視化
- エポックごとの検証画像
すべてが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キューにプッシュし、リモートエージェントが取得できるようにします。

🤯 リモート実行(高度)#
ローカルでHPOを実行するのは便利ですが、オンプレミスのGPUマシーンやクラウドインスタンスなど、より強力なハードウェア上で実験を行いたいことがよくあります。それがClearML Agentの役割です。
追跡された各実験には、別のマシンで再現するために必要なすべて(インストールされたパッケージ、コミットされていない変更、構成)が含まれています。ClearMLエージェントはキューをリッスンし、入ってくるタスクを取得して環境を再作成し、ジョブを実行し、スカラーとプロットを実験マネージャーにストリーミングして戻します。
クラウドVM、ローカルのGPUボックス、ラップトップなど、あらゆるマシンを以下のコマンドでClearMLエージェントに変えることができます。
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]クローン、編集、エンキュー#
エージェントが実行されている場合、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ワークフローを強化する方法を探索してください。