Chủ đề thịnh hành
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Bạn đang tham gia phỏng vấn Kỹ sư ML tại Google.
Người phỏng vấn: Chúng tôi cần huấn luyện một LLM trên 1.000 GPU. Bạn sẽ đảm bảo tất cả các GPU chia sẻ những gì chúng học như thế nào?
Bạn: Sử dụng một máy chủ tham số trung tâm để tổng hợp và phân phối lại các trọng số.
Phỏng vấn kết thúc.
Đây là những gì bạn đã bỏ lỡ:
Một nút thắt lớn trong thời gian chạy khi đào tạo đa GPU xảy ra trong quá trình đồng bộ hóa GPU.
Ví dụ, trong đào tạo đa GPU thông qua song song dữ liệu:
- Mô hình giống nhau được phân phối cho các GPU khác nhau.
- Mỗi GPU xử lý một tập con khác nhau của toàn bộ tập dữ liệu.
Kiểm tra điều này 👇
Điều này dẫn đến các gradient khác nhau trên các thiết bị khác nhau.
Vì vậy, trước khi cập nhật các tham số mô hình trên mỗi thiết bị GPU, chúng ta phải truyền đạt các gradient đến tất cả các thiết bị khác để đồng bộ hóa chúng.
Hãy cùng tìm hiểu 2 chiến lược phổ biến tiếp theo!
Thuật toán 1) All-reduce
Một cách rõ ràng là gửi các gradient từ một thiết bị đến tất cả các thiết bị khác để đồng bộ hóa chúng.
Nhưng điều này sử dụng băng thông cao.
Nếu mỗi GPU có “N” phần tử và có “G” GPU, thì tổng số phần tử được truyền là G*(G-1)*N 👇
Chúng ta có thể tối ưu hóa điều này bằng cách chuyển tất cả các phần tử sang một GPU, tính toán giá trị cuối cùng và gửi lại cho tất cả các GPU khác.
Đây là một cải tiến đáng kể.
Nhưng bây giờ một GPU duy nhất phải nhận, tính toán và truyền lại các gradient, vì vậy điều này không thể mở rộng.
Thuật toán 2) Giảm vòng
Giai đoạn #1) Giảm chia sẻ
Đầu tiên, các gradient được chia thành G đoạn trên mỗi GPU (G = tổng số GPU).
Kiểm tra cái này 👇
Trong một lần lặp, mỗi GPU gửi một đoạn đến GPU tiếp theo:
- GPU1 gửi a₁ đến GPU2, nơi nó được cộng vào b₁
- GPU2 gửi b₂ đến GPU3, nơi nó được cộng vào c₂
- GPU3 gửi c₃ đến GPU4, nơi nó được cộng vào d₃
- GPU4 gửi d₄ đến GPU1, nơi nó được cộng vào a₄
Kiểm tra điều này 👇
Quá trình này được thực hiện lại:
- GPU1 gửi (d₄+a₄) đến GPU2, nơi nó được cộng vào b₄.
- GPU2 gửi (a₁+b₁) đến GPU3, nơi nó được cộng vào c₁.
- GPU3 gửi (b₂+c₂) đến GPU4, nơi nó được cộng vào d₂.
- GPU4 gửi (c₃+d₃) đến GPU1, nơi nó được cộng vào a₃.
Kiểm tra điều này 👇
Trong lần lặp cuối cùng, các đoạn sau đây được chuyển sang GPU tiếp theo.
Điều này dẫn đến trạng thái mà mỗi GPU có một đoạn hoàn chỉnh, và chúng ta có thể chuyển những đoạn hoàn chỉnh này đến tất cả các GPU khác.
Kiểm tra điều này 👇
Giai đoạn #2) Chia sẻ chỉ
Bây giờ mỗi GPU đã có một đoạn hoàn chỉnh, chúng ta có thể chuyển những đoạn hoàn chỉnh này đến tất cả các GPU khác.
Quá trình này được thực hiện tương tự như những gì chúng ta đã thảo luận ở trên, vì vậy chúng tôi sẽ không đi vào chi tiết đầy đủ.
Lần lặp 1 được hiển thị bên dưới👇
Tiếp theo, chúng ta thực hiện các vòng lặp 2 và 3.
Những điều này được thực hiện tương tự như những gì chúng ta đã học ở Giai đoạn 1.
Kiểm tra điều này 👇
Và đây là kết quả!
Trọng số mô hình trên các GPU đã được đồng bộ hóa.
Trong khi tổng số phần tử được chuyển vẫn giống như chúng ta đã có trong phương pháp “single-GPU-master”, phương pháp vòng này có khả năng mở rộng tốt hơn nhiều vì nó không đặt toàn bộ tải lên một GPU.
Kiểm tra điều này 👇

Theo mặc định, các mô hình học sâu chỉ sử dụng một GPU duy nhất để đào tạo, ngay cả khi có nhiều GPU sẵn có.
Một cách lý tưởng để đào tạo các mô hình là phân phối khối lượng công việc đào tạo trên nhiều GPU.
Đồ họa mô tả bốn chiến lược cho việc đào tạo đa GPU👇
364,81K
Hàng đầu
Thứ hạng
Yêu thích

