1. 16:19 14/10/2026
**Giới thiệu**
Khi làm việc với GPU tiêu dùng (8‑12 GB VRAM) hoặc môi trường cloud có hạn ngạch bộ nhớ, việc huấn luyện các mô hình lớn (BERT‑base, ResNet‑101, các biến thể Transformer) thường gặp lỗi Out‑of‑Memory (OOM). Ba kỹ thuật cốt lõi – Mixed Precision, Gradient Accumulation và Activation Checkpointing – cho phép giảm tiêu thụ bộ nhớ mà hầu như không làm giảm độ chính xác.
**1. Mixed Precision (FP16/BF16)**
- Sử dụng kiểu dữ liệu nửa độ chính xác cho forward/backward pass, giữ master weights ở FP32 để cập nhật ổn định.
- Trên PyTorch: `torch.cuda.amp.autocast()` kết hợp `GradScaler`.
- Trên TensorFlow/Keras: `tf.keras.mixed_precision.set_global_policy('mixed_float16')`.
- Lợi ích: giảm ~50 % VRAM cho activation và gradient, tăng throughput nhờ Tensor Cores.
**2. Gradient Accumulation**
- Chia batch lớn thành nhiều micro‑batch, tích lũy gradient trước khi `optimizer.step()`.
- Ví dụ: batch_size=32, GPU chỉ chịu được 8 → `accumulation_steps = 4`.
- Code mẫu (PyTorch):
```python
for i, (x, y) in enumerate(loader):
with autocast():
loss = model(x, y) / accumulation_steps
scaler.scale(loss).backward()
if (i + 1) % accumulation_steps == 0:
scaler.step(optimizer)
scaler.update()
optimizer.zero_grad()
```
- Không thay đổi học tập, chỉ mô phỏng batch lớn.
**3. Activation Checkpointing (Gradient Checkpointing)**
- Lưu lại một phần activation, tính lại phần còn lại trong backward pass.
- PyTorch: `torch.utils.checkpoint.checkpoint(module, *inputs)`.
- Hugging Face Transformers: `model.gradient_checkpointing_enable()`.
- Giảm activation memory tuyến tính với độ sâu mạng, chi phí compute tăng ~20‑30 %.
**Quy trình thực hành kết hợp**
1. Bật Mixed Precision trước – quan sát VRAM giảm.
2. Nếu vẫn OOM, tăng `accumulation_steps` cho đến khi batch hiệu dụng đạt yêu cầu.
3. Nếu model quá sâu (Transformer > 12 layers), bật Activation Checkpointing.
4. Theo dõi `torch.cuda.max_memory_allocated()` và thời gian epoch để cân bằng tốc độ/vs bộ nhớ.
**Mẹo và lưu ý**
- Luôn kiểm tra `loss scale` của GradScaler; nếu quá nhỏ → underflow, quá lớn → overflow.
- Với BF16 (Ampere/Hopper) không cần GradScaler, ổn định hơn FP16.
- Gradient Accumulation làm tăng thời gian mỗi step; cân nhắc learning rate scaling (linear scaling rule).
- Activation Checkpointing không tương thích với một số custom autograd Function – test kỹ trước khi production.
- Lưu checkpoint model ở FP32 để dễ dàng fine‑tune sau này.
**Kết luận**
Kết hợp ba kỹ thuật trên cho phép huấn luyện các mô hình SOTA trên GPU tiêu dùng mà không cần đầu phần cứng đắt tiền. Hãy bắt đầu từ Mixed Precision, sau đó điều chỉnh Gradient Accumulation và Activation Checkpointing theo thứ tự ưu tiên bộ nhớ > tốc độ. Việc ghi log VRAM và throughput mỗi epoch sẽ giúp bạn tìm ra cấu hình tối ưu cho từng dự án cụ thể.