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

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

回答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が新たな記録を樹立:ACL 2020に27本の論文が選出

最近、計算言語学会(ACL)は公式ウェブサイトでACL 2020の採択論文リストを発表し、合計779...

Dynalang - 言語を使って世界のモデルを学習する新しいAIテクノロジー

翻訳者|朱 仙中レビュー | Chonglou導入この記事は、人工知能に関する最新の研究に関する当社...

...

AIを活用して食材を分析し、より適切な栄養バランスを実現しましょう!

[[396039]]ビッグデータダイジェスト制作出典: Engadget編集:赤道のパンダ人工知能...

COVID-19パンデミックの影響を受けて、世界のエッジAIソフトウェア市場は急速な発展を遂げている

MarketsandMarkets は、エッジ AI ソフトウェア市場が 2019 年から 2021...

...

人工知能はソフトウェア開発のパラダイムを変えている

今日、多くのソフトウェア開発者は、コードの作成とレビュー、バグの検出、ソフトウェアのテスト、開発プロ...

7つの予測ストレージ分析ツールの比較

人工知能技術は、機械学習、計算統計、さまざまなディープラーニングモデルの使用を通じて主流になりました...

世界自動運転年間「強さ」リストが発表、百度がウェイモを抜いて首位に、ウェイモ:評価基準に反対

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