Transformers documentation
Các phương pháp song song
Các phương pháp song song
Cấu hình đa GPU hiệu quả trong việc tăng tốc huấn luyện và nạp các mô hình lớn vào bộ nhớ mà nếu không sẽ không thể chứa vừa trên một GPU duy nhất. Nó dựa vào việc song song hóa khối lượng công việc trên các GPU. Có một số loại song song hóa như song song hóa dữ liệu, song song hóa tensor, song song hóa pipeline và song song hóa mô hình. Mỗi loại song song hóa chia nhỏ khối lượng công việc theo cách khác nhau, dù là dữ liệu hay mô hình.
Hướng dẫn này sẽ thảo luận về các phương pháp song song khác nhau, cách kết hợp chúng và việc lựa chọn chiến lược phù hợp cho cấu hình của bạn. Để biết thêm chi tiết về huấn luyện phân tán, hãy tham khảo tài liệu Accelerate.
Để có hướng dẫn toàn diện về việc mở rộng quy mô các mô hình ngôn ngữ lớn, hãy xem Ultrascale Playbook, nơi cung cấp các chiến lược và thực hành tốt nhất chi tiết cho việc huấn luyện ở quy mô lớn.
Chiến lược mở rộng
Sử dụng Model Memory Calculator để tính lượng bộ nhớ mà một model cần. Sau đó, tham khảo bảng bên dưới để chọn chiến lược phù hợp với cấu hình của bạn.
| cài đặt | kịch bản | chiến lược |
|---|---|---|
| một nút/nhiều GPU | chạy được trên một GPU | DistributedDataParallel hoặc ZeRO |
| không vừa trên một GPU đơn | PipelineParallel, ZeRO hoặc TensorParallel | |
| tầng mô hình lớn nhất không vừa | TensorParallel hoặc ZeRO | |
| đa nút/đa GPU | kết nối liên nút nhanh (NVLink hoặc NVSwitch) | ZeRO hoặc song song 3D (PipelineParallel, TensorParallel, DataParallel) |
| kết nối liên nút chậm | ZeRO hoặc song song 3D (PipelineParallel, TensorParallel, DataParallel) |
Song song dữ liệu
Song song dữ liệu phân phối đều dữ liệu trên nhiều GPU. Mỗi GPU giữ một bản sao của mô hình và xử lý đồng thời phần dữ liệu của nó. Cuối cùng, kết quả từ mỗi GPU được đồng bộ hóa và kết hợp lại.
Song song hóa dữ liệu giảm đáng kể thời gian huấn luyện bằng cách xử lý dữ liệu song song và có thể mở rộng theo số lượng GPU khả dụng. Tuy nhiên, việc đồng bộ hóa kết quả từ mỗi GPU có thể gây thêm chi phí.
Có hai loại song song hóa dữ liệu, DataParallel (DP) và DistributedDataParallel (DDP).
DataParallel
DataParallel hỗ trợ huấn luyện phân tán trên một máy duy nhất với nhiều GPU.
- GPU mặc định,
GPU 0, đọc một lô dữ liệu và gửi một mini batch của nó đến các GPU khác. - Một mô hình cập nhật được nhân bản từ
GPU 0sang các GPU khác. - Một bước
forwardđược thực hiện trên mỗi GPU và kết quả đầu ra của chúng được gửi đếnGPU 0để tính toán loss. - Loss được phân phối từ
GPU 0đến các GPU khác cho bướcbackward. - Các gradient từ mỗi GPU được gửi trở lại
GPU 0và được lấy trung bình.
DistributedDataParallel
DistributedDataParallel hỗ trợ huấn luyện phân tán trên nhiều máy với nhiều GPU.
- Quy trình chính sao chép mô hình từ GPU mặc định,
GPU 0, sang từng GPU. - Mỗi GPU xử lý trực tiếp một mini batch dữ liệu.
- Các gradient cục bộ được trung bình hóa trên tất cả các GPU trong quá trình
backward.
DDP được khuyến nghị vì nó giảm thiểu chi phí truyền thông giữa các GPU, khai thác hiệu quả từng GPU và có khả năng mở rộng sang nhiều hơn một máy.
Song song dữ liệu ZeRO
Zero Redundancy Optimizer là một kiểu data parallelism tiết kiệm bộ nhớ hơn. Nó cải thiện đáng kể hiệu quả sử dụng bộ nhớ bằng cách phân chia tham số, gradient và trạng thái optimizer giữa các tiến trình data parallel để giảm lượng bộ nhớ sử dụng. Có ba giai đoạn ZeRO:
- Giai đoạn 1 phân vùng các trạng thái của bộ tối ưu
- Giai đoạn 2 phân vùng trạng thái tối ưu hóa và gradient
- Stage 3 phân vùng bộ tối ưu hóa, gradient và tham số

Song song hóa mô hình
Song song hóa mô hình phân phối một mô hình trên nhiều GPU. Có một số cách để chia nhỏ một mô hình, nhưng phương pháp điển hình là phân phối các lớp của mô hình trên các GPU. Trong bước forward, GPU đầu tiên xử lý một lô dữ liệu và truyền nó sang nhóm các lớp tiếp theo trên GPU kế tiếp. Đối với bước backward, dữ liệu được gửi ngược lại từ lớp cuối cùng đến lớp đầu tiên.
Song song hóa mô hình là một chiến lược hữu ích để huấn luyện các mô hình quá lớn để vừa với bộ nhớ của một GPU đơn lẻ. Tuy nhiên, mức độ sử dụng GPU không cân bằng vì chỉ có một GPU hoạt động tại một thời điểm. Việc truyền kết quả giữa các GPU cũng làm tăng chi phí truyền thông và có thể trở thành nút thắt cổ chai.
Song song hóa pipeline
Pipeline parallelism về mặt khái niệm rất giống với model parallelism, nhưng hiệu quả hơn vì nó giảm thời gian GPU nhàn rỗi. Thay vì chờ mỗi GPU xử lý xong một batch dữ liệu, pipeline parallelism tạo ra các micro-batches dữ liệu. Ngay khi một micro-batch hoàn tất, nó được chuyển sang GPU tiếp theo. Nhờ đó, mỗi GPU có thể xử lý đồng thời một phần dữ liệu mà không cần chờ GPU khác xử lý xong hoàn toàn một mini batch dữ liệu.
Pipeline parallelism chia sẻ những lợi thế tương tự như model parallelism, nhưng nó tối ưu hóa mức sử dụng GPU và giảm thời gian chờ. Tuy nhiên, pipeline parallelism có thể phức tạp hơn vì mô hình có thể cần được viết lại dưới dạng một chuỗi các module nn.Sequential, và cũng không thể giảm hoàn toàn thời gian chờ vì lượt forward cuối cùng cũng phải chờ lượt backward hoàn tất.
Song song tensor
Tensor parallelism phân phối các phép tính tensor lớn trên nhiều GPU. Các tensor được cắt ngang hoặc dọc và mỗi lát được xử lý bởi một GPU riêng biệt. Mỗi GPU thực hiện các phép tính trên lát tensor của nó và kết quả được đồng bộ hóa ở cuối để tái tạo kết quả cuối cùng.
Tensor parallelism hiệu quả cho việc huấn luyện các mô hình lớn không vừa với bộ nhớ của một GPU đơn lẻ. Nó cũng nhanh và hiệu quả hơn vì mỗi GPU có thể xử lý lát tensor của mình song song, và có thể kết hợp với các phương pháp song song khác. Tuy nhiên, giống như các phương pháp song song khác, tensor parallelism làm tăng chi phí truyền thông giữa các GPU.
Tham khảo hướng dẫn Tensor parallelism để tìm hiểu cách sử dụng nó cho suy luận.
Song song lai
Các phương pháp song song có thể được kết hợp để đạt được mức tiết kiệm bộ nhớ lớn hơn và huấn luyện các mô hình có hàng tỷ tham số một cách hiệu quả hơn.
Song song dữ liệu và song song đường ống
Song song dữ liệu và pipeline phân phối dữ liệu trên các GPU và chia mỗi mini batch dữ liệu thành các micro-batch để đạt được song song pipeline.
Mỗi rank song song dữ liệu xử lý tiến trình như thể chỉ có một GPU thay vì hai, nhưng GPU 0 và 1 có thể offload các micro-batch dữ liệu sang GPU 2 và 3 để giảm thời gian nhàn rỗi.
Cách tiếp cận này tối ưu hóa xử lý dữ liệu song song bằng cách giảm thiểu tình trạng GPU nhàn rỗi.

Song song dữ liệu ZeRO, song song đường ống và song song mô hình (song song 3 chiều)
Sự kết hợp giữa song song hóa dữ liệu, pipeline và mô hình tạo thành song song hóa 3D để tối ưu hóa hiệu quả bộ nhớ và tính toán.
Hiệu quả bộ nhớ được đạt được bằng cách chia mô hình trên các GPU và cũng chia nó thành các giai đoạn để tạo ra một đường ống. Điều này cho phép các GPU làm việc song song trên các micro-batch dữ liệu, giảm mức sử dụng bộ nhớ của mô hình, optimizer và activations.
Hiệu suất tính toán được kích hoạt bởi song song dữ liệu ZeRO, trong đó mỗi GPU chỉ lưu trữ một phần của mô hình, bộ tối ưu hóa và các kích hoạt. Điều này cho phép băng thông truyền thông cao hơn giữa các nút song song dữ liệu vì truyền thông có thể diễn ra độc lập hoặc song song với các giai đoạn pipeline khác.
Cách tiếp cận này có thể mở rộng cho các mô hình cực kỳ lớn với hàng nghìn tỷ tham số.
