【Hugging Face Dataset】 ❗ 使用Process來變更資料集時, 請小心硬碟空間…

更新 發佈閱讀 5 分鐘
raw-image

圖片來源…

🔍 Huggingface dataset map increase disk space

我們在「【Hugging Face】Ep.3 前往Datasets掏金趣」有稍微介紹過Dataset在Hugging Face裡面扮演著什麼樣的角色,以及如何使用,沒錯! 它非常的好用,也很適合管理我們龐大的訓練資料,但… 過程中也有一些小細節需要非常注意,尤其實儲存策略與硬碟空間的規劃,硬體與軟體之間都息息相關,雖然過程曲折,但學習起來之後處理各式各樣的資料集我們都能夠得心應手,加快AI產品發展的進程,為公司帶來更大的營收。

先天限制條件

硬碟A的空間有限並不允許我們處理過程中緩存。

前景提要

raw-image

圖片來源…

故事是這樣的, 有一天大雄在進行Hugging Face進行資料處理時, 他使用到了「Process」來進行資料的轉換, 並且使用了.map()來改變欄位的值, 大概是這樣操作:

def 改變語句內容(ds: DatasetDict) -> DatasetDict:
實作細節...

ds = DatasetDict.load_from_disk(f'{資料集儲存的位置}')

# 注意: load_from_cache_file=True
ds = ds.map(改變語句內容, num_proc=4)

這時大雄卻發現到奇怪, 為什麼「資料集儲存的位置」容量怎麼增加了一倍? 到底是為什麼呢? 看著一臉無助的小夫, 我們只好來好好的協助一番。

首先我們先來看看官方關於map的參數說明: https://huggingface.co/docs/datasets/v2.14.0/en/package_reference/main_classes#datasets.Dataset.map

raw-image

我們可以看到keep_in_memory 參數, 感覺可以將緩存指向記憶體, 也確實如此, 但會有一些副作用…

再來好好看看緩存的文件: https://huggingface.co/docs/datasets/v2.14.0/en/cache

從中我們也發現到disable_caching , 真有辦法解決? 接下來我們也會依序實驗並給出幾個解決方案。

資源有限的狀況下我們可以怎麼解決?

第一種: 將快取結果輸出到更大空間的硬碟

這種方式當然最好, 既能保留舊版數據, 也能保留新版數據, 做實驗時能夠相互比對, 做個依據, 但現實總是資金有限, 畢竟硬碟也是成本啊…。

第二種: 替換法, 處理完畢的數據替換掉原本數據集


ds = DatasetDict.load_from_disk(f'{舊資料集}')

# 注意: load_from_cache_file=True
ds = ds.map(改變語句內容, num_proc=4)

# 直接覆蓋原有資料集
ds.save_to_disk(f'{舊資料集}')

# 保險一點也可以這樣做...

# ds.save_to_disk(f'{新資料集}')

# rm -rf 舊資料集

# mv 新資料集 舊資料集位置

第三種:關閉快取處理完畢後再打開

但這方式一樣會將資料載入到記憶體, 也需要注意到記憶體空間是否足夠的問題。

from datasets import disable_caching, enable_caching

disable_caching()

關閉後一樣的動作執行...

enable_caching()

第四種: 將快取導入到記憶體

我們可以設定keep_in_memory參數, 讓快取導引到記憶體。

ds = ds.map(..., num_proc=4, keep_in_memory=True)

但這會有副作用, 如果記憶體空間不足可能影響到其他程式, 因此不建議這麼做, 而且從硬碟到記憶體的時間也是一個耗損。

結語

Hugging Face的Dataset真的是處理訓練資料的好幫手, 但方便的背後還是有其代價的, 因此我們也應試著去了解一下背後的原理才能做出較佳的策略。

順道一題,本文的目標是以淺顯易懂的文章讓正在AI路上的夥伴能夠輕鬆理解問題與解決方法,讓我們一起加快腳步,過關斬將,迎向AI應用的那一哩路。

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?

歡迎加入一起練習寫作,賺取知識


更多關於【Hugging Face 系列】…

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
140會員
306內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
看更多
你可能也想看
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
目前 Heptabase 的功能,可以插入檔案來當成附件使用,我們輸入 / 後,可以插入圖檔、影片檔、音檔、PDF 文檔、或是其他檔案格式,讓我們更好的參照內容,我自己的習慣,如果檔案很小我可能會直接匯入,但大多數為了不拖垮同步速度,我會把檔案集中在雲端上,再用連結匯入,這是比較保險的作法。
Thumbnail
目前 Heptabase 的功能,可以插入檔案來當成附件使用,我們輸入 / 後,可以插入圖檔、影片檔、音檔、PDF 文檔、或是其他檔案格式,讓我們更好的參照內容,我自己的習慣,如果檔案很小我可能會直接匯入,但大多數為了不拖垮同步速度,我會把檔案集中在雲端上,再用連結匯入,這是比較保險的作法。
Thumbnail
工具功能 (1) 彈性任意查詢檔案,如對來源目錄設定,檔案修改日期 設定,檔名特定字串或副檔名設定後,自動查出明細,並可展開至各階子目錄處理     (2) 依查詢後結果,可產出 LIST ,提供查詢結果之確認,再依此對檔案作複 (3) 可對檔案作移動,複製至別處,刪除處理,使電腦可騰出硬碟空間
Thumbnail
工具功能 (1) 彈性任意查詢檔案,如對來源目錄設定,檔案修改日期 設定,檔名特定字串或副檔名設定後,自動查出明細,並可展開至各階子目錄處理     (2) 依查詢後結果,可產出 LIST ,提供查詢結果之確認,再依此對檔案作複 (3) 可對檔案作移動,複製至別處,刪除處理,使電腦可騰出硬碟空間
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
Select the datastore you want to RENAME\rename\Input a new name\done
Thumbnail
Select the datastore you want to RENAME\rename\Input a new name\done
Thumbnail
這篇要測試的工作流是Face Swap。
Thumbnail
這篇要測試的工作流是Face Swap。
Thumbnail
Sandbox 架構 /Documents:主要用於儲存用戶生成的數據或者不能重新創建的數據。這些可能包括由你的應用程式創建的文件、從服務器下載的文件、用戶在應用程式中創建或修改的數據等。 這些數據在應用程式的生命週期中是持久保存的,即使應用程式被終止或者系統重啟,這些數據也會保留。此外
Thumbnail
Sandbox 架構 /Documents:主要用於儲存用戶生成的數據或者不能重新創建的數據。這些可能包括由你的應用程式創建的文件、從服務器下載的文件、用戶在應用程式中創建或修改的數據等。 這些數據在應用程式的生命週期中是持久保存的,即使應用程式被終止或者系統重啟,這些數據也會保留。此外
Thumbnail
要談論DBMS,除了SQL語法之外,我們還必須了解底層是怎麼處理資料儲存的,也就是DBMS架構的底層Disk Space Management: Disk Space Management 提供API來讀/寫資料到硬碟,資料會以Page為傳輸單位,為什麼會一次要等到這麼大才寫入硬碟或一次要讀這麼
Thumbnail
要談論DBMS,除了SQL語法之外,我們還必須了解底層是怎麼處理資料儲存的,也就是DBMS架構的底層Disk Space Management: Disk Space Management 提供API來讀/寫資料到硬碟,資料會以Page為傳輸單位,為什麼會一次要等到這麼大才寫入硬碟或一次要讀這麼
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News