Pipeline Parallelism
Khám phá cách pipeline parallelism phân chia các deep learning model trên nhiều GPU. Tìm hiểu cách ngăn ngừa lỗi out-of-memory và tối ưu hóa distributed training.
Pipeline Parallelism là một kỹ thuật distributed training nâng cao được thiết kế để phân chia một neural network (NN) lớn trên nhiều thiết bị tính toán, chẳng hạn như GPUs, bằng cách tách mô hình theo chiều sâu. Khi model weights và trạng thái của bộ tối ưu hóa của một kiến trúc hiện đại vượt quá giới hạn bộ nhớ của một bộ tăng tốc đơn lẻ, các kỹ sư sẽ chia các lớp tuần tự của mạng thành các "giai đoạn". Ví dụ: 10 lớp đầu tiên có thể nằm trên GPU 0, trong khi 10 lớp tiếp theo nằm trên GPU 1. Trong quá trình forward pass, dữ liệu truyền từ thiết bị này sang thiết bị tiếp theo. Bằng cách kết nối các thiết bị này lại với nhau, các nhà nghiên cứu có thể huấn luyện các thuật toán deep learning (DL) khổng lồ mà không gặp phải các out-of-memory errors giới hạn bởi phần cứng.
Link to this sectionPipeline Parallelism hoạt động như thế nào#
Một cách triển khai đơn giản bằng việc chia các lớp trên các thiết bị dẫn đến những điểm kém hiệu quả nghiêm trọng được gọi là "pipeline bubbles". Vì các lớp xử lý tuần tự, GPU 1 hoàn toàn nhàn rỗi trong khi GPU 0 xử lý các lớp ban đầu. Để tối đa hóa việc sử dụng phần cứng, các bộ lập lịch pipeline hiện đại chia batch size toàn cục thành các "micro-batch" nhỏ hơn.
Thay vì đợi toàn bộ batch kết thúc, GPU 0 bắt đầu xử lý micro-batch thứ hai ngay khi nó chuyển micro-batch đầu tiên cho GPU 1. Các công cụ như Microsoft DeepSpeed và PyTorch Distributed Pipelining API thường sử dụng chiến lược lập lịch 1F1B (One Forward, One Backward). Phương pháp này luân phiên tính toán các lượt forward và backward cho các micro-batch khác nhau một cách đồng thời, giúp giảm thiểu đáng kể các pipeline bubble và mức tiêu thụ bộ nhớ. Các tiến bộ gần đây trong năm 2024 và 2025 thậm chí còn giới thiệu Zero Bubble Pipeline Parallelism, một chiến lược dự đoán trọng số nhận biết bộ tối ưu hóa giúp loại bỏ gần như hoàn toàn thời gian nhàn rỗi trên các cụm tính toán.
Link to this sectionPhân biệt các kỹ thuật song song liên quan#
Pipeline parallelism hoạt động trong một hệ sinh thái rộng lớn hơn các chiến lược tính toán phân tán. Hiểu được sự khác biệt là rất quan trọng để mở rộng quy mô các mô hình AI một cách hiệu quả:
- Model Parallelism: Đây là thuật ngữ bao quát cho việc chia một mô hình trên nhiều thiết bị. Pipeline parallelism là một dạng model parallelism rất đặc thù nhằm phân chia kiến trúc một cách tuần tự theo chiều sâu.
- Tensor Parallelism: Không giống như việc chia theo chiều sâu của pipeline parallelism, tensor parallelism chia nhỏ các phép toán ma trận riêng lẻ theo chiều ngang trên các GPU. Hai kỹ thuật này thường được kết hợp để tối đa hóa lưu lượng xử lý.
- Data Parallelism: Data parallelism sao chép toàn bộ mô hình trên mọi GPU và phân phối dữ liệu huấn luyện giữa chúng. Đối với các kiến trúc object detection và image segmentation nhỏ gọn, được tối ưu hóa cao như mô hình Ultralytics YOLO26, vốn có thể chứa gọn trong VRAM của một thiết bị duy nhất, data parallelism thông qua DistributedDataParallel (DDP) của PyTorch là phương pháp ưu tiên để tăng tốc huấn luyện.
Link to this sectionCác ứng dụng thực tiễn trong AI và ML#
Mở rộng cơ sở hạ tầng phức tạp là điều cần thiết để xây dựng các hệ thống AI hiện đại, tiên tiến nhất:
- Huấn luyện Foundation Models: Việc phát triển các Large Language Models (LLMs) khổng lồ và các foundation models như Llama 3 của Meta đòi hỏi phải kết hợp tensor, data, và pipeline parallelism. Các framework như NVIDIA Megatron-LM tận dụng các chiến lược này để huấn luyện các kiến trúc Mixture-of-Experts (MoE) khổng lồ trên hàng nghìn GPU trên các nền tảng đám mây như AWS SageMaker.
- Chẩn đoán y tế độ phân giải cao: Trong lĩnh vực AI in healthcare và mô hình hóa khoa học, các bản quét 3D thường tạo ra các kích hoạt (activations) quá lớn cho một bộ tăng tốc. Việc đưa các lớp mạng vào pipeline trên các nút cho phép các bệnh viện nghiên cứu huấn luyện các mạng sâu trên các tập dữ liệu MRI khổng lồ mà không làm ảnh hưởng đến độ phân giải hình ảnh.
Link to this sectionVí dụ về mã: Khái niệm phân vùng lớp#
Trong lịch sử, việc phân phối các lớp trên các thiết bị đòi hỏi mã tùy chỉnh phức tạp. Ngày nay, logic cơ bản ánh xạ các lớp cụ thể tới các định danh thiết bị khác nhau. Dưới đây là biểu diễn khái niệm về cách các giai đoạn của mạng được chia trên các thiết bị trong PyTorch, tạo nền tảng cho các hoạt động pipeline song song:
import torch.nn as nn
class SimplePipelineModel(nn.Module):
def __init__(self):
super().__init__()
# Stage 1 is assigned to the first GPU
self.stage1 = nn.Sequential(nn.Linear(1024, 1024), nn.ReLU()).to("cuda:0")
# Stage 2 is assigned to the second GPU
self.stage2 = nn.Sequential(nn.Linear(1024, 1024), nn.ReLU()).to("cuda:1")
def forward(self, x):
# The forward pass seamlessly crosses device boundaries
x_out = self.stage1(x.to("cuda:0"))
return self.stage2(x_out.to("cuda:1"))Mặc dù việc tạo các foundation models đòi hỏi sự điều phối phức tạp, việc triển khai các dự án computer vision (CV) nhanh chóng và có khả năng mở rộng thường đơn giản hơn. Để model deployment hợp lý hóa và sử dụng đa GPU tự động, các nhà phát triển tin tưởng vào Ultralytics Platform để tự động mở rộng quy mô khối lượng công việc. Tận dụng các model training tips mạnh mẽ, nền tảng này trừu tượng hóa việc quản lý cơ sở hạ tầng, cho phép các kỹ sư tập trung hoàn toàn vào việc xây dựng các giải pháp AI chính xác có khả năng real-time inference.






