Tích lũy Gradient cục bộ giúp tăng tốc độ huấn luyện lên 1,7x

Tốc độ huấn luyện thường gặp nút thắt do thời gian chờ (idle time) trong các pipeline. Thời gian chờ này được gọi là "bubble".

Một phương pháp mới mang tên PACI giải quyết vấn đề này. Nó loại bỏ các "bubble" và tăng tốc độ huấn luyện lên 1,69 lần.

Hầu hết các đội ngũ đều sử dụng chiến lược gọi là 1F1B-flush. Phương pháp này giữ cho các trọng số (weights) nhất quán nhưng lại tạo ra các khoảng trống nơi hệ thống phải chờ dữ liệu. Những khoảng thời gian chờ này làm chậm toàn bộ quá trình.

Các phương pháp bất đồng bộ (asynchronous) khác cũng cố gắng khắc phục điều này. Chúng sử dụng các kỹ thuật phức tạp như lưu trữ trọng số (weight stashing) hoặc tạo các bản sao. Những kỹ thuật này tiêu tốn quá nhiều bộ nhớ và thường khiến quá trình huấn luyện trở nên không ổn định.

PACI đi theo một hướng khác. Nó sử dụng kỹ thuật tích lũy gradient cục bộ (local gradient accumulation). Điều này giúp duy trì pipeline hoạt động liên tục mà không cần đồng bộ hóa toàn cục (global synchronization).

Dưới đây là lý do tại sao PACI lại quan trọng:

  • Nó đạt được độ ổn định tương đương với các phương pháp tiêu chuẩn.
  • Nó sử dụng cùng một lượng bộ nhớ.
  • Nó đạt được tốc độ của các cấu hình nhanh hơn nhưng nặng nề hơn.
  • Nó giảm thời gian đạt được độ chính xác (time-to-accuracy) xuống 1,69 lần.

Trong các thử nghiệm với GPT-2 Medium, PACI đã đạt được độ chính xác mục tiêu nhanh hơn nhiều. Điều này cho thấy bạn có thể đánh đổi một lượng nhỏ sai lệch trọng số (weight drift) để lấy mức tăng hiệu suất khổng lồ.

Đối với các đội ngũ kỹ thuật, điều này đồng nghĩa với việc giảm 40% chi phí phần cứng. Bạn sẽ có kết quả nhanh hơn mà không cần mua thêm GPU hay bổ sung thêm bộ nhớ.

Các nhà nghiên cứu đã thử nghiệm phương pháp này trên một pipeline 8 giai đoạn với các mô hình kiểu GPT. Bạn có thể cần điều chỉnh cửa sổ tích lũy (accumulation window) nếu thay đổi độ sâu của pipeline hoặc kích thước batch (batch size).

Bạn có thể tự mình thử nghiệm. Các tác giả đã cung cấp một wrapper tích lũy cục bộ (local-accumulation wrapper) trong repository của họ. Hãy thay thế bộ đồng bộ hóa flush hiện tại của bạn bằng nó để thấy được sự gia tăng tốc độ.

Source: https://dev.to/olaughter/local-gradient-accumulation-speeds-training-17x-2mdk

Optional learning community: https://t.me/GyaanSetuAi