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 vùng 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à các trạng thái trình 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ộ gia 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 chảy từ thiết bị này sang thiết bị tiếp theo. Bằng cách liên kết 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 lỗi out-of-memory errors giới hạn phần cứng.
Pipeline Parallelism hoạt động như thế nào#
Một cách tiếp cận ngây thơ khi phân chia các lớp trên các thiết bị dẫn đến sự kém hiệu quả nghiêm trọng được gọi là "pipeline bubbles." Do các lớp xử lý tuần tự, GPU 1 hoàn toàn ở trạng thái rảnh 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 trình lập lịch pipeline hiện đại chia batch size toàn cục thành các "micro-batches" nhỏ hơn.
Thay vì chờ toàn bộ một batch hoàn thành, GPU 0 ngay lập tức 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 1F1B (One Forward, One Backward) scheduling strategy. Phương pháp này luân phiên tính toán các forward pass và backward pass 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 bubbles 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 trình 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.
Phâ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 phân chia theo chiều sâu của pipeline parallelism, tensor parallelism phân mảnh các hoạt động 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 thông lượng.
- Data Parallelism: Data parallelism nhân bản toàn bộ mô hình trên mọi GPU và phân phối dữ liệu huấn luyện cho 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 nguyên bản phù hợp với 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 được ưu tiên để tăng tốc độ huấn luyện.
Cá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:
- Training Foundation Models: Việc phát triển các Large Language Models (LLMs) khổng lồ và 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.
- High-Resolution Medical Diagnostics: Trong AI in healthcare và mô hình hóa khoa học, các bản quét thể tích 3D thường tạo ra các kích hoạt quá lớn đối với một bộ gia tốc duy nhất. Việc tạo đường ống cho các lớp mạng trên các node 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 giảm độ phân giải hình ảnh.
Ví dụ về mã: Khái niệm phân vùng lớp#
Trước đây, 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ể đến 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 mạng được phân chia giữa các thiết bị trong PyTorch, đặt nền tảng cho các hoạt động pipeline parallel:
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 ra 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 nhìn chung đơn giản hơn. Để model deployment được hợp lý hóa và tự động hóa việc sử dụng nhiều GPU, các nhà phát triển tin tưởng 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 loại bỏ 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.






