Ba kiểu song song hoá cơ bản, khác nhau ở chỗ cắt cái gì:
- Data Parallel (DP) — cắt dữ liệu. Mỗi GPU giữ một bản sao đầy đủ của model, xử lý một phần batch, rồi all-reduce gradient để đồng bộ. Đơn giản nhất, nhưng mỗi GPU vẫn phải chứa trọn model + gradient + optimizer state nên không giải quyết được model quá lớn.
- Tensor Parallel (TP) — cắt bên trong một layer. Ma trận trọng số chia theo hàng/cột: với
Y = X·W, GPU1 tínhX·W1, GPU2 tínhX·W2rồi ghép lại. Phải all-reduce sau mỗi layer nên rất tốn băng thông — chỉ hiệu quả trong cùng một node có NVLink, thường tối đa 8 GPU. - Pipeline Parallel (PP) — cắt giữa các layer. Mỗi GPU giữ một chặng (GPU1 layer 1–10, GPU2 layer 11–20...). Chỉ chuyển activation giữa hai chặng nên giao tiếp nhẹ, scale được qua nhiều node. Đổi lại có "bong bóng" — GPU ngồi chờ dữ liệu tới; khắc phục bằng chia micro-batch và lịch 1F1B.
Quy tắc chọn: TP trong node vì cần băng thông, PP giữa các node vì tiết kiệm băng thông, DP để nhân throughput.
FSDP / ZeRO đã thay thế DP thuần cho training lớn: thay vì mỗi GPU giữ một bản sao đầy đủ, nó chia nhỏ cả trọng số, gradient và optimizer state giữa các GPU và chỉ gom lại đúng lúc cần tính. Bộ nhớ mỗi GPU giảm mạnh mà vẫn giữ được sự đơn giản của DP. ZeRO chia ba mức: chia optimizer state, thêm gradient, rồi thêm cả trọng số (mức 3, tương đương FSDP).
Hai kiểu chuyên biệt: Expert Parallel rải các expert của model MoE ra nhiều GPU, và Sequence Parallel cắt chuỗi khi train context rất dài.
Khi inference thì đơn giản hơn training nhiều:
- Model vừa một GPU → không song song hoá, chỉ nhân thêm replica.
- Model vượt một GPU nhưng vừa một node → Tensor Parallel (vLLM: --tensor-parallel-size 8).
- Model vượt một node → PP kết hợp TP.
- Phục vụ nhiều model nhỏ → mỗi model một GPU rồi scale replica, đừng song song hoá.
Công cụ: training dùng PyTorch FSDP, DeepSpeed, Megatron-LM; inference dùng vLLM, TensorRT-LLM, SGLang.