Trí tuệ nhân tạo
PowerInfer: Nhanh Large Language Model với GPU Tiêu dùng

Do khả năng tạo nội dung đặc biệt, các Mô hình Ngôn ngữ Lớn Tạo ra đang ở tiền phong của cuộc cách mạng trí tuệ nhân tạo, với những nỗ lực không ngừng để nâng cao khả năng tạo ra của chúng. Tuy nhiên, mặc dù có những tiến bộ nhanh chóng, những mô hình này yêu cầu năng lực tính toán và tài nguyên đáng kể. Điều này chủ yếu là do chúng bao gồm hàng trăm tỷ tham số. Hơn nữa, để hoạt động trơn tru, các mô hình trí tuệ nhân tạo tạo ra yêu cầu hàng nghìn GPU, dẫn đến chi phí vận hành đáng kể. Những yêu cầu vận hành cao là một trong những lý do chính tại sao các mô hình trí tuệ nhân tạo tạo ra chưa được triển khai hiệu quả trên các thiết bị cá nhân.
Trong bài viết này, chúng ta sẽ thảo luận về PowerInfer, một động cơ suy luận LLM tốc độ cao được thiết kế cho các máy tính tiêu chuẩn được trang bị một GPU tiêu dùng duy nhất. Khung PowerInfer nhằm tận dụng sự định位 cao trong suy luận LLM, được đặc trưng bởi phân bố công suất của hoạt động nơ-ron. Điều này có nghĩa là tại bất kỳ thời điểm nào, một tập hợp con nhỏ các nơ-ron “nóng” luôn được kích hoạt trên các đầu vào, trong khi phần còn lại, được gọi là nơ-ron “lạnh”, được kích hoạt dựa trên các đầu vào hoặc yêu cầu cụ thể. Cách tiếp cận này cho phép khung PowerInfer giảm năng lực tính toán cần thiết cho trí tuệ nhân tạo tạo ra để tạo ra đầu ra mong muốn.
Chúng ta sẽ đi sâu vào khung PowerInfer, khám phá phương pháp, đường ống và kết quả ứng dụng thực tế. Hãy bắt đầu.
PowerInfer: Nhanh Large Language Model với GPU Tiêu dùng
Các Mô hình Ngôn ngữ Lớn Tạo ra, như ChatGPT và DALL-E, được biết đến với các nhiệm vụ tạo ra và xử lý ngôn ngữ tự nhiên tinh vi. Do yêu cầu tính toán cao, những mô hình này thường được triển khai trong các trung tâm dữ liệu với GPU tiên tiến. Sự cần thiết của năng lực tính toán như vậy hạn chế việc triển khai của chúng trong các trung tâm dữ liệu, làm nổi bật sự cần thiết phải triển khai các mô hình ngôn ngữ lớn trên các nền tảng địa phương như máy tính cá nhân.
Tăng cường khả năng tiếp cận của các mô hình ngôn ngữ lớn có thể giảm chi phí suy luận và tạo nội dung, nâng cao quyền riêng tư của dữ liệu và cho phép tùy chỉnh mô hình. Hơn nữa, trong khi triển khai trung tâm dữ liệu ưu tiên hiệu suất cao, triển khai LLM địa phương có thể tập trung vào độ trễ thấp do kích thước lô nhỏ hơn.
Tuy nhiên, việc triển khai những mô hình này trên các thiết bị địa phương gặp phải những thách thức đáng kể do yêu cầu bộ nhớ đáng kể của chúng. Các mô hình ngôn ngữ lớn, hoạt động như các bộ chuyển đổi tự hồi quy, tạo ra văn bản token bằng token, với mỗi token yêu cầu truy cập vào toàn bộ mô hình, bao gồm hàng trăm tỷ tham số. Điều này đòi hỏi nhiều GPU cao cấp để tạo ra đầu ra độ trễ thấp. Ngoài ra, triển khai địa phương thường xử lý các yêu cầu riêng lẻ theo trình tự, hạn chế khả năng xử lý song song.
Để giải quyết các yêu cầu bộ nhớ phức tạp của khung trí tuệ nhân tạo tạo ra, các giải pháp hiện có sử dụng các phương pháp như offloading mô hình và nén. Các kỹ thuật như chưng cất, cắt tỉa và lượng tử hóa giảm kích thước mô hình nhưng vẫn quá lớn cho GPU tiêu chuẩn trong máy tính cá nhân. Offloading mô hình, phân chia mô hình tại Lớp Chuyển đổi giữa CPU và GPU, cho phép xử lý phân tán trên bộ nhớ CPU và GPU. Tuy nhiên, phương pháp này bị giới hạn bởi kết nối PCIe chậm và khả năng tính toán hạn chế của CPU, dẫn đến độ trễ suy luận cao.
Khung PowerInfer cho rằng sự không khớp giữa các đặc điểm suy luận LLM và cấu trúc phần cứng là nguyên nhân chính của vấn đề bộ nhớ trong suy luận LLM. Lý tưởng nhất, dữ liệu được truy cập thường xuyên nên được lưu trữ trong GPU có băng thông cao, dung lượng hạn chế, trong khi dữ liệu được truy cập ít hơn nên được lưu trữ trong CPU có băng thông thấp, dung lượng cao. Tuy nhiên, khối lượng tham số lớn của mỗi lần lặp lại suy luận LLM khiến tập hợp làm việc quá lớn cho một GPU duy nhất, dẫn đến việc khai thác định vị không hiệu quả.
Quá trình suy luận trong các mô hình ngôn ngữ lớn thể hiện sự định vị cao, với mỗi lần lặp lại kích hoạt một số lượng nơ-ron hạn chế. Khung PowerInfer nhằm khai thác sự định vị này bằng cách quản lý một số lượng nhỏ nơ-ron “nóng” với GPU, trong khi CPU xử lý nơ-ron “lạnh”. Nó chọn và tải trước nơ-ron nóng vào GPU và xác định nơ-ron được kích hoạt trong thời gian chạy. Cách tiếp cận này giảm thiểu việc chuyển dữ liệu PCIe tốn kém, cho phép GPU và CPU xử lý độc lập nơ-ron được giao cho chúng.
Tuy nhiên, việc triển khai LLM trên thiết bị địa phương gặp phải những khó khăn. Các dự đoán trực tuyến, quan trọng cho việc xác định nơ-ron hoạt động, tiêu thụ đáng kể bộ nhớ GPU. Khung PowerInfer sử dụng một phương pháp thích ứng để xây dựng các dự đoán nhỏ cho các lớp có độ lệch và độ 稀疎 cao hơn, duy trì độ chính xác trong khi giảm kích thước. Ngoài ra, khung LLM yêu cầu các toán tử thưa thớt chuyên dụng. Khung PowerInfer sử dụng các toán tử thưa thớt nhận thức nơ-ron, trực tiếp giao tiếp với nơ-ron, loại bỏ nhu cầu chuyển đổi định dạng thưa thớt cụ thể trong thời gian chạy.
Cuối cùng, việc đặt nơ-ron hoạt động giữa CPU và GPU một cách tối ưu là một thách thức. Khung PowerInfer sử dụng một giai đoạn ngoại tuyến để tạo ra một chính sách đặt nơ-ron, đo lường tác động của mỗi nơ-ron đối với kết quả suy luận LLM và định hình nó như một vấn đề tuyến tính整数.
Cấu trúc và Phương pháp
Hình dưới đây mô tả cấu trúc của khung PowerInfer, bao gồm các thành phần ngoại tuyến và trực tuyến trong đường ống.

Nhờ sự thay đổi được quan sát trong các thuộc tính định vị giữa các mô hình ngôn ngữ lớn, thành phần ngoại tuyến tạo hồ sơ định vị của khung LLM, cho phép nó phân biệt giữa nơ-ron nóng và lạnh. Mặt khác, trong giai đoạn ngoại tuyến, hai loại nơ-ron được tải bởi động cơ suy luận vào cả CPU và GPU, phục vụ yêu cầu LLM trong thời gian chạy với độ trễ thấp.
Giai đoạn Ngoại tuyến: Bộ giải quyết Chính sách và Trình tạo hồ sơ LLM
Trong giai đoạn ngoại tuyến, thành phần tạo hồ sơ LLM sử dụng yêu cầu được dẫn xuất từ tập dữ liệu chung để thu thập dữ liệu hoạt động từ quá trình suy luận. Trong bước đầu tiên, nó theo dõi hoạt động của nơ-ron trên tất cả các lớp trong khung, và sau đó sử dụng thành phần bộ giải quyết chính sách để phân loại nơ-ron thành nóng hoặc lạnh. Mục tiêu chính của bộ giải quyết chính sách là phân bổ nơ-ron được kích hoạt thường xuyên hơn cho các lớp GPU, trong khi phân bổ phần còn lại cho các lớp CPU. Trong giai đoạn thứ hai, thành phần bộ giải quyết chính sách sử dụng các chỉ số tác động nơ-ron và thông số phần cứng để cân bằng tải công việc giữa các lớp, và tối đa hóa chỉ số tác động của GPU cho nơ-ron bằng cách sử dụng lập trình tuyến tính整数.
Giai đoạn Trực tuyến: Động cơ Suy luận LLM Nhận thức Nơ-ron
Khi giai đoạn ngoại tuyến được thực hiện thành công, khung tiến hành thực hiện giai đoạn trực tuyến. Trong bước thứ ba của quá trình, động cơ trực tuyến gán nơ-ron nóng và lạnh cho các đơn vị xử lý tương ứng trước khi xử lý yêu cầu người dùng, tùy thuộc vào đầu ra của bộ giải quyết chính sách ngoại tuyến. Trong thời gian chạy, và trong bước thứ tư, động cơ trực tuyến quản lý tính toán GPU-CPU bằng cách tạo ra các trình thực hiện CPU và GPU, là các luồng chạy trên phía CPU. Động cơ sau đó dự đoán nơ-ron được kích hoạt và bỏ qua nơ-ron không được kích hoạt. Nơ-ron được kích hoạt sau đó được tải trước vào GPU để xử lý. Trong khi đó, CPU tính toán và chuyển kết quả cho nơ-ron của nó để tích hợp với GPU. Động cơ trực tuyến có thể tập trung vào các hàng và cột riêng lẻ trong các ma trận vì nó sử dụng các toán tử thưa thớt nhận thức nơ-ron trên cả CPU và GPU.

Dự đoán Thưa thớt Thích ứng
Khái niệm chính đằng sau việc giảm tải tính toán bằng động cơ suy luận trực tuyến trong khung PowerInfer là nó chỉ xử lý nơ-ron mà nó dự đoán sẽ được kích hoạt. Thông thường, trong mỗi lớp Chuyển đổi, khung sử dụng hai dự đoán khác nhau để dự đoán hoạt động của nơ-ron trong các khối MLP và tự chú ý, kết quả là tính toán suy luận bị giới hạn ở nơ-ron được dự đoán là hoạt động. Tuy nhiên, việc thiết kế dự đoán hiệu quả cho triển khai địa phương là khó khăn do số lượng tài nguyên hạn chế làm cho việc cân bằng giữa kích thước mô hình và độ chính xác dự đoán trở nên khó khăn. Vì những dự đoán này được triển khai thường xuyên bởi khung để dự đoán nơ-ron hoạt động, chúng cần được lưu trữ trong GPU để cho phép truy cập nhanh hơn. Tuy nhiên, khung thường triển khai một số lượng lớn dự đoán chiếm bộ nhớ đáng kể, thậm chí là bộ nhớ cần thiết để lưu trữ tham số LLM.
Hơn nữa, kích thước của dự đoán thường được xác định bởi hai yếu tố: Độ lệch nội bộ và Độ thưa thớt của các lớp LLM.

Để tối ưu hóa cho những yếu tố này, khung PowerInfer sử dụng một phương pháp đào tạo lặp lại cho mỗi dự đoán trong lớp Chuyển đổi mà không có kích thước cố định. Trong bước đầu tiên của phương pháp đào tạo này, kích thước của mô hình cơ sở được thiết lập dựa trên hồ sơ thưa thớt của mô hình, và kích thước của mô hình được điều chỉnh lặp lại bằng cách tính đến độ lệch hoạt động nội bộ để duy trì độ chính xác.
Đặt vị trí và Quản lý Nơ-ron
Như đã đề cập trước đó, trong khi thành phần bộ giải quyết chính sách ngoại tuyến xác định chính sách đặt nơ-ron, thành phần động cơ suy luận trực tuyến tải mô hình vào bộ nhớ GPU và CPU theo chính sách được tạo. Đối với mỗi lớp có thể có nhiều ma trận trọng số, khung PowerInfer gán mỗi nơ-ron cho CPU hoặc GPU dựa trên việc nơ-ron đó có được kích hoạt nóng hay không. Đảm bảo tính toán chính xác của nơ-ron phân đoạn trong trình tự xác định là điều cần thiết cho kết quả chính xác. Để giải quyết vấn đề này, khung PowerInfer tạo ra hai bảng nơ-ron: một trong bộ nhớ GPU và một trong bộ nhớ CPU, với mỗi bảng liên kết từng nơ-ron với vị trí ban đầu của nó trong ma trận.
Toán tử Nhận thức Nơ-ron
Nhờ sự thưa thớt hoạt động được quan sát trong các mô hình ngôn ngữ lớn, nơ-ron không hoạt động và trọng số của chúng có thể bị bỏ qua bởi các phép toán nhân ma trận, từ đó tạo ra nhu cầu sử dụng các toán tử thưa thớt. Thay vì sử dụng các toán tử thưa thớt có nhiều hạn chế, khung PowerInfer sử dụng các toán tử nhận thức nơ-ron, trực tiếp giao tiếp với nơ-ron và trọng số của chúng trên GPU và CPU mà không cần chuyển đổi sang định dạng dày trong thời gian chạy. Các toán tử nhận thức nơ-ron khác với các toán tử thưa thớt truyền thống ở chỗ chúng tập trung vào các vectơ hàng và cột riêng lẻ trong một ma trận duy nhất thay vì tập trung vào toàn bộ ma trận.
Chính sách Đặt vị trí Nơ-ron
Để khai thác khả năng tính toán của CPU và GPU, thành phần ngoại tuyến trong khung PowerInfer tạo ra một chính sách đặt vị trí, hướng dẫn khung khi phân bổ nơ-ron cho CPU hoặc GPU. Bộ giải quyết chính sách tạo ra chính sách này và kiểm soát việc đặt vị trí nơ-ron trong mỗi lớp, giúp xác định tải công việc tính toán cho từng đơn vị xử lý. Khi tạo ra chính sách đặt vị trí, bộ giải quyết chính sách xem xét các yếu tố khác nhau, bao gồm tần suất hoạt động của mỗi nơ-ron, chi phí truyền thông và khả năng tính toán như băng thông và kích thước bộ nhớ của từng đơn vị xử lý.
Kết quả và Triển khai
Để chứng minh khả năng tổng quát hóa của khung PowerInfer trên các thiết bị với các cấu hình phần cứng khác nhau, các thí nghiệm được thực hiện trên hai máy tính cá nhân riêng biệt: một được trang bị bộ xử lý Intel i9-13900K, GPU NVIDIA RTX 4090 và 192 GB bộ nhớ chủ, trong khi máy còn lại hoạt động trên bộ xử lý Intel i7-12700K, GPU NVIDIA RTX 2080Ti và 64 GB bộ nhớ chủ.
Hiệu suất từ đầu đến cuối của khung PowerInfer được so sánh với llama.cpp với kích thước lô là 1 và cài đặt triển khai mặc định. Khung sau đó lấy mẫu các yêu cầu từ tập dữ liệu ChatGPT và Alpaca, cho thấy sự thay đổi về độ dài trong đầu vào và đầu ra đối thoại thực tế. Hình dưới đây minh họa tốc độ tạo ra cho các mô hình khác nhau.

Như có thể quan sát được, khung PowerInfer tạo ra 8,32 token mỗi giây và đạt tới 16 token được tạo mỗi giây, vượt trội so với khung llama.cpp với một khoảng cách đáng kể. Hơn nữa, khi số lượng token đầu ra tăng lên, hiệu suất của khung PowerInfer cũng được cải thiện vì giai đoạn tạo ra ảnh hưởng đáng kể đến thời gian suy luận tổng thể.

Hơn nữa, như có thể quan sát được trong hình trên, khung PowerInfer vượt trội so với khung llama.cpp trên máy tính cá nhân cấp thấp với tốc độ tạo ra đỉnh là 7 token mỗi giây và tốc độ tạo ra token trung bình là 5 token mỗi giây.

Hình trên minh họa sự phân bố tải nơ-ron giữa GPU và CPU cho cả hai khung. Như có thể thấy, khung PowerInfer tăng đáng kể tỷ lệ tải nơ-ron của GPU, từ 20 lên 70%.

Hình trên so sánh hiệu suất của cả hai khung trên hai máy tính với các thông số kỹ thuật khác nhau. Như có thể thấy, khung PowerInfer nhất quán cung cấp tốc độ tạo ra token đầu ra cao khi so sánh với khung llama.cpp.
Suy nghĩ Cuối cùng
Trong bài viết này, chúng ta đã thảo luận về PowerInfer, một động cơ suy luận LLM tốc độ cao cho máy tính tiêu chuẩn được trang bị một GPU tiêu dùng duy nhất. Tại cốt lõi, khung PowerInfer cố gắng khai thác sự định vị cao trong suy luận LLM, một phương pháp được đặc trưng bởi phân bố công suất của hoạt động nơ-ron. Khung PowerInfer là một hệ thống can thiệp nhanh được thiết kế cho các mô hình ngôn ngữ lớn, sử dụng các dự đoán thích ứng và toán tử nhận thức nơ-ron để kích hoạt nơ-ron và tính toán thưa thớt.












