Nói thẳng, khi thực hiện pipeline Data Science gồm Jupyter Lab, pandas và PyTorch trên cùng một máy, rào cản lớn nhất không phải là tốc độ CPU mà là trần bộ nhớ RAM. Khi phân tích các tác vụ như trong bài gốc về xử lý dữ liệu và mã Python, nhiều người thường đánh giá thấp lượng RAM thực tế mà các thư viện này tiêu thụ.
pandas load CSV ngốn RAM gấp 4 lần dung lượng file
Một tập dữ liệu CSV dung lượng 2 GB trên đĩa cứng không có nghĩa là bạn chỉ cần 2 GB RAM để làm việc. Khi gọi pd.read_csv(), pandas sẽ chuyển đổi các chuỗi ký tự thành đối tượng trong bộ nhớ, tạo bản sao trung gian và phân bổ lại bộ đệm. Thực tế thì lượng RAM tiêu thụ thường vọt lên gấp 3 đến 5 lần dung lượng file gốc, tức là chạm mốc 8 GB đến 10 GB RAM chỉ riêng cho bảng dữ liệu.
Nếu không tối ưu kiểu dữ liệu (category thay cho object, int16 thay cho int64), hệ thống sẽ cạn RAM trước khi bạn kịp thực hiện câu lệnh df.groupby().
import pandas as pd
import psutil
import os
def check_ram():
process = psutil.Process(os.getpid())
print(f"RAM in use: {process.memory_info().rss / 1024**2:.2f} MB")
# Load file CSV 2GB
check_ram()
df = pd.read_csv("large_dataset.csv", engine="c")
check_ram() # RAM tăng từ 150MB lên ~8.2GB
PyTorch batch size và hiện tượng tràn RAM sang Swap
Khi đưa dataframe này sang PyTorch DataLoader để huấn luyện mô hình trên iGPU hoặc CPU, bộ nhớ tiếp tục bị nhân đôi do dữ liệu chuyển đổi sang torch.Tensor.
Nếu đặt batch_size=128 hoặc 256 mà không xả bộ nhớ rác (gc.collect()), tổng dung lượng bộ nhớ yêu cầu sẽ vượt quá RAM vật lý. Lúc này, hệ điều hành buộc phải kích hoạt bộ nhớ ảo (Swap).
Khi Swap hoạt động:
- Tốc độ đọc ghi dữ liệu giảm từ hàng chục GB/s trên RAM xuống còn vài trăm MB/s trên SSD.
- Giao diện Jupyter Notebook bị đơ do kernel ngừng phản hồi.
- Tiến trình tự động bị hủy với lỗi
Killed(OOM Killer trên Linux).
Ví dụ với file 3 GB, ngưỡng OOM xuất hiện ngay khi bộ nhớ chạm 95% dung lượng RAM hệ thống.
Lời khuyên thực tế là luôn kiểm tra dung lượng từng cột bằng df.info(memory_usage='deep'), chia nhỏ file thành các chunk với chunksize khi đọc pandas, và duy trì batch_size nhỏ từ 32 đến 64 khi huấn luyện.
Top comments (0)