使用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數字沙龍
17會員
422內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
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
很多新手工程師常問我: 「NVMe SSD 的測試流程是不是就是跑幾組 FIO?」我的答案是——不只如此,而且差得遠。 真正完整的 NVMe SSD 測試流程,涵蓋了從命令功能正確性、相容性平台測試、效能穩定性,到壽命與可靠度驗證,每一個測項都是在為產品做風險排雷。 這篇文章,我會用一個系統化的
Thumbnail
很多新手工程師常問我: 「NVMe SSD 的測試流程是不是就是跑幾組 FIO?」我的答案是——不只如此,而且差得遠。 真正完整的 NVMe SSD 測試流程,涵蓋了從命令功能正確性、相容性平台測試、效能穩定性,到壽命與可靠度驗證,每一個測項都是在為產品做風險排雷。 這篇文章,我會用一個系統化的
Thumbnail
本篇文章提供關於NVMe SSD驗證測試的完整指南,涵蓋硬體平臺選擇、軟體工具配置、監控系統建立、以及性能瓶頸排查等實務面向。透過詳盡的步驟、案例分享及實用技巧,協助讀者深入理解NVMe SSD測試的複雜性和重要性,並提升測試效率與可靠性。
Thumbnail
本篇文章提供關於NVMe SSD驗證測試的完整指南,涵蓋硬體平臺選擇、軟體工具配置、監控系統建立、以及性能瓶頸排查等實務面向。透過詳盡的步驟、案例分享及實用技巧,協助讀者深入理解NVMe SSD測試的複雜性和重要性,並提升測試效率與可靠性。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文探討AI伺服器儲存架構與傳統伺服器儲存架構的差異,分析AI工作負載對儲存系統的特殊需求,例如巨大數據量、特殊I/O模式、高併發、頻繁數據更新以及對SSD的極致要求,並深入闡述這些需求如何推動儲存技術和架構的演進。
Thumbnail
本文探討AI伺服器儲存架構與傳統伺服器儲存架構的差異,分析AI工作負載對儲存系統的特殊需求,例如巨大數據量、特殊I/O模式、高併發、頻繁數據更新以及對SSD的極致要求,並深入闡述這些需求如何推動儲存技術和架構的演進。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本文探討 NVMe SSD 穩定性驗證的重要性,並詳細介紹長時間壓力測試、數據完整性測試、掉電保護測試和熱插拔測試四種關鍵測試方法,包括測試目的、方法、腳本範例及注意事項,以確保 NVMe SSD 的長期可靠運行。
Thumbnail
本文探討 NVMe SSD 穩定性驗證的重要性,並詳細介紹長時間壓力測試、數據完整性測試、掉電保護測試和熱插拔測試四種關鍵測試方法,包括測試目的、方法、腳本範例及注意事項,以確保 NVMe SSD 的長期可靠運行。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News