Công nghệ nén lại đổi mới, tạo cơ hội cho những mẫu lớn có thể nhét vừa vào điện thoại di động

Nguồn hình ảnh: Được tạo bởi AI không giới hạn

Các mô hình ngôn ngữ lớn (LLM), đặc biệt là các mô hình Transformer tiền huấn luyện tổng quát (GPT), đã cho thấy hiệu suất tuyệt vời trên nhiều tác vụ ngôn ngữ phức tạp. Bước đột phá này đã dẫn đến mong muốn chạy các LLM này nguyên bản trên thiết bị di động để bảo vệ quyền riêng tư của người dùng. Tuy nhiên, ngay cả các LLM nhỏ cũng quá lớn để chạy trên các thiết bị này.

Ví dụ: LLaMA nhỏ có thông số 7B và phiên bản FP16 của nó có dung lượng 14GB, trong khi thiết bị di động chỉ có 18GB DRAM. Do đó, nén LLM thông qua tối ưu hóa thời gian đào tạo (chẳng hạn như phân tán, lượng tử hóa hoặc phân cụm trọng số) là một bước quan trọng để triển khai LLM trên thiết bị. Tuy nhiên, việc tối ưu hóa thời gian đào tạo LLM rất tốn kém do kích thước mô hình và chi phí tài nguyên tính toán. DKM, một trong những thuật toán SOTA để phân cụm trọng số, yêu cầu thời gian đào tạo quá mức để phân cụm trọng số thay đổi do cần phân tích sự tương tác giữa tất cả các trọng số và tất cả các tùy chọn phân cụm có thể có.

Do đó, nhiều kỹ thuật nén LLM hiện có, chẳng hạn như GTPQ và AWQ, dựa vào tối ưu hóa sau đào tạo. Trong bài báo này, các nhà nghiên cứu đề xuất các kỹ thuật tối ưu hóa bộ nhớ để đạt được phân cụm có trọng số theo thời gian đào tạo và ứng dụng của nó trong DKM, còn được gọi là eDKM.

Các kỹ thuật được sử dụng trong bài viết này bao gồm điều phối tensor trên nhiều thiết bị, duy nhất và phân mảnh ma trận trọng số. Khi sử dụng eDKM để tinh chỉnh mô hình LLaMA 7B và nén nó thành 3 bit cho mỗi hệ số trọng lượng, các nhà nghiên cứu đã giảm được khoảng 130 lần dung lượng bộ nhớ của ngăn xếp bộ giải mã, tốt hơn so với công nghệ nén 3 bit hiện có.

Cải thiện hiệu quả bộ nhớ của DKM

Như được hiển thị trong Hình 1, việc cắt tỉa, lượng tử hóa và chuẩn hóa đều là các kỹ thuật tối ưu hóa trọng số phổ biến.Các phương pháp này tối ưu hóa trọng số ban đầu W và thu được trọng số

, để tối ưu hóa độ trễ suy luận, độ chính xác hoặc kích thước mô hình. Trong số các công nghệ này, các nhà nghiên cứu trong bài viết này chủ yếu tập trung vào phân cụm có trọng số, đặc biệt là thuật toán phân cụm có trọng số DKM.

Phân cụm trọng số là sự rời rạc hóa trọng số phi tuyến trong đó ma trận trọng số được nén vào bảng tra cứu và danh sách các chỉ số có độ chính xác thấp của bảng tra cứu mà các máy gia tốc suy luận hiện đại có thể xử lý. DKM thực hiện phân cụm trọng số có thể phân biệt bằng cách phân tích sự tương tác giữa các trọng số (ký hiệu là W) và các điểm trung tâm (ký hiệu là C), đồng thời cân bằng giữa tỷ lệ nén và độ chính xác.

Do đó, sử dụng DKM để nén LLM mang lại kết quả chất lượng cao. Tuy nhiên, bản đồ chú ý được tạo trong quá trình tính toán DKM lớn và độ phức tạp bộ nhớ của quá trình tiến/lùi là O (|W||C|) (tức là ma trận trong Hình 1), điều này đặc biệt khó khăn đối với LLM nén. . Ví dụ: mô hình LLaMA 7B chỉ tính toán bản đồ chú ý cho phân cụm trọng số 4 bit cần ít nhất 224GB bộ nhớ.

*Hình 1: Tổng quan về hệ thống tối ưu hóa trọng lượng. Trong DKM, hệ thống nội bộ tạo ra một bản đồ chú ý có thể được nhóm lại theo các trọng số khác nhau. *

Do đó, các nhà nghiên cứu cần sử dụng bộ nhớ CPU để xử lý yêu cầu bộ nhớ lớn như vậy, tức là trước tiên lưu trữ thông tin trong bộ nhớ CPU rồi sao chép lại vào GPU khi cần. Tuy nhiên, điều này sẽ tạo ra nhiều lưu lượng giữa GPU và CPU (do đó làm chậm quá trình đào tạo) và yêu cầu dung lượng bộ nhớ CPU rất lớn. Điều này có nghĩa là điều quan trọng là phải giảm số lượng giao dịch giữa CPU và GPU và giảm thiểu lưu lượng trên mỗi giao dịch. Để giải quyết những vấn đề này, các nhà nghiên cứu đã giới thiệu hai công nghệ tối ưu hóa bộ nhớ mới trong PyTorch.

  • Điều phối tensor trên nhiều thiết bị: Theo dõi các tensor được sao chép trên các thiết bị để tránh sao chép dư thừa, từ đó giảm mức sử dụng bộ nhớ và tăng tốc quá trình đào tạo.
  • Duy nhất trọng lượng và xử lý sharding: Tận dụng thực tế là trọng số 16 bit chỉ có 216 giá trị duy nhất để giảm mức độ biểu thị của bản đồ chú ý (hiển thị trong Hình 1) và chia nó thành nhiều mô hình học tập.

Phối hợp tensor trên nhiều thiết bị

PyTorch sử dụng kho lưu trữ dữ liệu để biểu diễn các tensor, được liên kết với bố cục dữ liệu thực tế và siêu dữ liệu, được sử dụng để lưu hình dạng, loại, v.v. của tensor. Kiến trúc tensor này cho phép PyTorch tái sử dụng bộ nhớ dữ liệu nhiều nhất có thể và giảm mức sử dụng bộ nhớ một cách hiệu quả. Tuy nhiên, khi một tensor được chuyển sang thiết bị khác (chẳng hạn như từ GPU sang CPU), bộ lưu trữ dữ liệu không thể được sử dụng lại và cần phải tạo một tensor mới.

Bảng 1 minh họa cách sử dụng bộ nhớ của tensor khi di chuyển giữa các thiết bị PyTorch. Tenxor x0 được phân bổ ở dòng 0 tiêu tốn 4 MB trên GPU. Khi chế độ xem của nó thay đổi ở dòng 1, không cần thêm bộ nhớ GPU vì kho dữ liệu cơ bản có thể được sử dụng lại (tức là x0 và x1 thực sự giống nhau). Tuy nhiên, khi x0 và x1 được chuyển sang CPU như trong dòng 2 và 3, mặc dù y0 và y1 có thể chia sẻ cùng một bộ lưu trữ dữ liệu trên CPU nhưng mức tiêu thụ bộ nhớ CPU sẽ trở thành 8 MB, dẫn đến dư thừa bộ nhớ CPU và tăng GPU- lưu lượng tới CPU.

*Bảng 1: Tinh chỉnh LLM có thể yêu cầu sử dụng bộ nhớ CPU để giảm tải dung lượng bộ nhớ trên GPU. Việc thiếu quản lý tensor trên nhiều thiết bị có thể dẫn đến các bản sao dư thừa trên các thiết bị (đặc biệt khi biểu đồ tính toán phức tạp), điều này đặc biệt gây bất lợi cho việc tối ưu hóa thời gian đào tạo LLM. Ví dụ: mặc dù x0 và x1 là cùng một tenxơ với các góc nhìn khác nhau, nhưng các tenxơ thu được y0 và y1 không chia sẻ bộ lưu trữ dữ liệu khi sao chép vào CPU, trong khi trên GPU x0 và x1 thì có. *

Để giải quyết sự kém hiệu quả này, các nhà nghiên cứu đã đặt một lớp điều phối trong Hình 2(b), trong đó màu đen biểu thị siêu dữ liệu và lưu trữ dữ liệu thực tế, còn màu xám chỉ biểu thị siêu dữ liệu. Hình 2(a) hiển thị ví dụ từ Bảng 1, trong đó x1 chia sẻ bố cục dữ liệu với x0, nhưng y0 và y1 có bộ lưu trữ dữ liệu trùng lặp trên CPU. Như được hiển thị trong Hình 2 (b), bằng cách chèn một lớp điều phối, các nhà nghiên cứu sẽ tránh được sự dư thừa này và giảm lưu lượng GPU đến CPU. Các nhà nghiên cứu đã sử dụng save-tensor-hook trong PyTorch để triển khai sơ đồ hoán đổi như vậy, kiểm tra xem kho dữ liệu tương tự đã được sao chép hay chưa.

Tuy nhiên, sử dụng sơ đồ như vậy để kiểm tra xem có tồn tại cùng một tensor trên thiết bị mục tiêu hay không. Trong ví dụ của Hình 2(b), nhà nghiên cứu đã không sao chép x1 vào CPU mà chỉ trả về một tham chiếu đến y0 và thao tác xem giữa x1 và y0.

*Hình 2: Khi áp dụng điều phối tensor trên nhiều thiết bị cho tình huống trong Bảng 1, có thể tránh được sự trùng lặp ở phía CPU, nhờ đó tiết kiệm bộ nhớ và lưu lượng. *

Duyệt biểu đồ tính toán sẽ bổ sung thêm các chu kỳ tính toán và việc lưu các bản sao không cần thiết có thể bù đắp chi phí này. Các nhà nghiên cứu nhận thấy rằng tìm kiếm trong vòng 4 bước nhảy là đủ để phát hiện tất cả các trường hợp đủ điều kiện trong biểu đồ tính toán của quá trình triển khai DKM ban đầu.

Tính duy nhất và phân chia trọng lượng

Trong hầu hết quá trình đào tạo LLM, các trọng số thường sử dụng bộ lưu trữ 16 bit (chẳng hạn như BF16 hoặc FP16), có nghĩa là mặc dù có hàng tỷ tham số trong LLM nhưng chỉ có 216 hệ số duy nhất do độ rộng bit. Điều này mang đến cơ hội nén đáng kể bản đồ chú ý giữa trọng lượng và điểm trung tâm, như trong Hình 3.

Hình 3: Duy nhất trọng lượng và phân mảnh

Kết quả thực nghiệm

Độ chính xác LLM

Bài viết này so sánh eDKM với các sơ đồ nén dựa trên lượng tử hóa khác, bao gồm: RTN, SmoothQuant, GPTQ, AWQ và LLM-QAT. Đối với eDKM, các nhà nghiên cứu cũng thực hiện nén 8 bit trên lớp nhúng. Cuối cùng đã đạt được những kết luận sau:

  • eDKM cho phép mô hình LLaMA 7B nén 3 bit hoạt động tốt hơn tất cả các sơ đồ nén 3 bit khác.
  • eDKM có độ chính xác tốt nhất trên điểm chuẩn ARC-e ở cấu hình 3 bit và 4 bit.
  • Hiệu suất của eDKM rất cạnh tranh trên các tiêu chuẩn PIQA và MMLU sử dụng mô hình nén 4 bit.

Thí nghiệm cắt bỏ

Trong các thí nghiệm cắt bỏ, các nhà nghiên cứu đã đo lường sự cân bằng giữa dung lượng bộ nhớ và tốc độ tiến lùi của quá trình nén 3 bit bằng cách sử dụng lớp chú ý trong ngăn xếp bộ giải mã LLaMA 7B làm ví dụ. Chỉ riêng việc điều phối tensor trên nhiều thiết bị đã giảm mức sử dụng bộ nhớ xuống 2,9 lần với rất ít chi phí thời gian chạy, trong khi các mô-đun phân mảnh và duy nhất tiết kiệm lần lượt là 23,5 lần và 16,4 lần. Khi tất cả các công nghệ được kết hợp, eDKM sẽ tiết kiệm được khoảng 130 lần. Mặc dù các bước này yêu cầu thêm chi phí tính toán và giao tiếp nhưng chi phí thời gian chạy không đáng kể do lưu lượng giữa GPU và CPU giảm đáng kể.

Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
  • Phần thưởng
  • Bình luận
  • Chia sẻ
Bình luận
0/400
Không có bình luận
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)