ディープラーニング研究: コードと実験を効率的に管理するには?

ディープラーニング研究: コードと実験を効率的に管理するには?

回答1

著者: イェ・シャオフェイ
リンク: https://www.zhihu.com/question/269707221/answer/2281374258

北米のメルセデス・ベンツで働いていたとき、私はさまざまな構造やパラメータをテストするために、週に 100 種類以上のモデルをトレーニングしていました。この目的のために、私は前任者の実践と私自身の考えを組み合わせて、効率的なコード実験管理方法をまとめ、プロジェクトの成功に貢献しました。ここでその方法を皆さんと共有します。

Yamlファイルを使用してトレーニングパラメータを設定する

多くのオープンソース リポジトリでは、入力 argparse を使用して大量のトレーニングおよびモデル関連のパラメータを送信する傾向がありますが、これは実際には非常に非効率的です。一方で、トレーニングのたびに大量のパラメータを手動で入力するのは非常に面倒です。デフォルト値を直接変更すると、コードにアクセスして変更する必要があり、多くの時間を無駄にしてしまいます。ここでは、YAML ファイルを使用してすべてのモデルとトレーニング関連のパラメータを制御し、YAML の名前をモデル名とタイムスタンプに関連付けることをお勧めします。有名な 3D ポイント クラウド検出ライブラリ OpenPCDet は、以下のリンクに示すようにこれを実行します。

github.com/open-mmlab/OpenPCDet/blob/master/tools/cfgs/kitti_models/pointrcnn.yaml

下の図に示すように、上記のリンクから yaml ファイルの一部をキャプチャしました。この構成ファイルには、ポイント クラウドの前処理方法、分類の種類、バックボーンのさまざまなパラメーター、オプティマイザーと損失の選択 (図には示されていませんが、詳細については上記のリンクを参照してください) が含まれています。つまり、モデルに影響を与える可能性のあるほぼすべての要素がこのファイルに含まれており、コードでは、単純な yaml.load() を使用してこれらすべてのパラメーターを辞書に読み込むだけで済みます。さらに重要なのは、この構成ファイルはチェックポイントと同じフォルダーに保存できるため、ブレークポイントのトレーニング、微調整、または直接テストに直接使用できることです。テストに使用する場合は、結果を対応するパラメーターと簡単に一致させることもできます。

コードのモジュール性は非常に重要

研究者の中には、損失関数とモデルを一緒に記述するなど、コードを書くときにシステム全体を過剰に結合させることを好む人もいます。これは多くの場合、波及効果をもたらします。小さな部分を変更すると、後続のインターフェースも変更されます。したがって、適切なコードモジュール化により、多くの時間を節約できます。一般的なディープラーニング コードは、基本的にいくつかの主要な部分に分けられます (PyTorch を例に挙げます)。I/O モジュール、前処理モジュール、視覚化モジュール、モデル本体 (大規模なモデルにサブモデルが含まれている場合は、別のクラスにする必要があります)、損失関数、後処理、およびトレーニング スクリプトまたはテスト スクリプト内で直列に接続されます。コードのモジュール化のもう 1 つの利点は、YAML でさまざまなパラメータを定義しやすくなり、読みやすくなることです。さらに、importlib ライブラリは多くの成熟したコードで使用されています。これにより、コード内で固定するのではなく、トレーニング中に使用するモデルまたはサブモデルを YAML で直接定義できます。

Tensorboard、tqdm の使用法

基本的に、私はいつもこの 2 つのライブラリを使用します。 Tensorboard はトレーニング損失曲線の変化を非常に正確に追跡できるため、モデルがまだ収束中か、過剰適合中かを簡単に判断できます。画像関連の作業を行っている場合は、視覚化結果を Tensorboard に表示することもできます。多くの場合、モデルがどのように機能しているか、また、個別にテストや微調整に時間を費やす必要があるかどうかを知るには、Tensorboard の収束ステータスを確認するだけで十分です。Tqdm を使用すると、トレーニングの進行状況を直感的に追跡できるため、早期停止が容易になります。

Githubを最大限に活用する

複数の人と共同作業する場合でも、単独のプロジェクトに取り組んでいる場合でも、コードを記録するには Github (企業ではほとんどの場合、bitbucket を使用する) を使用することを強くお勧めします。詳細については、私の回答を参照してください。

大学院生として、役に立つと思う科学研究ツールにはどのようなものがありますか?
https://www.zhihu.com/question/484596211/answer/2163122684

実験結果の記録

私は通常、実験結果を記録するために合計 Excel を保存します。最初の列はモデルに対応する yaml パス、2 番目の列はモデル トレーニング エポック、3 番目の列はテスト結果のログです。私は通常、このプロセスを自動化します。テスト スクリプトに合計 Excel パスが指定されている限り、pandas を使用して簡単に実行できます。

回答2

著者: ジェイソン
リンク: https://www.zhihu.com/question/269707221/answer/470576066

Git コード管理は、ディープラーニングや科学研究とはまったく関係ありません。コードを書くときは、バージョン管理ツールを使用する必要があります。 GitHub を使うかどうかは個人的には曖昧だと感じています。結局、社内のコードをすべて外部の git に保存するのは不可能です。

コードを書くときに注意すべき点がいくつかあります。

1. 構成ファイルを使用してテスト パラメータを渡し、ログ ファイルと同じ名前で構成を保存してみます。

一方、外部から渡されるパラメータは、パラメータによる git での過度のバージョン変更を回避できます。DL はデバッグが容易ではないため、コード比較を行うために git を使用することが避けられない場合があります。

一方、何千ものバージョンを試した後では、どのモデルにどのパラメータがあるか分からなくなると思います。良い習慣は非常に効果的です。さらに、古いバージョンの構成ファイルの呼び出しを容易にするために、新しく追加されたパラメータにデフォルト値を提供するようにしてください。

2. 異なるモデルを切り離してみる

同じプロジェクトでは、再利用性が高いことは非常に良いプログラミング習慣ですが、急速に発展している DL コーディングでは、プロジェクトがタスク駆動型であると仮定すると、これが障害になる場合があります。そのため、再利用可能な機能をいくつか抽出し、モデル構造に関連するさまざまなモデルを異なるファイルに分離するようにしてください。これは、将来の更新に便利です。そうしないと、一見美しいデザインでも数か月後には役に立たなくなってしまいます。

3. 一定レベルの安定性を確保しながら、フレームワークの新しいバージョンを定期的にフォローアップする

困った状況になることはよくあります。プロジェクトの最初から最後まで、フレームワークは何度も更新されています。新しいバージョンには魅力的な機能がいくつかありますが、一部の API が変更されています。したがって、プロジェクト内でフレームワークのバージョンを安定させるようにしてください。プロジェクトを開始する前に、さまざまなバージョンの長所と短所を検討するようにしてください。適切な学習が必要な場合もあります。

さらに、さまざまなフレームワークに対して寛容になりましょう。

4. トレーニング時間はかなり長いです。コーディング後、盲目的に実験を開始しないでください。私の個人的な経験から言うと、小さなデータとより多くのログで実験するにはデバッグ モードを使用するのが良い選択です。

5. モデルのパフォーマンスが更新されるたびに変更を記録しておきます。いつでも戻ってやり直す必要がある場合があります。

著者: OpenMMLab
リンク: https://www.zhihu.com/question/269707221/answer/2480772257
出典:Zhihu。著作権は著者に帰属します。商用目的での複製の場合は、著者に連絡して許可を得てください。非商用目的での複製の場合は、出典を明記してください。

こんにちは。前回の回答では、実験データを管理するために Tensorboard、Weights&Biases、MLFlow、Neptune などのツールの使用について説明しました。しかし、実験的な管理ツールがどんどん発明されるにつれて、ツールの学習コストはどんどん高くなっています。どのように選択すればよいのでしょうか?

MMCV はあなたのあらゆる夢を叶えます。設定ファイルを変更することでツールを切り替えることができます。

github.com/open-mmlab/mmcv

Tensorboard は実験データを記録します:

設定ファイル:

 log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='TensorboardLoggerHook') ])

TensorBoard データの視覚化

WandBは実験データを記録する

設定ファイル

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='WandbLoggerHook') ])

Wandb データの視覚化

(事前にPython APIでwandbにログインする必要があります)

ネプチュームは実験データを記録する

設定ファイル

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='NeptuneLoggerHook', init_kwargs=dict(project='Your Neptume account/mmcv')) ])

ネプチュームの視覚化

mlflowは実験データを記録します

設定ファイル

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='MlflowLoggerHook') ])

MLFlow 可視化

dvcliveは実験データを記録します

設定ファイル

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='DvcliveLoggerHook') ])

生成されたHTMLファイル

上記では、さまざまな実験管理ツールの最も基本的な機能のみを使用しています。構成ファイルをさらに変更して、より多くの姿勢のロックを解除できます。

MMCV を所有することは、すべての実験管理ツールを所有することと同じです。 TF 少年だったなら、クラシックで懐かしいスタイルの TensorBoard を選ぶことができます。実験データと実験環境をすべて記録したい場合は、Wandb (Weights & Biases) または Neptume を試してみるのもよいでしょう。デバイスがインターネットに接続できない場合は、mlflow を選択して実験データをローカルに保存できます。自分に合ったツールが必ずあります。

さらに、MMCVには独自のログ管理システムがあり、  テキストロガーフック  !デバイス環境、データセット、モデルの初期化方法、トレーニング中に生成された損失、メトリックなどの情報など、トレーニングプロセス中に生成されたすべての情報がローカルの xxx.log ファイルに保存されます。ツールを使わずに以前の実験データを確認できます。

どの実験管理ツールを使用すればよいかまだ悩んでいますか?さまざまなツールの学習コストについてまだ心配していますか?今すぐ MMCV を導入して、わずか数行の設定ファイルでさまざまなツールを簡単に体験してください。

github.com/open-mmlab/mmcv

<<:  来年のIT投資の見通しは有望です。成長率はGDPの3倍です。 CIOの75%がAIへの支出を増やす

>>:  自動運転シナリオのビデオから生成された初のマルチビュー世界モデル | DrivingDiffusion: BEV データとシミュレーションの新しいアイデア

ブログ    
ブログ    
ブログ    

推薦する

AI導入の課題

人々は、データ、人、ビジネスなど、AI を導入する際の課題を理解する必要があります。 [[27672...

AIセキュリティに関する隠れた懸念:ディープフェイク技術への課題と対応

1. はじめに近年、人工知能技術は活発な発展の傾向を示し、新たな科学技術革命と産業変革をリードする戦...

AIは人間の教師に取って代わるでしょうか?どれだけの能力があるのか​​を確かめるためにレッスンを受けました

少し前に、「ピーター」と「トニー」という名前の二人の英語教師が人々の注目を集めました。彼らはあらゆる...

機械学習を独学で学んだら、どうやって仕事を見つければいいのでしょうか?少なくともトップ10の地雷原は避ける

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

スタンフォード大学の「バーチャルタウン」がオープンソース化:25人のAIエージェントが「ウエストワールド」に登場

「ウエストワールド」を見たことがある友人は、このドラマの舞台が未来の世界、巨大なハイテクな大人向けテ...

放送・ホスティング業界における人工知能の限界についての簡単な分析

[[430680]]科学技術の継続的な発展により、人工知能は人間の生活のあらゆる側面に関わるだけでな...

プログラマーの 90% が職を失いつつあり、Google AI によって書かれた機械学習コードはプログラマーよりも優れている!

ロボットはいくつの業界を置き換えることができるでしょうか? 初期の介護士から、後の編集者 (静かに悲...

専門家:歩行者の安全問題を解決するために都市は自動運転だけに頼ることはできない

自動運転技術が業界全体で開発のマイルストーンに到達し続ける一方で、都市は自動運転車(AV)の目標を補...

9つの一般的な畳み込みニューラルネットワークの紹介

畳み込みの目的は、入力から有用な特徴を抽出することです。画像処理では、さまざまなフィルターを選択でき...

基礎知識がない人でも機械学習に切り替えることは可能ですか?

基礎知識がない人でも機械学習に切り替えることは可能ですか?機械学習には一定の数学的基礎が必要であり、...

IT運用保守プラットフォームアルゴリズムの背後にある2つの「神の助け」

[51CTO.comからの原文] インテリジェント運用保守(AIops)は、IT運用保守の分野で最...

悪意のあるハッカーが生成AIを武器化している

研究結果をブログのネタとして使うことに慣れていないのですが、次の点に注目しました。Vulcan Cy...

例 | CNN と Python を使用した肺炎検出

導入こんにちは!数時間前にディープラーニング プロジェクトを終えたので、その成果を共有したいと思いま...