HDF5資料格式不適合深度學習 - KDnuggets

banq發表於2021-11-14

在本文中,我們將討論 HDF5 是最流行和最可靠的非表格數字資料格式之一。但是這種格式並未針對深度學習工作進行優化。本文建議應該採用什麼樣的 ML 原生資料格式才能真正滿足現代資料科學家的需求。

HDF5是最流行和最可靠的非表格數字資料格式之一。我給你舉個例子。NASA 的地球觀測系統衛星每天以 HDF5 格式收集大約 16 TB 的資料。

命名資料集、分層組織的組、使用者定義的後設資料和屬性、壓縮過濾器、延遲載入2和跨不同軸的類陣列切片等功能使其適用於許多資料處理任務。

儘管 HDF 是在 20 多年前建立的,但通過像h5py這樣維護良好的開源庫,HDF 在 PyData 社群中仍然很受歡迎。

 

HDF5 未針對深度學習進行優化

在 HDF5 中,大型資料集通常儲存為“塊”;即,陣列的常規分割槽。雖然這一設計決策意味著 HDF 可以儲存千萬億級的非結構化數值資料,如影像和視訊,但它是在雲物件儲存或深度學習之前建立的。因此,DL 工作負載存在許多缺點:

  1. HDF 檔案的佈局使它們難以在雲端儲存系統(如 Amazon 的 S3 )上進行有效查詢,其中儲存了越來越多的 ML 資料集。您不能直接從儲存為 S3 物件的 HDF5 檔案中讀取 HDF5 庫。在實踐中,整個檔案(通常大小為 GB)應該被複制到本地儲存,然後只能讀取第一個位元組。
  2. 很難以並行方式對資料應用轉換。轉換,無論是計算機視覺的資料增強還是 NLP 的標記化,都是任何深度學習實驗的核心。
  3. HDF5(Python 實現)基本上是單執行緒的。這意味著在給定時間只有一個核心可以讀取或寫入資料集。它不容易被併發讀取訪問,這限制了 HDF5 資料支援多個 worker 的能力。
  4. 它沒有與 Keras 和 PyTorch 等現代框架整合,這意味著研究人員通常需要編寫自定義 DataLoader。隨著 DataLoader 承擔更多職責,例如為並行訓練分片資料集,它們變得更加難以定義。
  5. 由於 HDF 後設資料散佈在整個檔案中,因此很難訪問隨機的資料塊。事實上,它需要進行許多小的讀取,以收集提取大量資料所需的後設資料。

由於這些挑戰,大多數使用者在可以執行單個 epoch 之前將資料轉換為另一種格式(例如 csv 或 TFRecords)。

 

ML 社群需要一種新的資料儲存格式

  • 雲原生。它應該在不犧牲 GPU 利用率的情況下與雲物件儲存系統(例如 S3 和 GCS)一起使用。
  • 可並行化。由於大多數 ML 資料集是一次寫入、多次讀取,因此它應該支援多個 worker 的併發讀取。
  • 隨機訪問。由於研究人員很少需要預先獲得整個資料集,因此應以隨機方式訪問以這種格式儲存的資料。
  • 轉型。它應該能夠在執行時以最少的程式碼開銷對資料應用任意轉換。這是因為下載 TB 的資料通常是不切實際的:大多數使用者無法訪問大資料叢集,以便在下載後根據需要對資料進行切片和切塊。
  • 整合。它應該與流行的深度學習框架(如 Keras 和 PyTorch)以及其他 PyData 庫(如 Numpy 和 Pandas)整合。理想情況下,研究人員應該能夠使用他們為本地儲存的較小資料集開發的相同指令碼訪問這些巨大的雲資料集。

相關文章