Pipeline Parallelism Là Gì? Giải Thích Kỹ Thuật Song Song Đường Ống

Câu trả lời nhanh
Pipeline Parallelism là kỹ thuật chia model AI thành nhiều đoạn theo chiều dọc, mỗi đoạn chạy trên một GPU riêng. Dữ liệu đi qua từng GPU tuần tự giống dây chuyền sản xuất. Nó cho phép training model siêu lớn trên nhiều máy chủ, dù phải đối mặt với pipeline bubble - khoảng thời gian GPU nhàn rỗi.

Pipeline Parallelism Là Gì?

Pipeline Parallelism: chia model AI thành nhiều đoạn chạy trên các GPU riêng biệt

Pipeline Parallelism (song song đường ống) là kỹ thuật chia model AI thành nhiều đoạn theo chiều dọc, mỗi đoạn chạy trên một GPU riêng biệt. Dữ liệu đi qua từng GPU theo thứ tự, giống như một dây chuyền sản xuất trong nhà máy.

Khác với data parallelism nhân bản toàn bộ model lên mỗi GPU, pipeline parallelism cắt model thành các phần tuần tự. GPU thứ nhất xử lý lớp đầu tiên, rồi chuyển kết quả cho GPU thứ hai xử lý lớp tiếp theo, và cứ thế cho đến lớp cuối cùng.

Tại Sao Cần Pipeline Parallelism?

Các model AI hiện đại có hàng chục đến hàng trăm tỷ parameter. Một GPU H100 chỉ có 80GB VRAM, không đủ chứa toàn bộ model. Bạn bắt buộc phải chia.

Nhưng chia kiểu nào? Đó mới là vấn đề. Có ba hướng chính:

  • Data Parallelism: Mỗi GPU chứa nguyên model, chia data
  • Tensor Parallelism: Chia từng phép toán ma trận trong một lớp
  • Pipeline Parallelism: Chia model thành các nhóm lớp, mỗi nhóm trên một GPU

Pipeline parallelism là cách tự nhiên nhất để chia model khi nó quá lớn cho một GPU, và là lựa chọn số một khi cần mở rộng ra nhiều máy chủ (multi-node).

Pipeline Parallelism Hoạt Động Thế Nào?

Giả sử bạn có model 80 lớp Transformer và 4 GPU. Pipeline parallelism chia thành 4 stage, mỗi stage chứa 20 lớp:

  • Stage 0 (GPU 0): Lớp 1-20
  • Stage 1 (GPU 1): Lớp 21-40
  • Stage 2 (GPU 2): Lớp 41-60
  • Stage 3 (GPU 3): Lớp 61-80

Khi một batch dữ liệu đi vào, GPU 0 xử lý 20 lớp đầu, gửi kết quả cho GPU 1, GPU 1 xử lý tiếp rồi gửi cho GPU 2, v.v. Đúng như tên gọi — nó là một đường ống (pipeline).

Bubble — Vấn Đề Lớn Nhất

Đây là điểm yếu chí mạng của pipeline parallelism. Khi GPU 0 đang xử lý batch đầu tiên, ba GPU còn về… không làm gì cả. Khi GPU 1 nhận data và xử lý, GPU 0 cũng nhàn rỗi.

Khoảng thời gian GPU “chờ việc” này gọi là pipeline bubble. Nó lãng phí tài nguyên tính toán, và tỷ lệ lãng phí tăng khi số stage càng nhiều.

Công thức tính bubble ratio khá đơn giản: nếu bạn có p stage và d micro-batches, tỷ lệ lãng phí là (p-1) / d. Tức là càng nhiều micro-batches chạy qua pipeline, bubble càng ít ảnh hưởng.

Micro-Batching — Giải Pháp Giảm Bubble

Để giảm bọt khí (bubble), người ta chia một batch lớn thành nhiều micro-batch nhỏ hơn và bơm liên tục vào pipeline. Giống như nhà máy không đợi một sản phẩm hoàn thành mới bắt đầu sản phẩm thứ hai.

Ví dụ: batch 1024 sample chia thành 8 micro-batch, mỗi micro-batch 128 sample. Khi GPU 0 xong micro-batch 1 và gửi cho GPU 1, GPU 0 bắt đầu ngay micro-batch 2. Cứ thế, tất cả GPU đều có việc làm.

Hai chiến lược micro-batching phổ biến nhất:

GPipe

GPipe bơm tất cả micro-batch theo chiều thuận (forward pass) trước, rồi mới làm backward pass ngược lại. Đơn giản, nhưng cần nhiều memory hơn vì phải lưu activation của tất cả micro-batch.

1F1B (One Forward, One Backward)

Chiến lược 1F1B luân phiên forward và backward. Ngay khi micro-batch đầu tiên xong forward, nó bắt đầu backward. Giảm memory đáng kể vì activation được giải phóng sớm hơn. Đây là chiến lược được dùng phổ biến nhất hiện nay, bao gồm trong Megatron-LM.

Ví Dụ Thực Tế

Giả sử bạn training Llama 3 70B trên 8 GPU chia làm 2 node, mỗi node 4 GPU. Bạn có thể cấu hình pipeline parallelism size = 2 (mỗi node một stage), tensor parallelism size = 4 (4 GPU trong node chia tensor).

Đây chính là cách các lab lớn training model hàng trăm tỷ parameter. Kết hợp pipeline + tensor + data parallelism tạo thành 3D Parallelism, giúp khai thác tối đa phần cứng mà không bị bottleneck.

Ưu Điểm Của Pipeline Parallelism

Chia sẻ memory hiệu quả: Mỗi GPU chỉ chứa một phần model, giảm yêu cầu VRAM xuống mức khả thi.

Scale được multi-node: Khác với tensor parallelism cần bandwidth cực cao (thường chỉ trong cùng node), pipeline parallelism chỉ cần truyền activation giữa các stage, ít dữ liệu hơn nhiều. Phù hợp mở rộng qua nhiều máy chủ.

Dễ implement hơn tensor parallelism: Không cần can thiệp vào phép toán ma trận bên trong lớp. Chỉ cần biết điểm cắt giữa các lớp.

Nhược Điểm Cần Lưu Ý

Pipeline bubble: Như đã nói ở trên, GPU bị nhàn rỗi ở đầu và cuối pipeline. Tỷ lệ lãng phí (p-1)/d có thể lớn nếu ít micro-batch.

Latency inference cao: Với inference, pipeline parallelism tăng độ trễ vì request phải đi qua nhiều GPU tuần tự. Không phù hợp cho real-time serving khi cần phản hồi nhanh.

Cân bằng tải khó: Nếu một stage nặng hơn các stage khác, toàn bộ pipeline bị bottleneck tại stage đó. Cần chia lớp sao cho mỗi stage có khối lượng tính toán xấp xỉ nhau.

Pipeline Parallelism vs Tensor Parallelism vs Data Parallelism

Nhiều người hay nhầm ba khái niệm này. Mình tóm tắt nhanh:

Data Parallelism: Mỗi GPU có nguyên model, chia data. Đơn giản nhất, nhưng model phải vừa trên 1 GPU.

Tensor Parallelism: Chia từng lớp theo chiều ngang, can thiệp vào phép nhân ma trận. Cần NVLink cực nhanh, thường chỉ trong cùng node.

Pipeline Parallelism: Chia model theo chiều dọc thành các stage tuần tự. Tự nhiên nhất, scale được multi-node, nhưng phải xử lý bubble.

Thực tế, ba kỹ thuật này kết hợp với nhau. Data parallelism ở ngoài cùng, pipeline parallelism chia theo node, tensor parallelism chia trong node. Đó là công thức tiêu chuẩn cho training model siêu lớn.

Ai Đang Dùng Pipeline Parallelism?

Megatron-LM (NVIDIA): Framework training phân tán hàng đầu, tích hợp sẵn pipeline parallelism với 1F1B scheduling.

DeepSpeed (Microsoft): Thư viện tối ưu training phổ biến, hỗ trợ pipeline parallelism qua PipeDream-style implementation.

PyTorch FSDP: Fully Sharded Data Parallel của PyTorch cũng kết hợp pipeline khi cần mở rộng multi-node.

Các lab AI lớn: OpenAI, Google, Anthropic, Meta — tất cả đều dùng pipeline parallelism khi training model sản xuất. Không có cách nào khác để train model 100+ tỷ parameter.

Khi Nào Bạn Nên Dùng?

Nếu model của bạn vừa trên một GPU (dưới ~7 tỷ parameter với GPU 24GB), data parallelism là đủ. Đừng phức tạp hóa.

Nếu model lớn hơn (13B, 30B, 70B) và bạn có nhiều GPU trong cùng máy, tensor parallelism là lựa chọn tốt nhất vì NVLink cho phép giao tiếp nhanh.

Nếu bạn cần mở rộng ra nhiều máy chủ (multi-node), pipeline parallelism trở nên bắt buộc. Băng thông mạng giữa các node không đủ nhanh cho tensor parallelism, nhưng lại hoàn toàn đủ cho pipeline.

Và nếu bạn training model siêu lớn từ đầu, kết hợp cả ba — đó là 3D parallelism, tiêu chuẩn ngành hiện nay.

Kết Luận

Pipeline Parallelism là một trong ba trụ cột của distributed training, bên cạnh data parallelism và tensor parallelism. Nó cho phép chia model lớn qua nhiều GPU và nhiều máy chủ một cách tự nhiên, dù phải đối mặt với pipeline bubble.

Bạn không cần tự implement pipeline parallelism từ đầu. Framework như Megatron-LM và DeepSpeed đã lo phần khó. Nhưng hiểu cách nó hoạt động sẽ giúp bạn cấu hình distributed training thông minh hơn, chọn số stage phù hợp, và balance tải giữa các GPU hiệu quả hơn.

ThienLv

Mình là Thien, người tạo ra blog này. Ban ngày làm marketing, ban đêm cày tiền online và chơi với AI. Blog này là nơi mình ghi lại những gì mình thử qua — tool nào xịn, chiến thuật nào chạy được, cái gì thất bại. Mình không giỏi nhất, nhưng mình thích chia sẻ thật. Chill với một ly cafe đá là lý tưởng nhất.

Xem tất cả bài viết →

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *