使用mmap 數據加載器,直接讀取二進制96GB 文本原始數據

更新 發佈閱讀 8 分鐘

96GB 的原始文本在 Tokenize 之後,轉換為 Uint16 的二進制數據大約會佔用 150GB - 200GB 的磁碟空間。在兩張 RTX 5090 上運行 7B 模型時,使用 Memory Mapping (mmap) 是確保 GPU 不會因為等待 I/O 而閒置的最強方案。

以下是一個簡化但工業級的實作方案,分為 「轉換腳本」「加載器」 兩部分。


第一步:將 96GB 文本轉換為二進制 (.bin)

我們使用 numpy.memmap 來創建一個巨大的二進制文件,並配合 indices 文件記錄數據位置。

</>Python
import numpy as np
from transformers import AutoTokenizer
import os

def preprocess_to_bin(text_files, output_bin, tokenizer_path):
tokenizer = AutoTokenizer.from_pretrained(tokenizer_path)
# 使用 uint16 因為多數詞表大小 < 65535
# 如果詞表 > 65k,請改用 np.uint32

with open(output_bin, 'wb') as f:
for file_path in text_files:
with open(file_path, 'r', encoding='utf-8') as tf:
for line in tf:
tokens = tokenizer.encode(line.strip())
if tokens:
# 將 token 寫入二進制文件
np.array(tokens, dtype=np.uint16).tofile(f)

# 執行轉換 (這可能需要數小時,視 CPU 速度而定)
# preprocess_to_bin(["data1.txt", "data2.txt"], "train_data.bin", "llama-3-tokenizer")

第二步:高效的 mmap 數據加載器

這段代碼會模擬 Dataset 類,讓 PyTorch 能夠以「零內存佔用」的方式隨機存取 200GB 的數據。

</>Python
import torch
from torch.utils.data import Dataset
import numpy as np

class MmapDataset(Dataset):
def __init__(self, bin_path, block_size=2048):
self.bin_path = bin_path
self.block_size = block_size

# 使用 memmap 模式讀取,這不會把文件載入 RAM
# offset=0, mode='r' 代表唯讀映射
self.data = np.memmap(bin_path, dtype=np.uint16, mode='r')

# 計算總共有多少個訓練樣本 (Total Tokens / Block Size)
self.num_samples = len(self.data) // block_size

def __len__(self):
return self.num_samples

def __getitem__(self, idx):
# 根據索引計算起始位置
start = idx * self.block_size
end = start + self.block_size

# 從硬碟映射中切片 (Slice),操作系統會自動處理頁面快取
chunk = self.data[start:end].astype(np.int64)

# 轉換為 PyTorch Tensor
x = torch.from_numpy(chunk)

# 在預訓練中,Label 通常就是 Input 右移一位 (Causal Language Modeling)
# 這裡簡化處理,直接回傳同一段,在訓練循環中再處理 shift
return x

# 使用方法
dataset = MmapDataset("train_data.bin", block_size=2048)
dataloader = torch.utils.data.DataLoader(
dataset,
batch_size=4,
shuffle=True,
num_workers=4,
pin_memory=True # 必開,加速數據傳輸到 5090
)

針對 2x 5090 的專業調優建議

  1. 數據類型選擇: 如果你的 Tokenizer 是 Llama-3 (詞表 128k),np.uint16 會溢出,請務必改用 np.uint32。雖然這會讓數據集體積增加一倍,但能保證數據正確性。
  2. 多卡分布式讀取: 在使用 DistributedDataParallelDeepSpeed 時,記得在 DataLoader 中加入 DistributedSampler
</>Python
sampler = torch.utils.data.distributed.DistributedSampler(dataset)
loader = DataLoader(dataset, sampler=sampler, ...)
  1. 磁碟性能: 96GB 文本轉成 bin 後很大,請確保你的 SSD 剩餘空間大於 300GB。對於 5090 這種等級的卡,建議使用 NVMe Gen4 或 Gen5 SSD,否則 shuffle=True 時的隨機讀取可能會導致卡頓。

💡 小提醒:24 小時不間斷訓練

兩張 5090 滿載預訓練 7B 模型是非常吃電的。建議你在啟動腳本前,先用 nvidia-smi 限制每張卡的功耗(例如限制在 450W),這能防止突發大電流導致跳電,且對訓練速度的影響通常不到 5%。




留言
avatar-img
sirius數字沙龍
9會員
224內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
sirius數字沙龍的其他內容
2026/03/04
處理大數據集(Big Data for LLM Pre-training)是預訓練中最容易被忽視的瓶頸。如果直接用 JSON 或 CSV 格式讀取,兩張 RTX 5090 會花 80% 的時間在「等 CPU 讀硬碟」,這叫 I/O Bound。 為了餵飽 5090 的強大算力,你需要將原始文本轉換
Thumbnail
2026/03/04
處理大數據集(Big Data for LLM Pre-training)是預訓練中最容易被忽視的瓶頸。如果直接用 JSON 或 CSV 格式讀取,兩張 RTX 5090 會花 80% 的時間在「等 CPU 讀硬碟」,這叫 I/O Bound。 為了餵飽 5090 的強大算力,你需要將原始文本轉換
Thumbnail
2026/03/04
兩張 RTX 5090(每張擁有 32GB GDDR7 顯存與 Blackwell 架構)是目前消費級硬體的頂規配置。針對 7B 規模模型的 Pre-train(預訓練),這個配置非常理想,甚至可以說是非常奢侈。 在 2026 年的技術標準下,針對此硬體與 7B 模型,以下是最佳實踐指南。
Thumbnail
2026/03/04
兩張 RTX 5090(每張擁有 32GB GDDR7 顯存與 Blackwell 架構)是目前消費級硬體的頂規配置。針對 7B 規模模型的 Pre-train(預訓練),這個配置非常理想,甚至可以說是非常奢侈。 在 2026 年的技術標準下,針對此硬體與 7B 模型,以下是最佳實踐指南。
Thumbnail
2026/03/04
⚔️ 從頭開始進行 預訓練 (Pre-training) 是 AI 領域中最具挑戰性也最迷人的任務。這不僅是技術的展現,更是對硬體資源與數據處理能力的極致考驗。 既然目標是 Pre-train,這意味著您需要處理海量的 Token(通常以 Trillion 為單位)以及極長的時間。
Thumbnail
2026/03/04
⚔️ 從頭開始進行 預訓練 (Pre-training) 是 AI 領域中最具挑戰性也最迷人的任務。這不僅是技術的展現,更是對硬體資源與數據處理能力的極致考驗。 既然目標是 Pre-train,這意味著您需要處理海量的 Token(通常以 Trillion 為單位)以及極長的時間。
Thumbnail
看更多
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
很多新手工程師常問我: 「NVMe SSD 的測試流程是不是就是跑幾組 FIO?」我的答案是——不只如此,而且差得遠。 真正完整的 NVMe SSD 測試流程,涵蓋了從命令功能正確性、相容性平台測試、效能穩定性,到壽命與可靠度驗證,每一個測項都是在為產品做風險排雷。 這篇文章,我會用一個系統化的
Thumbnail
很多新手工程師常問我: 「NVMe SSD 的測試流程是不是就是跑幾組 FIO?」我的答案是——不只如此,而且差得遠。 真正完整的 NVMe SSD 測試流程,涵蓋了從命令功能正確性、相容性平台測試、效能穩定性,到壽命與可靠度驗證,每一個測項都是在為產品做風險排雷。 這篇文章,我會用一個系統化的
Thumbnail
本文探討AI伺服器儲存架構與傳統伺服器儲存架構的差異,分析AI工作負載對儲存系統的特殊需求,例如巨大數據量、特殊I/O模式、高併發、頻繁數據更新以及對SSD的極致要求,並深入闡述這些需求如何推動儲存技術和架構的演進。
Thumbnail
本文探討AI伺服器儲存架構與傳統伺服器儲存架構的差異,分析AI工作負載對儲存系統的特殊需求,例如巨大數據量、特殊I/O模式、高併發、頻繁數據更新以及對SSD的極致要求,並深入闡述這些需求如何推動儲存技術和架構的演進。
Thumbnail
本篇文章提供關於NVMe SSD驗證測試的完整指南,涵蓋硬體平臺選擇、軟體工具配置、監控系統建立、以及性能瓶頸排查等實務面向。透過詳盡的步驟、案例分享及實用技巧,協助讀者深入理解NVMe SSD測試的複雜性和重要性,並提升測試效率與可靠性。
Thumbnail
本篇文章提供關於NVMe SSD驗證測試的完整指南,涵蓋硬體平臺選擇、軟體工具配置、監控系統建立、以及性能瓶頸排查等實務面向。透過詳盡的步驟、案例分享及實用技巧,協助讀者深入理解NVMe SSD測試的複雜性和重要性,並提升測試效率與可靠性。
Thumbnail
本文探討 NVMe SSD 穩定性驗證的重要性,並詳細介紹長時間壓力測試、數據完整性測試、掉電保護測試和熱插拔測試四種關鍵測試方法,包括測試目的、方法、腳本範例及注意事項,以確保 NVMe SSD 的長期可靠運行。
Thumbnail
本文探討 NVMe SSD 穩定性驗證的重要性,並詳細介紹長時間壓力測試、數據完整性測試、掉電保護測試和熱插拔測試四種關鍵測試方法,包括測試目的、方法、腳本範例及注意事項,以確保 NVMe SSD 的長期可靠運行。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News