NVIDIA Data Loading Library (DALI) は、深層学習アプリケーションを高速化するためのデータの読み込みと前処理のための GPU 高速化ライブラリです。画像、ビデオ、オーディオ データのロードと処理のために、高度に最適化されたビルディング ブロックのコレクションを提供します。一般的な深層学習フレームワークの組み込みデータ ローダーおよびデータ イテレーターのポータブルなドロップイン代替品として使用できます。
深層学習アプリケーションには、ロード、デコード、トリミング、サイズ変更、その他多くの拡張を含む、複雑な多段階のデータ処理パイプラインが必要です。現在 CPU 上で実行されているこれらのデータ処理パイプラインがボトルネックとなり、トレーニングと推論のパフォーマンスとスケーラビリティを制限しています。
DALI は、データの前処理を GPU にオフロードすることで、CPU ボトルネックの問題に対処します。さらに、DALI は、入力パイプラインのスループットを最大化するために構築された独自の実行エンジンに依存しています。プリフェッチ、並列実行、バッチ処理などの機能は、ユーザーに対して透過的に処理されます。
さらに、深層学習フレームワークには複数のデータ前処理実装があり、その結果、トレーニングと推論のワークフローの移植性、コードの保守性などの課題が生じます。 DALI を使用して実装されたデータ処理パイプラインは、TensorFlow、PyTorch、PaddlePaddle に簡単にターゲットを変更できるため、移植性があります。
DALI の動作:
from nvidia.dali.pipeline import Pipeline_defimport nvidia.dali.types as typeimport nvidia.dali.fn as fnfrom nvidia.dali.plugin.pytorch import DALIGenericIteratorimport os# 別のデータで実行するには、nvidia.dali.fn.readers のドキュメントを参照してください。 file# は https://github.com/NVIDIA/DALI_extradata_root_dir = os.environ['DALI_EXTRA_PATH']images_dir = os.path.join(data_root_dir, 'db', 'single', 'jpeg')def loss_func(pred を指します) 、y):passdefモデル(x):passdefbackward(loss,model):pass@pipeline_def(num_threads=4, device_id=0)def get_dali_pipeline():images,labels = fn.readers.file(file_root=images_dir,random_shuffle) =True, name="Reader")# GPU でデータをデコードしますimages = fn.decoders.image_random_crop(images, device="mixed", output_type=types.RGB)# 残りの処理は、wellimages = fn と同様に GPU で行われます。サイズ変更(images、resize_x=256、resize_y=256)images = fn.crop_mirror_normalize(images、crop_h=224、crop_w=224、mean=[0.485 * 255, 0.456 * 255, 0.406 * 255],std=[0.229 * 255] 、0.224 * 255、0.225 * 255]、mirror=fn.random.coin_flip())画像を返します、labeltrain_data = DALIGenericIterator( [get_dali_pipeline(batch_size=16)], ['data', 'label'],reader_name='Reader')for i、enumerate(train_data) のデータ:x, y = data[0]['data'], data[0]['label']pred = モデル(x) 損失 = loss_func(pred, y)backward(損失, モデル)
使いやすい関数型スタイルの Python API。
複数のデータ形式をサポート - LMDB、RecordIO、TFRecord、COCO、JPEG、JPEG 2000、WAV、FLAC、OGG、H.264、VP9、HEVC。
一般的な深層学習フレームワーク (TensorFlow、PyTorch、PaddlePaddle、JAX) 間で移植可能。
CPU と GPU の実行をサポートします。
複数の GPU にわたって拡張可能。
柔軟なグラフにより、開発者はカスタム パイプラインを作成できます。
カスタム演算子を使用してユーザー固有のニーズに合わせて拡張できます。
画像分類 (ResNet-50)、物体検出 (SSD) ワークロード、および ASR モデル (Jasper、RNN-T) を高速化します。
GPUDirect Storage を使用して、ストレージと GPU メモリ間の直接データ パスを許可します。
DALI TRITON バックエンドを備えた NVIDIA Triton Inference Server と簡単に統合できます。
オープンソース。
Kaggle コンピューター ビジョン コンテスト中: 「DALI は、このコンテストで学んだ最高のことの 1 つです。」
Lightning Pose - 最先端の姿勢推定研究モデル
アドバンスト コンピューティング インフラストラクチャのリソース使用率を向上させるには
MLPerf - コンピューティングおよびディープラーニングのハードウェアおよびソフトウェアのベンチマークの業界標準
「DALI フレームワークを使用して eBay 内の主要モデルを最適化しました。」
次号では、2024 年計画の高レベルの概要を示します。このロードマップはいつでも変更される可能性があり、その項目の順序はいかなる種類の優先順位も反映していないことに注意してください。
私たちのロードマップについてコメントし、言及された GitHub の問題についてフィードバックを提供することを強くお勧めします。
最新の CUDA バージョン (12.x) 用の最新の DALI リリースをインストールするには、次の手順を実行します。
pip インストール nvidia-dali-cuda120 # または pip install --extra-index-url https://pypi.nvidia.com --upgrade nvidia-dali-cuda120
DALI には、適切な CUDA バージョンをサポートする NVIDIA ドライバーが必要です。 CUDA 12 ベースの DALI の場合、CUDA Toolkit をインストールする必要があります。
DALI は、NVIDIA GPU クラウド上の TensorFlow、PyTorch、および PaddlePaddle コンテナーにプリインストールされています。
他のインストール パス (TensorFlow プラグイン、古い CUDA バージョン、夜間および毎週のビルドなど) および特定の要件については、インストール ガイドを参照してください。
ソースから DALI をビルドするには、コンパイル ガイドを参照してください。
DALI の概要については、「はじめに」ページを参照してください。
より高度な例は、「例とチュートリアル」ページにあります。
サンプルの対話型バージョン (Jupyter ノートブック) については、docs/examples ディレクトリに移動してください。
注:バージョンに応じて、メイン ブランチと同期した最新のリリース ドキュメントまたはナイトリー リリース ドキュメントを選択します。
GPU テクノロジー カンファレンス 2024; eBay で最高のパフォーマンスを実現する推論モデルの最適化。ワン・イーヘン:イベント
GPU テクノロジー カンファレンス 2023;開発者ブレークアウト: Triton Server と DALI でエンタープライズ ワークフローを加速する;ブランドン・タトル: イベント。
GPU テクノロジー カンファレンス 2023; GPU によるエンドツーエンドの地理空間ワークフローの高速化;ケビン・グリーン: イベント。
GPU テクノロジー カンファレンス 2022;効果的な NVIDIA DALI: 現実のディープラーニング アプリケーションを加速する;ラファウ・バナシュ: イベント。
GPU テクノロジー カンファレンス 2022; NVIDIA DALI の概要: GPU アクセラレーションによるデータ前処理;ホアキン・アントン・ギラオ:イベント。
GPU テクノロジー カンファレンス 2021; NVIDIA DALI: Krzysztof Łęcki 氏と Michał Szołucha 氏による GPU によるデータ前処理: イベント。
GPU テクノロジー カンファレンス 2020; NVIDIA Data Loading Library (DALI) による高速データ前処理。アルバート・ウォラント、ホアキン・アントン・ギラオ:録音。
GPU テクノロジー カンファレンス 2019; DALI による高速 AI データ前処理。ヤヌシュ・リシエツキ、ミハウ・ジェンキェヴィチ:スライド、録音。
GPU テクノロジー カンファレンス 2019; DALI と Xavier 上の TensorRT の統合。 Josh Park と Anurag Dixit: スライド、録音。
GPU テクノロジー カンファレンス 2018;深層学習トレーニング用の高速データ パイプライン、T. ゲイル、S. レイトン、P. トレダック: スライド、記録。
開発者ページ。
ブログ投稿。
DALI への貢献を歓迎します。 DALI に貢献してプル リクエストを行うには、貢献ドキュメントに概説されているガイドラインに従ってください。
手始めに適したタスクを探している場合は、外部貢献歓迎ラベルからタスクをチェックしてください。
フィードバック、質問、バグ報告をお待ちしております。コードに関するヘルプが必要な場合は、スタック オーバーフローのドキュメントに概説されているプロセスに従ってください。投稿された例が次のとおりであることを確認してください。
minimum : 同じ問題が発生するコードをできるだけ少なくします。
complete : 問題を再現するために必要なすべての部品を提供します。外部依存関係を削除しても問題が発生するかどうかを確認してください。問題の再現に費やす時間が減れば、修正により多くの時間を費やすことができます。
verifiable : 提供しようとしているコードをテストして、問題が再現されることを確認します。リクエストに関係のないその他の問題をすべて削除してください。
DALI は当初、Trevor Gale、Przemek Tredak、Simon Layton、Andrei Ivanov、Serge Panev らの多大な貢献によって構築されました。