paint-brush
データローダーの概要: データローダー@serialization

データローダーの概要: データローダー

長すぎる; 読むには

この論文では、研究者はデータローダーを ML トレーニング改善の鍵として強調し、ライブラリの機能性、使いやすさ、パフォーマンスを比較しています。
featured image - データローダーの概要: データローダー
The Serialization Publication HackerNoon profile picture
0-item

著者:

(1)イアソン・オフェイディス、イェール大学電気工学部およびイェールネットワーク科学研究所、ニューヘブン {同等の貢献}

(2)ディエゴ・キエダンスキ、イェール大学電気工学部およびイェールネットワーク科学研究所、ニューヘブン {同等の貢献}

(3)Leandros TassiulasLevon Ghukasyan、Activeloop、米国カリフォルニア州マウンテンビュー、電気工学部およびイェール大学ネットワーク科学研究所、ニューヘブン。

リンク一覧

2. データローダー

ディープラーニング モデルのトレーニング プロセスでは、データセットをメモリから読み込んで前処理してから、モデルに入力として渡す必要があります。この操作では、データを一度にすべてメモリにロードする必要があります。ほとんどの場合、特に大規模なデータセットでは、システムで使用できるメモリの量が限られているためメモリ不足が発生し、システムの応答時間も低下します。このボトルネックは、ディープラーニング ライブラリでいわゆるデータローダーを使用することで解決されることがよくあります。この構造により、並列処理、プリフェッチ、バッチ処理、その他の手法を活用してデータセットを反復処理し、データのロード時間とメモリのオーバーヘッドを可能な限り削減できます (Paszke 他、2019)。


データローダーの主な目的は、モデルに入力するサンプルのバッチを形成するために、データ サンプルをストレージの場所から処理ユニットと同じ場所にあるメモリに転送するアクションを実行することです。これらのアクションは、ストレージ システムの帯域幅、特に I/O パフォーマンスによって制限されます。したがって、システムのハードウェア仕様、それを処理するファイル システム、およびコンピューティング ユニットとのリンクのスループットに応じて、トレーニングを完了するために必要な合計時間に多大な影響を与える可能性があります。


データローダー コンポーネントの次の仕様は主に PyTorch (torch.DataLoader() (PyTorch Core Team)) に焦点を当てていますが、TensorFlow の対応するコンポーネント (tf.Dataset() (Abadi 他、2015)) は同じではありませんが、非常によく似ています。


データローダーを使用する場合、入力用のデータセットを提供する以外に、ユーザーはニーズとリソースに合わせていくつかのハイパーパラメータを構成するオプションがあります。すべてのデータローダーで使用できる共通のパラメータはバッチ サイズです。これは、前述のように、内部モデル パラメータを更新する前に使用するサンプルの数を定義します。このパラメータは、確率的勾配降下法 (Hinton 他、2012) の「ミニバッチ」の概念と本質的に関連しているため、より良いトレーニング結果を達成する必要がある場合に通常微調整される最初のパラメータの 1 つです。


次に、ユーザーはサンプリング アプローチを定義できます。これは、データセットからサンプルを抽出してバッチに挿入する戦略を決定します。これには、特定の基準と確率分布に基づいたサンプルの選択が含まれます。このステップにはシャッフルのオプションがあり、データセットの反復の前にサンプルを再配置できます。通常、その目的はトレーニング モデルの一般化を向上させることです。もう 1 つのパラメーターは、照合/パディング関数です。これは基本的に、バッチ内のすべての個別のサンプルをリンクするプロセスを指定します (ベクトルをテンソルに積み重ねると考えてください)。これにより、トレーニング モデルへの入力として供給される単一の要素が形成されます。さらに、データローダーは、取得したデータ サンプルを固定 (ページ ロック) メモリに自動的に保存するように構成できるため、CUDA 対応デバイスへのデータ転送が高速になります。


データローダーには、このデータ転送プロセスを最適化することを目的としたワーカーと呼ばれるコンポーネントが付属しています。ワーカーは、非同期方式でデータ読み込みを実行するサブプロセスとして定義されます。データローダーのインスタンスを作成するときに、ユーザーは、生成されてこの操作を制御するワーカーの数を指定できます。ワーカーの数がゼロの場合、サブプロセスは作成されません。つまり、同じプロセスでデータ取得が同期的に行われるため、コンピューティング ユニット (GPU) はデータ読み込みが完了するまで待機する必要があります (PyTorch Core Team)。逆に、ワーカーの数と同じ数のサブプロセスが生成され、データ読み込みによる計算コードのブロックが防止されます。これは、必要なときに準備できるように、将来のバッチを事前にプリフェッチすることで実現されます。


この論文はCC 4.0ライセンスの下でarxivで公開されています