Tối ưu mô hình ngôn ngữ lớn với llama.cpp và chạy trên … điện thoại?

 

1. Giới thiệu:

Các mô hình ngôn ngữ lớn (LLMs) đang làm thay đổi nhiều ngành công nghiệp. Từ các chatbot hỗ trợ khách hàng đến các công cụ phân tích dữ liệu tinh vi, khả năng của công nghệ mạnh mẽ này đang thay đổi cảnh quan của tương tác kỹ thuật số và tự động hóa.

Hình 1. Mô hình ngôn ngữ lớn đang là xu hướng công nghệ hiện đại. Nguồn ảnh.

 

Tuy nhiên, ứng dụng thực tế của các LLMs có thể bị hạn chế bởi nhu cầu về máy tính công suất cao hoặc sự cần thiết cho thời gian phản hồi nhanh. Các mô hình này thường yêu cầu phần cứng tiên tiến, điều này có thể làm khó khăn trong việc áp dụng chúng trong môi trường thực tế.

 

 

Hình 2. Triển khai mô hình LLaMa 65.2B yêu cầu tới 260.8 GB RAM. Nguồn.

Trong bối cảnh đó, một nhóm nghiên cứu đã viết lại code inference của LLaMa với ngôn ngữ C++, trong đó gồm nhiều kỹ thuật tối ưu do Facebook Meta phát triển. Đó gọi là llama.cpp [1], với những khả năng đáng kinh ngạc:

  • Chạy mô hình 7B trên điện thoại Pixel 5 với tốc độ 1 token / s [2]
  • Chạy mô hình 7B trên Macbook M2 Pro với tốc độ 16 token / s [3]
  • Thậm chí chạy mô hình 7B trên Raspberry Pi 4GB RAM với tốc độ 0.1 token / s [4]

 

2. llama.cpp 

LLaMa.cpp được phát triển bởi Georgi Gerganov. Nó thực hiện kiến trúc LLaMa của Meta trong C/C++ hiệu quả, và đây là một trong những cộng đồng mã nguồn mở năng động nhất xung quanh suy luận LLM với hơn 400 người đóng góp, hơn 58.000 sao trên kho lưu trữ GitHub chính thức với những khả năng:

  • Khả năng tương thích cao: Thiết kế Llama.cpp như một thư viện C++ ưu tiên CPU giảm thiểu độ phức tạp hơn và giúp tích hợp dễ dàng vào các môi trường lập trình khác. Sự tương thích rộng rãi này đã thúc đẩy việc áp dụng nó trên nhiều nền tảng khác nhau.
  • Tích hợp đa dạng tính năng: Đóng vai trò như một kho lưu trữ cho các tính năng low-level quan trọng, Llama.cpp phản ánh cách tiếp cận của LangChain đối với các khả năng high-level, đơn giản hóa quá trình phát triển mặc dù có thể gặp thách thức về khả năng mở rộng trong tương lai.
  • Tối ưu hóa tập Trung: Llama.cpp tập trung vào một kiến trúc mô hình duy nhất (single model architecture), cho phép cải tiến chính xác và hiệu quả. Cam kết của nó đối với các mô hình Llama thông qua các định dạng như GGML và GGUF đã dẫn đến những lợi ích về hiệu quả đáng kể.

 

Trong đó, điểm đặc biệt chính của llama.cpp là phương thức lượng tử hóa mô hình (model quantization):

  • Lượng tử hóa mô hình là một kỹ thuật tối ưu hóa được sử dụng trong trí tuệ nhân tạo (AI) và học máy để giảm độ chính xác của các số biểu diễn trọng số và thông tin liên quan trong một mô hình. Mục đích chính là làm giảm kích thước của mô hình và tăng tốc độ tính toán mà không làm mất đi nhiều hiệu suất. Lượng tử hóa thường bao gồm việc giảm độ chính xác từ dạng số dấu phẩy động (float) sang các dạng số nguyên (int), chẳng hạn như từ float32 xuống int8. Điều này giúp mô hình nhanh hơn, nhẹ hơn và tiêu thụ ít tài nguyên hơn, đặc biệt phù hợp với các thiết bị có tài nguyên hạn chế như điện thoại thông minh hoặc thiết bị IoT.
  • Trong llama.cpp, mô hình ban đầu được lượng tử hóa theo định dạng GGML, sau đó để cải thiện độ tương thích, đã phát triển nên dạng lượng tử GGUF. 

 

Hình 3, 4: Việc lượng tử hóa mô hình giúp giảm thiểu lượng RAM cần thiết và tốc độ thực thi trong quá trình triển khai LLM. Nguồn.

 

 

Để bắt đầu sử dụng llama.cpp, hãy đọc thêm những nguồn tài liệu sau nhé:

 

 

NGUỒN THAM KHẢO

[1] https://github.com/ggerganov/llama.cpp

[2] https://twitter.com/rgerganov/status/1635604465603473408

[3] https://simonwillison.net/2023/Mar/11/llama/

[4] https://twitter.com/miolini/status/1634982361757790209