ClearML統合
ClearMLについて
ClearMLは、機械学習ワークフローを効率化し、時間を節約するように設計されたオープンソースのMLOpsプラットフォームです⏱️。
🔨 実験マネージャーですべてのYOLOv5トレーニング実行を追跡します
🔧 統合されたClearML データバージョン管理ツールを使用して、カスタムトレーニングデータをバージョン管理し、簡単にアクセスできます。
🔦 ClearML Agentを使用して、YOLOv5のトレーニングをリモートでトレーニングおよび監視します。
🔬 ClearMLのハイパーパラメータ最適化を利用して、最高のmAPを手に入れましょう。
🔭 ClearML Servingを使用すると、数コマンドで、新しくトレーニングしたYOLOv5モデルをAPIに変換できます。
その他にもたくさんあります。これらのツールをいくつ使用するかはあなた次第です。実験マネージャーに固執することも、すべてを連鎖させて印象的なパイプラインにすることもできます。
🦾 セットアップ
実験やデータを追跡するには、ClearML はサーバーと通信する必要があります。サーバーを取得するには、2 つのオプションがあります。
ClearML Hosted Serviceに無料でサインアップするか、独自のClearMLサーバーをセットアップできます。サーバーでさえオープンソースであるため、機密データを扱っている場合でも、問題ありません。
-
以下のインストール
clearml
pythonパッケージ:pip install clearml
-
認証情報を作成して(右上の設定 -> ワークスペース -> 新しい認証情報を作成に進みます)、ClearML SDKをサーバーに接続し、以下のコマンドを実行して指示に従ってください。
clearml-init
これで完了です! 😎
🚀 ClearMLを使用したYOLOv5のトレーニング
ClearML実験の追跡を有効にするには、ClearML pipパッケージをインストールするだけです。
pip install clearml
これにより、YOLOv5トレーニングスクリプトとの統合が可能になります。これ以降のすべてのトレーニング実行は、ClearML 実験マネージャーによってキャプチャされ、保存されます。
変更したい場合 project_name
または task_name
を使用します。 --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、適合率、再現率、損失、学習率など)
- マシンの詳細、ランタイム、作成日などの一般的な情報。
- ラベル相関図や混同行列など、生成されたすべてのプロット
- エポックごとのバウンディングボックスを持つ画像
- Mosaic(モザイク)/epoch
- エポックごとの検証画像
すごい量でしょう? 🤯 さて、この情報をすべて ClearML UI で可視化して、トレーニングの進捗状況を把握できます。テーブルビューにカスタム列(例:mAP_0.5)を追加して、最高のパフォーマンスを発揮するモデルを簡単にソートできます。または、複数の実験を選択して直接比較することも可能です。
ハイパーパラメータ最適化やリモート実行など、このすべての情報を使ってできることはさらにたくさんあります。その仕組みを知りたい場合は、読み進めてください。
🔗 データセットのバージョン管理
コードとは別にデータをバージョン管理することは一般的に良い考えであり、最新バージョンを簡単に入手できます。このリポジトリは、データセットのバージョンIDの提供をサポートしており、まだデータが存在しない場合は確実に入手します。さらに、このワークフローでは、使用されたデータセットIDがタスクパラメータの一部として保存されるため、どの実験でどのデータが使用されたかを常に確実に把握できます。
データセットの準備
YOLOv5リポジトリは、情報を含むYAMLファイルを使用することにより、さまざまなデータセットをサポートしています。デフォルトでは、データセットは以下にダウンロードされます。 ../datasets
リポジトリのルートフォルダからの相対的なフォルダ。したがって、もしあなたが coco128
YAMLのリンクを使用するか、yolov5が提供するスクリプトを使用してデータセットを準備すると、次のフォルダー構造になります。
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
ただし、これは任意のデータセットで構いません。このフォルダ構造に従う限り、ご自身のデータセットを自由に使用してください。
次に、⚠️対応するYAMLファイルをデータセットフォルダのルートにコピーします⚠️。このYAMLファイルには、ClearMLがデータセットを適切に使用するために必要な情報が含まれています。もちろん、自分で作成することもできます。YAMLの例の構造に従ってください。
基本的に、以下のキーが必要です。 path
, train
, test
, val
, nc
, names
.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
データセットのアップロード
このデータセットをバージョン管理されたデータセットとしてClearMLに取り込むには、データセットのルートフォルダーに移動し、次のコマンドを実行します。
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .
コマンド clearml-data sync
は実際には省略形のコマンドです。これらのコマンドを1つずつ実行することもできます。
# Optionally add --parent <parent_dataset_id> if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data close
ClearMLデータセットを使用してトレーニングを実行する
ClearMLデータセットを入手したので、それを使用してカスタムYOLOv5 🚀モデルを非常に簡単にトレーニングできます。
python train.py --img 640 --batch 16 --epochs 3 --data clearml://YOUR_DATASET_ID --weights yolov5s.pt --cache
👀 ハイパーパラメータ最適化
実験とデータのバージョン管理が完了したので、その上に何を構築できるかを見てみましょう。
コード情報、インストール済みのパッケージ、環境の詳細を使用することで、実験自体が完全に再現可能になります。実際、ClearML を使用すると、実験を複製し、パラメーターを変更することもできます。これらの新しいパラメーターで自動的に再実行できます。これは基本的に HPO が行うことです!
ハイパーパラメータ最適化をローカルで実行するには、事前に作成されたスクリプトが含まれています。トレーニングタスクが少なくとも1回実行され、ClearML実験マネージャーにあることを確認してください。基本的に、それを複製してハイパーパラメータを変更します。
このIDを入力する必要があります。 template task
にあるスクリプト内で utils/loggers/clearml/hpo.py
そして、それを実行するだけです。変更するには、 task.execute_locally()
宛先 task.execute()
ClearMLキューに入れて、リモートエージェントに処理させるには、次のようにします。
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.py
🤯 リモート実行(高度な設定)
HPOをローカルで実行することは非常に便利ですが、リモートマシンで実験を実行したい場合はどうすればよいでしょうか?オンサイトに非常に強力なGPUマシンがあるか、クラウドGPUを使用するための予算があるかもしれません。そこでClearML Agentの出番です。エージェントで何ができるかはこちらをご覧ください。
要するに、実験マネージャーによって追跡されるすべての実験には、別のマシンでそれを再現するのに十分な情報(インストールされたパッケージ、コミットされていない変更など)が含まれています。したがって、ClearMLエージェントはまさにそれを行います。エージェントは、着信タスクのキューをリッスンし、タスクを見つけると、環境を再作成して実行し、スカラー、プロットなどを実験マネージャーに報告します。
クラウドVM、ローカルGPUマシン、自分のラップトップなど、あらゆるマシンをClearMLエージェントに変えるには、以下を実行するだけです。
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]
クローン、編集、エンキュー
エージェントが実行されている状態で、いくつかの作業を与えることができます。HPOセクションで、タスクを複製してハイパーパラメータを編集できることを思い出してください。インターフェースからもそれを行うことができます。
🪄 実験を右クリックしてクローンを作成します
🎯 ハイパーパラメータをご希望に応じて編集してください。
⏳ タスクを右クリックして、任意のキューにエンキューします
タスクをリモートで実行
上記で説明したようにタスクを複製するか、次のものを追加して現在のスクリプトをマークするだけです。 task.execute_remotely()
実行されると、エージェントが作業を開始するためにキューに入れられます。
YOLOv5のトレーニングスクリプトをリモートで実行するには、ClearMLロガーのインスタンス化後、training.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 either None is user did not choose for ClearML dataset or is filled in by ClearML
data_dict = loggers.clearml.data_dict
# ...
この変更後、トレーニングスクリプトを実行すると、pythonはその行までスクリプトを実行し、その後、コードをパッケージ化してキューに送信します。
オートスケーリングワーカー
ClearML には、オートスケーラーも付属しています。このツールは、選択したクラウド (AWS、GCP、Azure) で新しいリモートマシンを自動的に起動し、キューで実験が検出されるたびに ClearML エージェントに変換します。タスクが処理されると、オートスケーラーは自動的にリモートマシンをシャットダウンし、支払いが停止します。
オートスケーラーの入門ビデオを以下でご覧ください。
詳細はこちら
ClearML と Ultralytics モデルの統合に関する詳細については、ClearML 統合ガイドを確認し、他の実験追跡ツールを使用してMLOps ワークフローをどのように強化できるかをご確認ください。