paint-brush
ディープラーニングのためのレイクハウス「Deep Lake」: テンソルストレージ形式@dataology
158 測定値

ディープラーニングのためのレイクハウス「Deep Lake」: テンソルストレージ形式

長すぎる; 読むには

研究者らは、ディープラーニング フレームワーク向けに複雑なデータ ストレージとストリーミングを最適化する、ディープラーニング用のオープンソース レイクハウスである Deep Lake を紹介します。
featured image - ディープラーニングのためのレイクハウス「Deep Lake」: テンソルストレージ形式
Dataology: Study of Data in Computer Science HackerNoon profile picture
0-item

著者:

(1)サスン・ハンバルズミアン、アクティブループ、カリフォルニア州マウンテンビュー、米国

(2)アビナブ・トゥリ、アクティブループ、カリフォルニア州マウンテンビュー、米国

(3)レヴォン・グカシアン、アクティブループ、カリフォルニア州マウンテンビュー、米国

(4)ファリズ・ラーマン、アクティブループ、カリフォルニア州マウンテンビュー、米国。

(5)Hrant Topchyan、Activeloop、カリフォルニア州マウンテンビュー、米国

(6)デビッド・イサヤン、アクティブループ、カリフォルニア州マウンテンビュー、米国

(7)マーク・マククエイド、アクティブループ、カリフォルニア州マウンテンビュー、米国

(8)ミカエル・ハルティニャン、アクティブループ、カリフォルニア州マウンテンビュー、米国

(9)Tatevik Hakobyan、Activeloop、カリフォルニア州マウンテンビュー、米国

(10)イヴォ・ストラニック、アクティブループ、カリフォルニア州マウンテンビュー、米国

(11)ダビット・ブニアティアン、アクティブループ、カリフォルニア州マウンテンビュー、米国。

リンク一覧

3. テンソル保存形式

Deep Lake データセットは、図 3 に示すように、テンソルを列として持つ列指向ストレージ アーキテクチャに従います。各テンソルは、データ サンプルを含むバイナリ ブロブであるチャンクのコレクションです。各テンソルに関連付けられたインデックス マップは、特定のサンプル インデックスに対して、そのチャンク内のサンプルの正しいチャンクとインデックスを見つけるのに役立ちます。

3.1 データセット

データセット内のサンプルは、並列テンソルにわたってインデックス付けされた単一の行を表します。ドキュメント ストレージ形式とは対照的に、サンプル要素は論理的に独立しているため、サンプルへの部分的なアクセスが可能になり、パフォーマンスの高いクエリを実行したり、選択したテンソルをネットワーク経由で GPU トレーニング インスタンスにストリーミングしたりできます。複数のテンソルをグループ化できます。グループは構文のネストを実装し、テンソルが互いにどのように関連しているかを定義します。構文のネストにより、階層型メモリ レイアウトの形式の複雑さが回避されます。データセットのスキーマの変更も、データセット コンテンツの変更と同様に、バージョン管理によって時間の経過とともに追跡されます。

3.2 テンソル

テンソルは型付けされており、インプレースで追加または変更できます。インデックスまたはインデックスのセットへのデフォルトのアクセスは、データをNumPy配列として返します[55]。Parquet [79]やArrow [13]のシリーズに見られる1次元データを格納する代わりに、テンソルはn次元データを収容することができ、通常、最初の次元はインデックスまたはバッチ次元に対応します。テンソルには、Zarr [52]などの他の静的にチャンク化された配列形式とは対照的に、不規則なテンソルとも呼ばれる動的に形成された配列を含めることができます。

3.3 種類

htype は、データ型 (NumPy [55] で見られる dtype)、形状、次元数、圧縮など、テンソル内のサンプルに対する期待を定義します。型付きテンソルにより、ディープラーニング フレームワークとのやり取りが簡単になり、健全性チェックと効率的なメモリ レイアウトが可能になります。汎用テンソル htype を継承することで、image、video、audio、bbox、dicom などの型を構築できます。たとえば、image htype を持つテンソルは、追加されるサンプルの dtype が uint8 で、形状の長さが 3 (つまり、幅、高さ、チャネル数) であると想定します。htype の概念をさらに拡張して、画像シーケンスをテンソルに格納する (sequence[image])、リモートで格納された画像を参照する一方で、画像テンソルの通常の動作を維持する (link[image])、さらには可能なクロスフォーマットのサポートもサポートするメタ型を可能にします。


図3: 各サンプル(行)が動的にサイズ調整されるチャンクを持つ列テンソルのセットに格納される様子

3.4 メモリレイアウト

Deep Lake データセットには、JSON 形式の起源ファイルとテンソルごとのフォルダーが含まれています。テンソルには、チャンク、チャンク エンコーダー、タイル エンコーダー、テンソル メタデータが含まれます。テンソルはオプションで非表示にできます。たとえば、非表示のテンソルを使用して、画像のダウンサンプリング バージョンを維持したり、高速クエリのために形状情報を保持したりできます。


テンソルは、ストレージ レベルでチャンクに格納されます。静的 (推測) に形作られたチャンクは、チャンク マップ テーブルの維持を回避しますが、テンソルの指定時にユーザー オーバーヘッドが大きくなり、カスタム圧縮の使用制限、動的に形作られたテンソルのストレージが十分に活用されず、後処理が非効率になります。Deep Lake のチャンクは、限られた数のサンプルに合うように、チャンク サイズの下限と上限に基づいて構築されます。これには、圧縮されたインデックス マップを持つというトレードオフが伴います。圧縮されたインデックス マップでは、テンソルごとにサンプル インデックスとチャンク ID のマッピングが保持されますが、混合形状のサンプルに対応しながら、ストリーミングに最適な範囲でチャンク サイズが有効になります。このホワイト ペーパーで採用されているアプローチは、ファイル システム ページ マップとコンピューティング定義のマップレス配列ストレージ システムの間の最適化されたトレードオフであると考えることができます。実用的な理由から、1 PB のテンソル データごとに 150 MB のチャンク エンコーダーを維持しながら、単一のチャンク エンコーダーを数十億の画像に拡張できます。チャンク エンコーダーをシャーディングすることで、さらにスケーリングできます。チャンクには、バイト範囲、サンプルの形状、サンプル データ自体などのヘッダー情報が含まれます。サンプルが上限のチャンク サイズより大きい場合 (大きな航空写真や顕微鏡写真の場合など)、サンプルは空間次元にわたってチャンクにタイル化されます。タイル化の唯一の例外はビデオです。ビデオは、インデックスへの効率的なフレーム マッピング、キー フレームのみの解凍、ストリーミング中の範囲ベースの要求により保持されます。

3.5 アクセスパターン

テンソル ストレージ形式は、シーケンシャル アクセスとランダム アクセスを含むディープラーニングのトレーニングと推論用に最適化されています。シーケンシャル アクセスは、スキャン クエリの実行、テンソルの他のテンソルへの変換、または推論の実行に使用されます。ランダム アクセスのユース ケースには、複数のアノテーターが同じ画像にラベルを書き込む場合や、モデルがデータセットとともに予測をバック保存する場合などがあります。厳密モードが無効になっている間は、テンソルの範囲外のインデックスを割り当てることができるため、スパース テンソルに対応できます。ただし、時間の経過とともにランダムに割り当てると、非効率的に保存されたデータ チャンクが生成されます。データ レイアウトを修正するために、オンザフライの再チャンク化アルゴリズムを実装して、データ レイアウトを最適化します。Deep Lake の主要なアクセス パターンの 1 つは、機械学習モデルのトレーニング用のシャッフル ストリーム アクセスです。チャンクをトレーニング プロセスにストリーミングする際には、ランダムまたはカスタム順序のアクセスが必要です。これは、チャンク内のサブ要素にアクセスするための範囲ベースのリクエスト、順序を決定するためのトレーニング前の複雑なクエリの実行、取得された未使用データのバッファー キャッシュの維持によって実現されます。これにより、シャッフルアルゴリズムを実行するための別個の計算クラスタを用意する必要がなくなります[50]。


各テンソルには独自のチャンクがあり、デフォルトのチャンク サイズは 8 MB です。個々のデータ ポイント (画像、ラベル、注釈など) がチャンク サイズより小さい場合、1 つのチャンクは複数のインデックスのデータで構成されます。逆に、個々のデータ ポイントがチャンク サイズより大きい場合、データは複数のチャンクに分割されます (タイリング)。チャンク ロジックの例外はビデオ データです。


Deep Lake 形式は、GPU 処理のスループットを最大化するように最適化されています。ディープラーニング フレームワークの想定されるレイアウトで、CPU プリフェッチ、解凍またはデコード、変換、GPU メモリ転送が含まれます。

3.6 ストレージプロバイダー

Deep Lakeは、AWS S3 [1]、Google Cloud Storage (GCS) [3]などのオブジェクトストレージ、POSIX互換ファイルシステム、ローカルのインメモリストレージなど、あらゆるストレージプロバイダーに接続できます。さらに、さまざまなストレージプロバイダーを連鎖させることでメモリキャッシュを構築します。たとえば、リモートS3ストレージのLRU (Least Recently Used)キャッシュとローカルのインメモリデータです。


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