Kỹ thuật đào tạo mạng lưới thần kinh lớn Trí tuệ dữ liệu PlatoBlockchain. Tìm kiếm dọc. Ái.

Kỹ thuật đào tạo mạng nơ ron lớn

Kỹ thuật đào tạo mạng nơ ron lớn

Mạng nơ-ron lớn là cốt lõi của nhiều tiến bộ gần đây trong AI, nhưng đào tạo chúng là một thách thức khó khăn về kỹ thuật và nghiên cứu đòi hỏi phải điều phối một nhóm GPU để thực hiện một phép tính đồng bộ duy nhất. Khi kích thước cụm và mô hình đã phát triển, các nhà thực hành học máy đã phát triển ngày càng nhiều kỹ thuật để song song đào tạo mô hình trên nhiều GPU. Thoạt nhìn, việc hiểu các kỹ thuật song song này có vẻ khó khăn, nhưng chỉ với một số giả định về cấu trúc tính toán, các kỹ thuật này trở nên rõ ràng hơn nhiều — tại thời điểm đó, bạn chỉ xoay quanh các bit mờ đục từ A đến B giống như một mạng chuyển đổi con thoi xung quanh các gói.

Song song dữ liệu

Kỹ thuật đào tạo mạng nơ ron lớn

Đường ống song song

Kỹ thuật đào tạo mạng nơ ron lớn

Tenor song song

Kỹ thuật đào tạo mạng nơ ron lớn

Chuyên gia song song

Kỹ thuật đào tạo mạng nơ ron lớn

Song song dữ liệu

Kỹ thuật đào tạo mạng nơ ron lớn

Đường ống song song

Kỹ thuật đào tạo mạng nơ ron lớn

Tenor song song

Kỹ thuật đào tạo mạng nơ ron lớn

Chuyên gia song song

Kỹ thuật đào tạo mạng nơ ron lớn

Một minh họa về các chiến lược song song khác nhau trên mô hình ba lớp. Mỗi màu đề cập đến một lớp và các đường đứt nét phân tách các GPU khác nhau.

Không có song song

Đào tạo một mạng nơ-ron là một quá trình lặp đi lặp lại. Trong mỗi lần lặp lại, chúng tôi thực hiện chuyển tiếp qua lớp để tính toán kết quả đầu ra cho mỗi ví dụ đào tạo trong một lô dữ liệu. Sau đó, một lượt vượt qua khác sẽ tiếp tục lạc hậu thông qua các lớp, tuyên truyền mức độ ảnh hưởng của mỗi tham số đến kết quả cuối cùng bằng cách tính Gradient đối với từng tham số. Gradient trung bình cho lô, các tham số và một số trạng thái tối ưu hóa cho mỗi tham số được chuyển đến một thuật toán tối ưu hóa, chẳng hạn như Adam, tính toán các thông số của lần lặp tiếp theo (sẽ có hiệu suất tốt hơn một chút trên dữ liệu của bạn) và trạng thái tối ưu hóa mỗi thông số mới. Khi quá trình đào tạo lặp lại qua các lô dữ liệu, mô hình sẽ phát triển để tạo ra các đầu ra ngày càng chính xác.

Các kỹ thuật song song khác nhau phân chia quá trình đào tạo này theo các chiều khác nhau, bao gồm:

  • Dữ liệu song song — chạy các tập con khác nhau của lô trên các GPU khác nhau;
  • Tính song song của đường ống — chạy các lớp khác nhau của mô hình trên các GPU khác nhau;
  • Tensor song song — chia nhỏ phép toán cho một phép toán đơn lẻ, chẳng hạn như phép nhân ma trận để được phân chia trên các GPU;
  • Hỗn hợp chuyên gia — xử lý từng ví dụ chỉ bằng một phần nhỏ của mỗi lớp.

(Trong bài đăng này, chúng tôi sẽ giả định rằng bạn đang sử dụng GPU để đào tạo mạng nơ-ron của mình, nhưng các ý tưởng tương tự cũng áp dụng cho những người sử dụng bất kỳ máy gia tốc mạng thần kinh.)

Song song dữ liệu

Dữ liệu song song đào tạo có nghĩa là sao chép các thông số giống nhau sang nhiều GPU (thường được gọi là "công nhân") và gán các ví dụ khác nhau cho mỗi GPU để được xử lý đồng thời. Riêng tính năng song song dữ liệu vẫn yêu cầu mô hình của bạn phải phù hợp với bộ nhớ của một GPU, nhưng cho phép bạn sử dụng tính toán của nhiều GPU với chi phí lưu trữ nhiều bản sao thông số trùng lặp của bạn. Điều đó đang được nói, có các chiến lược để tăng RAM hiệu quả có sẵn cho GPU của bạn, chẳng hạn như tạm thời giảm tải các thông số vào bộ nhớ CPU giữa các lần sử dụng.

Khi mỗi nhân viên song song dữ liệu cập nhật bản sao của các tham số, chúng cần phối hợp để đảm bảo rằng mỗi nhân viên tiếp tục có các tham số tương tự. Cách tiếp cận đơn giản nhất là giới thiệu giao tiếp chặn giữa các worker: (1) tính toán gradient trên mỗi worker một cách độc lập; (2) trung bình các độ dốc giữa các công nhân; và (3) tính toán độc lập các thông số mới giống nhau trên mỗi công nhân. Bước (2) là mức trung bình chặn yêu cầu chuyển khá nhiều dữ liệu (tỷ lệ với số lượng nhân công nhân với kích thước của các thông số của bạn), điều này có thể ảnh hưởng đến thông lượng đào tạo của bạn. Có nhiều lược đồ đồng bộ hóa không đồng bộ để loại bỏ chi phí này, nhưng chúng ảnh hưởng đến hiệu quả học tập; trong thực tế, mọi người thường gắn bó với cách tiếp cận đồng bộ.

Đường ống song song

Với Đường ống song song đào tạo, chúng tôi phân chia các phần tuần tự của mô hình trên các GPU. Mỗi GPU chỉ chứa một phần nhỏ các thông số và do đó, cùng một mô hình tiêu thụ bộ nhớ trên mỗi GPU ít hơn tương ứng.

Thật đơn giản khi chia một mô hình lớn thành nhiều phần của các lớp liên tiếp. Tuy nhiên, có sự phụ thuộc tuần tự giữa đầu vào và đầu ra của các lớp, do đó, việc triển khai ngây thơ có thể dẫn đến một lượng lớn thời gian nhàn rỗi trong khi công nhân đợi đầu ra từ máy trước được sử dụng làm đầu vào của nó. Những khoảng thời gian chờ đợi này được gọi là “bong bóng”, làm lãng phí quá trình tính toán có thể được thực hiện bởi các máy chạy không tải.

Kỹ thuật đào tạo mạng nơ ron lớn Forward
Kỹ thuật đào tạo mạng nơ ron lớn Lạc hậu
Kỹ thuật đào tạo mạng nơ ron lớn Cập nhật Gradient
Kỹ thuật đào tạo mạng nơ ron lớn Nhàn rỗi
Kỹ thuật đào tạo mạng nơ ron lớn

Minh họa về thiết lập song song đường ống ngây thơ trong đó mô hình được chia theo chiều dọc thành 4 phân vùng theo lớp. Công nhân 1 lưu trữ các thông số mô hình của lớp đầu tiên của mạng (gần nhất với đầu vào), trong khi công nhân 4 lưu trữ lớp 4 (gần nhất với đầu ra). “F”, “B” và “U” lần lượt thể hiện các thao tác tiến, lùi và cập nhật. Các chỉ số phụ cho biết một thao tác chạy trên công nhân nào. Dữ liệu được xử lý bởi một công nhân tại một thời điểm do sự phụ thuộc tuần tự, dẫn đến "bong bóng" thời gian nhàn rỗi lớn.

Chúng tôi có thể sử dụng lại các ý tưởng từ tính năng song song dữ liệu để giảm chi phí bong bóng bằng cách yêu cầu mỗi nhân viên chỉ xử lý một tập hợp con các phần tử dữ liệu tại một thời điểm, cho phép chúng tôi khéo léo chồng chéo phép tính mới với thời gian chờ đợi. Ý tưởng cốt lõi là chia một lô thành nhiều microbatch; mỗi microbatch sẽ được xử lý nhanh hơn tương ứng và mỗi nhân viên sẽ bắt đầu làm việc trên microbatch tiếp theo ngay khi có sẵn, do đó đẩy nhanh quá trình thực thi đường ống. Với đủ microbatch, công nhân có thể được sử dụng hầu hết thời gian với một bong bóng tối thiểu ở đầu và cuối bước. Gradients được tính trung bình trên các microbatch và cập nhật các thông số chỉ xảy ra sau khi tất cả các microbatch đã được hoàn thành.

Số lượng công nhân mà mô hình được phân chia thường được gọi là độ sâu đường ống.

Trong quá trình chuyển tiếp, công nhân chỉ cần gửi kết quả đầu ra (được gọi là kích hoạt) của khối lớp của nó cho công nhân tiếp theo; trong quá trình chuyển ngược trở lại, nó chỉ gửi các gradient trên các kích hoạt đó cho công nhân trước đó. Có một không gian thiết kế lớn về cách lên lịch cho những đường chuyền này và cách tổng hợp các độ dốc trên các microbatch. Ống GP có mỗi quá trình worker chuyển tới và lùi liên tục và sau đó tổng hợp các gradient từ nhiều microbatch một cách đồng bộ ở cuối. Giấc mơ viễn vông thay vào đó, lên lịch cho mỗi công nhân để xử lý luân phiên các đường chuyền tiến và lùi.

Kỹ thuật đào tạo mạng nơ ron lớn Forward
Kỹ thuật đào tạo mạng nơ ron lớn Lạc hậu
Kỹ thuật đào tạo mạng nơ ron lớn Cập nhật
Kỹ thuật đào tạo mạng nơ ron lớn Nhàn rỗi
Ống GP

Kỹ thuật đào tạo mạng nơ ron lớn

Giấc mơ viễn vông

Kỹ thuật đào tạo mạng nơ ron lớn

So sánh lược đồ đường ống GPipe và PipeDream, sử dụng 4 microbatch mỗi đợt. Các lô nhỏ 1-8 tương ứng với hai lô dữ liệu liên tiếp. Trong hình ảnh, “(số)” cho biết thao tác được thực hiện trên microbatch nào và chỉ số con đánh dấu ID công nhân. Lưu ý rằng PipeDream đạt hiệu quả cao hơn bằng cách thực hiện một số tính toán với các tham số cũ.

Tenor song song

Tính song song của đường ống phân chia một mô hình “theo chiều dọc” theo từng lớp. Cũng có thể chia "theo chiều ngang" các hoạt động nhất định trong một lớp, lớp này thường được gọi là Tensor song song tập huấn. Đối với nhiều mô hình hiện đại (chẳng hạn như Transformer), nút cổ chai tính toán là nhân ma trận lô kích hoạt với ma trận trọng số lớn. Phép nhân ma trận có thể được coi như các sản phẩm dấu chấm giữa các cặp hàng và cột; có thể tính toán các sản phẩm chấm độc lập trên các GPU khác nhau hoặc tính toán các phần của từng sản phẩm chấm trên các GPU khác nhau và tổng hợp kết quả. Với một trong hai chiến lược, chúng tôi có thể chia nhỏ ma trận trọng số thành các “phân đoạn” có kích thước đồng đều, lưu trữ từng phân đoạn trên một GPU khác nhau và sử dụng phân đoạn đó để tính toán phần có liên quan của sản phẩm ma trận tổng thể trước khi giao tiếp sau đó để kết hợp các kết quả.

Một ví dụ là Megatron-LM, song song hóa các phép nhân ma trận trong các lớp tự chú ý của Biến áp và MLP. PTD-P sử dụng tensor, dữ liệu và song song đường ống; lịch trình đường ống của nó chỉ định nhiều lớp không liên tiếp cho mỗi thiết bị, giảm chi phí bong bóng với chi phí truyền thông mạng nhiều hơn.

Đôi khi đầu vào của mạng có thể được song song hóa trên một chiều có mức độ tính toán song song cao so với giao tiếp chéo. Trình tự song song là một trong những ý tưởng như vậy, trong đó chuỗi đầu vào được chia theo thời gian thành nhiều ví dụ con, giảm mức tiêu thụ bộ nhớ đỉnh theo tỷ lệ bằng cách cho phép tính toán tiến hành với các ví dụ có kích thước chi tiết hơn.

Hỗn hợp chuyên gia (MoE)

Với Hỗn hợp chuyên gia (MoE) phương pháp tiếp cận, chỉ một phần của mạng được sử dụng để tính toán đầu ra cho bất kỳ đầu vào nào. Một cách tiếp cận ví dụ là có nhiều bộ trọng số và mạng có thể chọn bộ trọng số nào để sử dụng thông qua cơ chế kiểm soát tại thời điểm suy luận. Điều này cho phép nhiều tham số hơn mà không tăng chi phí tính toán. Mỗi bộ trọng số được gọi là “chuyên gia”, với hy vọng rằng mạng sẽ học cách chỉ định các kỹ năng và tính toán chuyên biệt cho từng chuyên gia. Các chuyên gia khác nhau có thể được tổ chức trên các GPU khác nhau, cung cấp một cách rõ ràng để mở rộng số lượng GPU được sử dụng cho một mô hình.

Kỹ thuật đào tạo mạng nơ ron lớn

Hình minh họa lớp hỗn hợp các chuyên gia (MoE). Chỉ có 2 trong số n các chuyên gia được lựa chọn bởi mạng lưới giám sát. (Hình ảnh phỏng theo: Shazeer và cộng sự, 2017)

GShard Quy mô một Biến áp MoE lên đến 600 tỷ tham số với một sơ đồ trong đó chỉ các lớp MoE được tách ra trên nhiều thiết bị TPU và các lớp khác được sao chép hoàn toàn. Chuyển đổi Biến áp chia tỷ lệ kích thước mô hình thành hàng nghìn tỷ tham số với độ thưa thớt thậm chí cao hơn bằng cách định tuyến một đầu vào cho một chuyên gia duy nhất.

Các thiết kế tiết kiệm bộ nhớ khác

Có nhiều chiến lược tính toán khác để làm cho việc đào tạo các mạng nơ-ron ngày càng lớn trở nên dễ hiểu hơn. Ví dụ:

  • Để tính toán gradient, bạn cần phải lưu các kích hoạt ban đầu, điều này có thể tiêu tốn rất nhiều RAM của thiết bị. Kiểm tra (còn được gọi là tính toán lại kích hoạt) lưu trữ bất kỳ tập hợp con nào của các kích hoạt và tính toán lại các kích hoạt trung gian ngay trong thời gian chuyển ngược trở lại. Điều này tiết kiệm rất nhiều bộ nhớ với chi phí tính toán tối đa là một lần chuyển tiếp đầy đủ bổ sung. Người ta cũng có thể liên tục đánh đổi giữa chi phí máy tính và bộ nhớ bằng cách tính toán lại kích hoạt có chọn lọc, đó là kiểm tra các tập hợp con của các kích hoạt tương đối đắt hơn để lưu trữ nhưng rẻ hơn để tính toán.

  • Đào tạo về độ chính xác hỗn hợp là đào tạo các mô hình sử dụng các số có độ chính xác thấp hơn (phổ biến nhất là FP16). Các máy gia tốc hiện đại có thể đạt được số FLOP cao hơn nhiều với các con số có độ chính xác thấp hơn và bạn cũng tiết kiệm được RAM của thiết bị. Nếu được chăm sóc thích hợp, mô hình kết quả có thể mất độ chính xác gần như không có.

  • Giảm tải là tạm thời giảm tải dữ liệu không sử dụng đến CPU hoặc giữa các thiết bị khác nhau và sau đó đọc lại khi cần. Các triển khai ngây thơ sẽ làm chậm quá trình đào tạo rất nhiều, nhưng các triển khai phức tạp sẽ tìm nạp trước dữ liệu để thiết bị không bao giờ phải chờ đợi. Một cách triển khai của ý tưởng này là Số không trong đó phân chia các tham số, độ dốc và trạng thái của trình tối ưu hóa trên tất cả các phần cứng có sẵn và hiện thực hóa chúng khi cần thiết.

  • Trình tối ưu hóa hiệu quả bộ nhớ đã được đề xuất để giảm dung lượng bộ nhớ của trạng thái đang chạy được duy trì bởi trình tối ưu hóa, Chẳng hạn như Adafactor.

  • Nén cũng có thể được sử dụng để lưu trữ các kết quả trung gian trong mạng. Ví dụ, Ý chính nén các kích hoạt được lưu để chuyển ngược lại; DALL · E nén các gradient trước khi đồng bộ hóa chúng.


Tại OpenAI, chúng tôi đang đào tạo và cải thiện các mô hình lớn từ cơ sở hạ tầng cơ bản đến việc triển khai chúng cho các vấn đề trong thế giới thực. Nếu bạn muốn áp dụng các ý tưởng từ bài đăng này vào thực tế — đặc biệt phù hợp với nhóm Nghiên cứu Ứng dụng và Quy mô của chúng tôi — chúng tôi thuê!


Lời cảm ơn
Cảm ơn Nikolas Tezak, Sam Altman, Daniel Gackle, Ilya Sutskever và Steven Adler đã phản hồi về bản nháp. Cảm ơn Justin Jay Wang, Bianca Martin và Steve Dowling về thiết kế và truyền thông.

Dấu thời gian:

Thêm từ OpenAI