Nhiều người lầm tưởng một file CSV 2GB có thể nạp gọn gàng vào máy có 8GB hay 16GB RAM. Thực tế, pandas nạp dữ liệu dạng bảng với cấu trúc object thường ngốn dung lượng gấp 3 đến 5 lần dung lượng file thô trên đĩa. Khi bạn mở cùng lúc Jupyter Notebook, giữ nguyên dataframe lớn trong bộ nhớ rồi tiếp tục gọi PyTorch để huấn luyện mô hình qua CPU hoặc iGPU chia sẻ RAM hệ thống, ngưỡng trần bộ nhớ sẽ bị xuyên thủng rất nhanh.
Ảo tưởng về dung lượng dataframe và cái giá của bộ nhớ swap
Khi RAM cạn, hệ điều hành tự động kích hoạt bộ nhớ ảo (swap/pagefile) trên ổ cứng để chống sập tiến trình. Việc đọc ghi liên tục giữa RAM và SSD khiến độ trễ tăng vọt, CPU rơi vào trạng thái nghẽn I/O wait và nóng cục bộ. Quạt tản nhiệt lập tức gào rú hết công suất vì hệ thống tưởng máy đang chịu tải tính toán nặng, dù thực chất toàn bộ phần cứng đang bị kẹt cứng do nghẽn cổ chai bộ nhớ. Phân tích nguyên nhân tản nhiệt từ ReviewLaptop cho thấy tải nặng kéo dài kèm nhiệt tăng vọt chính là lúc quạt bị đẩy lên vòng tua tối đa nhằm tránh tụt xung.
Vấn đề này bên Hưng Phát Laptop cũng có một bài mổ xẻ riêng, ai cần chi tiết hơn thì đọc thêm ở đó.
import pandas as pd
import torch
# Tránh đọc toàn bộ file vào RAM một lần
def process_in_chunks(file_path, chunk_size=50000):
for chunk in pd.read_csv(file_path, chunksize=chunk_size):
# Giảm kiểu dữ liệu float64 về float32 để tiết kiệm 50% RAM
float_cols = chunk.select_dtypes(include=['float64']).columns
chunk[float_cols] = chunk[float_cols].astype('float32')
# Chuyển đổi tensor theo từng batch nhỏ cho PyTorch
tensor_data = torch.from_numpy(chunk.values)
yield tensor_data
Tối ưu kiểu dữ liệu và batch size thay vì chờ crash
Nếu giữ mặc định float64 cho mọi cột số thực, bạn đang lãng phí phân nửa bộ nhớ vô ích. Ép kiểu về float32 hoặc int16/int8 ngay khi đọc giúp dung lượng bảng dữ liệu giảm rõ rệt. Với PyTorch chạy trên iGPU hoặc CPU, đừng cố đẩy batch size lên cao; hãy chia nhỏ batch kết hợp cơ chế DataLoader đọc luân phiên từ đĩa thay vì tải toàn bộ dataset vào bộ nhớ đệm Jupyter.
Trước khi nghĩ đến việc nâng cấp phần cứng hay thắc mắc vì sao máy rú quạt bất thường khi chạy code, hãy kiểm tra lại mức chiếm dụng RAM của từng tiến trình kernel và chủ động giải phóng biến rác bằng gc.collect().
Top comments (0)