Huấn luyện phân tán
Chương 6: Tensor parallelism (TP) và sequence parallelism (SP)
Nắm phương án tensor parallelism của Megatron-LM (Column/Row Parallel Linear), suy ra vị trí chèn giao tiếp, và cách sequence parallelism tối ưu VRAM activation
Tensor parallelism Sequence parallelism Megatron-LM TP SP NVLink
Giới thiệu chương
Khi parameters hoặc activations của chỉ một layer Transformer đã vượt VRAM một GPU, cần cắt phép nhân ma trận trong layer ra nhiều GPU—đó là tensor parallelism (TP, song song tensor). Sequence parallelism (SP, song song chuỗi) tiếp tục xử lý phần activation dư thừa ở vùng mà TP không phủ.
Cấu trúc chương
1. Vì sao cần tensor parallelism
- Giới hạn của data parallelism: DP/FSDP chỉ cắt bản sao dư thừa của trạng thái train; nếu bản thân forward của một layer đã vượt compute/VRAM một GPU (ví dụ activation trung gian của FFN), DP không giúp được
- Vị trí của TP: tách một phép nhân ra nhiều GPU tính song song; mỗi GPU chỉ cần giữ weights và phần activation tương ứng
- Ràng buộc băng thông: TP cần giao tiếp ở mọi layer, rất nhạy latency → thường giới hạn trong một máy nối NVLink (≤ 8 GPU)
2. Column Parallel Linear (cắt theo cột)
- Cách cắt: weight cắt theo cột thành ; mỗi GPU giữ
- Quá trình tính: (mỗi GPU nhân input đầy đủ với shard cột của mình)
- Output: mỗi GPU nhận một shard cột khác nhau của
- Giao tiếp: input cần Broadcast/sao chép tới từng GPU (hoặc mỗi GPU vốn đã có input đầy đủ)
- Vị trí dùng: linear layer đầu của FFN, projection QKV của Attention
3. Row Parallel Linear (cắt theo hàng)
- Cách cắt: weight cắt theo hàng; mỗi GPU giữ (shard theo chiều hàng)
- Yêu cầu input: input cũng phải cắt theo cột thành (khớp với output của Column Parallel)
- Quá trình tính: (mỗi GPU tính kết quả một phần)
- Giao tiếp: các trên từng GPU được AllReduce (cộng) để ra output đầy đủ
- Vị trí dùng: linear layer thứ hai của FFN, output projection của Attention
4. Phương án cắt TP cho Transformer Block
- Layer Attention: QKV theo Column Parallel (multi-head vốn cắt được tự nhiên; mỗi GPU phụ trách một phần Head); output projection theo Row Parallel
- Layer FFN: linear đầu Column Parallel (cắt chiều trung gian); linear thứ hai Row Parallel (ghép output)
- Điểm chèn giao tiếp: mỗi Transformer Block cần 2 AllReduce trong forward (output Attention + output FFN)
- Backward: AllReduce ở forward tương ứng AllReduce ở backward; lượng giao tiếp đối xứng
- Lượng giao tiếp mỗi layer: forward (2 AllReduce, mỗi lần truyền dữ liệu)
5. Sequence parallelism (SP)
- Vấn đề: LayerNorm và Dropout không tham gia cắt TP; input/output của chúng trên mỗi GPU là đầy đủ → activation dư thừa
- Cách giải: ở vùng non-TP (LayerNorm, Dropout), cắt activation theo chiều sequence
- Thay đổi giao tiếp: AllReduce ở vùng TP trở thành ReduceScatter (khi vào vùng non-TP) + AllGather (khi quay lại vùng TP)
- Lợi ích: VRAM activation vùng non-TP từ đầy đủ xuống ; tổng VRAM activation gần scale tuyến tính
- Thay đổi lượng giao tiếp: tổng lượng giao tiếp không đổi (AllReduce = ReduceScatter + AllGather), nhưng VRAM activation giảm mạnh
6. Cắt TP dưới GQA/MQA
- Vấn đề: số KV Head của GQA có thể < bậc TP (ví dụ KV Head = 4, TP = 8)
- Chiến lược xử lý:
- nhân bản KV Head (mỗi TP rank giữ một bản đầy đủ)
- một số rank chia sẻ KV Head (chiến lược nhóm)
- Phân tích ảnh hưởng: nhân bản KV Head làm việc cắt parameters của TP không còn đều, nhưng tính toán vẫn song song được
7. Bài thực hành
- Vẽ sơ đồ cắt một Transformer Block dưới TP=4 (ghi rõ mỗi bước giao tiếp)
- Đọc source
ColumnParallelLinearvàRowParallelLinearcủa Megatron-LM
Mục tiêu học
- Suy ra được shape input/output và vị trí giao tiếp của Column Parallel và Row Parallel
- Vẽ được sơ đồ cắt đầy đủ của Transformer Block (Attention + FFN) dưới TP
- Giải thích được cách sequence parallelism tách AllReduce thành ReduceScatter + AllGather để tiết kiệm VRAM activation
- Phân tích được chiến lược xử lý khi KV Head không đủ lúc cắt TP trên model GQA