ClearML 統合
についてClearML
ClearMLは、機械学習のワークフローを合理化し、時間を節約するために設計されたオープンソースのMLOpsプラットフォームです。⏱️。
🔨YOLOv5 、実験マネージャーですべてのトレーニング実行を追跡する。
🔧 統合されたClearML データ・バージョニング・ツールで、カスタム・トレーニング・データをバージョンアップし、簡単にアクセスできます。
🔦ClearML エージェントを使用して、YOLOv5 トレーニングをリモートで実施し、モニタリングします。
ᔬClearML ハイパーパラメータ最適化を使用して、最良の mAP を得る。
↪So_1F52D ↪So_1F52D ↪So_1F52D 🔭ClearML Serving を使って、わずかなコマンドで新しく学習したYOLOv5 モデルを API に変換する。
他にもたくさんある。これらのツールをいくつ使うかはあなた次第で、実験マネージャーだけにこだわることもできるし、すべてを連鎖させて印象的なパイプラインにすることもできる!
🦾 セッティングをする
実験やデータを記録するために、ClearML はサーバーと通信する必要があります。サーバーを取得するには2つの方法があります:
ClearML ホスティング・サービスに無料でサインアップするか、または自分のサーバーを立ち上げることができます。サーバーさえもオープンソースなので、機密データを扱っていても問題ないはずだ!
-
をインストールします。
clearml
python パッケージで提供される: -
ClearML SDKをサーバーに接続するには、認証情報を作成し(右上の「設定」→「ワークスペース」→「新しい認証情報を作成」)、以下のコマンドを実行し、指示に従ってください:
以上です!完了です😎。
🚀 トレーニングYOLOv5 WithClearML
ClearML 実験追跡を有効にするには、ClearML pip パッケージをインストールするだけでよい。
これにより、YOLOv5 トレーニングスクリプトとの統合が可能になります。今後、トレーニングの実行はすべてClearML experiment managerに取り込まれ、保存されます。
を変更したい場合 project_name
または task_name
を使用する。 --project
そして --name
の引数である。 train.py
スクリプトを使用する場合、デフォルトではプロジェクトは YOLOv5
そして Training
.注意:ClearML /
をサブプロジェクトの区切り文字として使う場合は注意が必要です。 /
をプロジェクト名に入れてください!
またはカスタムプロジェクト名とカスタムタスク名を指定する:
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をタスクパラメーターの一部として保存するので、どの実験にどのデータが使われたかを常に確実に知ることができる!
データセットを準備する
YOLOv5 リポジトリは、データセットの情報を含む YAML ファイルを使用することで、さまざまなデータセットをサポートしています。デフォルトでは、データセットは ../datasets
フォルダーをリポジトリのルートフォルダーに関連付けます。つまり coco128
YAMLのリンクを使うか、yolov5 が提供するスクリプトを使うと、このようなフォルダ構造になります:
しかし、これはどのようなデータセットでも構いません。このフォルダ構造に従っている限り、ご自由にお使いください。
次に、⚠️対応する YAML ファイルをデータセットフォルダ⚠️ のルートにコピーします。この YAML ファイルには、ClearML データセットを正しく使うために必要な情報が含まれています。もちろん自分でも作れます。例の YAML の構造に従ってください。
基本的には以下のキーが必要だ: path
, train
, test
, val
, nc
, names
.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
データセットをアップロードする
このデータセットをバージョン管理されたデータセットとしてClearML に取り込むには、データセットのルート・フォルダーに移動して、次のコマンドを実行する:
コマンド clearml-data sync
は実際には省略コマンドである。これらのコマンドを次々に実行することもできる:
# 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 、実験をクローンし、そのパラメーターを変更することもできる。そうすれば、自動的に新しいパラメーターで実験を再実行することができる!
ハイパーパラメータの最適化をローカルで実行するために、事前に作成したスクリプトを用意しました。トレーニングタスクが少なくとも一度実行され、ClearML experiment manager にあることを確認するだけで、基本的にそのタスクをクローンし、ハイパーパラメータを変更します。
この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 エージェントの出番です。エージェントの機能はこちらをご覧ください:
要するに、エクスペリメントマネージャーが追跡している全ての実験には、それを別のマシンで再現するのに十分な情報が含まれている(インストールされているパッケージ、コミットされていない変更など)。つまり、ClearML エージェントは、受信タスクのキューをリッスンし、タスクが見つかると環境を再作成して実行し、同時にスカラーやプロットなどをエクスペリメントマネージャーに報告する。
実行するだけで、どんなマシン(クラウド VM、ローカルGPU マシン、自分のラップトップ...)でもClearML エージェントにすることができます:
クローン、編集、エンキュー
エージェントが実行されたので、少し仕事をさせることができる。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 統合ガイドをご覧ください。