コンテンツへスキップ

ClearML 統合

クリア|MLクリア|ML

についてClearML

ClearMLは、機械学習のワークフローを合理化し、時間を節約するために設計されたオープンソースのMLOpsプラットフォームです。⏱️。

🔨YOLOv5 、実験マネージャーですべてのトレーニング実行を追跡する。

🔧 統合されたClearML データ・バージョニング・ツールで、カスタム・トレーニング・データをバージョンアップし、簡単にアクセスできます。

🔦ClearML エージェントを使用して、YOLOv5 トレーニングをリモートで実施し、モニタリングします。

ᔬClearML ハイパーパラメータ最適化を使用して、最良の mAP を得る。

↪So_1F52D ↪So_1F52D ↪So_1F52D 🔭ClearML Serving を使って、わずかなコマンドで新しく学習したYOLOv5 モデルを API に変換する。


他にもたくさんある。これらのツールをいくつ使うかはあなた次第で、実験マネージャーだけにこだわることもできるし、すべてを連鎖させて印象的なパイプラインにすることもできる!

ClearML スカラーダッシュボード



🦾 セッティングをする

実験やデータを記録するために、ClearML はサーバーと通信する必要があります。サーバーを取得するには2つの方法があります:

ClearML ホスティング・サービスに無料でサインアップするか、または自分のサーバーを立ち上げることができます。サーバーさえもオープンソースなので、機密データを扱っていても問題ないはずだ!

  • をインストールします。 clearml python パッケージで提供される:

    pip install clearml
    
  • ClearML SDKをサーバーに接続するには、認証情報を作成し(右上の「設定」→「ワークスペース」→「新しい認証情報を作成」)、以下のコマンドを実行し、指示に従ってください:

    clearml-init
    

以上です!完了です😎。


🚀 トレーニングYOLOv5 WithClearML

ClearML 実験追跡を有効にするには、ClearML pip パッケージをインストールするだけでよい。

pip install clearml

これにより、YOLOv5 トレーニングスクリプトとの統合が可能になります。今後、トレーニングの実行はすべてClearML experiment managerに取り込まれ、保存されます。

を変更したい場合 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、精度、再現率、損失、学習率、...)
  • マシンの詳細、ランタイム、作成日などの一般的な情報。
  • ラベル相関図や混同行列など、生成されたすべてのプロット
  • エポックごとのバウンディングボックス付き画像
  • エポックごとのモザイク
  • エポックごとの検証画像

すごい量でしょう?では、これらの情報をClearML UIで可視化し、トレーニングの進捗状況を把握しましょう。テーブルビューにカスタムカラム(例えばmAP_0.5など)を追加することで、最もパフォーマンスの高いモデルを簡単にソートすることができます。また、複数の実験を選択して直接比較することもできます!

ハイパーパラメーターの最適化やリモート実行など、この情報すべてを使ってできることはさらにある!

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

データをコードとは別にバージョン管理することは、一般的に良いアイデアです。このリポジトリはデータセットのバージョンIDの入力をサポートしています。さらに、このワークフローでは使用したデータセットIDをタスクパラメーターの一部として保存するので、どの実験にどのデータが使われたかを常に確実に知ることができる!

ClearML データセット・インターフェース

データセットを準備する

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 は実際には省略コマンドである。これらのコマンドを次々に実行することもできる:

# 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

リモート実行 (上級)

HPOをローカルで実行するのはとても便利ですが、代わりにリモートマシンで実験を実行したい場合はどうしたらよいでしょうか?非常に強力なGPU マシンをオンサイトで利用できるかもしれませんし、クラウドGPUを利用する予算があるかもしれません。そこでClearML エージェントの出番です。エージェントの機能はこちらをご覧ください:

要するに、エクスペリメントマネージャーが追跡している全ての実験には、それを別のマシンで再現するのに十分な情報が含まれている(インストールされているパッケージ、コミットされていない変更など)。つまり、ClearML エージェントは、受信タスクのキューをリッスンし、タスクが見つかると環境を再作成して実行し、同時にスカラーやプロットなどをエクスペリメントマネージャーに報告する。

実行するだけで、どんなマシン(クラウド VM、ローカルGPU マシン、自分のラップトップ...)でもClearML エージェントにすることができます:

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

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

エージェントが実行されたので、少し仕事をさせることができる。HPOのセクションで、タスクをクローンしてハイパーパラメータを編集できることを覚えているだろうか?インターフェイスからもそれができる!

右クリックして実験をクローンする。

ハイパーパラメータを編集する。

タスクを右クリックして、いずれかのキューにエンキューする。

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

リモートでのタスク実行

上記で説明したように、タスクをクローンすることもできます。 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 統合ガイドをご覧ください。

📅作成:1年前 ✏️更新しました 6日前

コメント