Image default
Máy Tính

Kinh nghiệm tự host LLM: 7 bài học đắt giá để tối ưu mô hình ngôn ngữ lớn tại nhà

Có rất nhiều dịch vụ đám mây cung cấp khả năng vận hành các mô hình ngôn ngữ mạnh mẽ (LLM), nhưng giống như bất kỳ dịch vụ đám mây nào, hai vấn đề nhức nhối thường phát sinh ngay lập tức: thu thập dữ liệu và truy cập không nhất quán. Với tư cách là một người đam mê công nghệ và luôn yêu thích việc thử nghiệm các LLM tự host, tôi nhận thấy công nghệ này đã có những bước tiến vượt bậc kể từ khi có thể chạy các mô hình mạnh mẽ, hoàn toàn miễn phí trên một card đồ họa tiêu dùng thông thường. Tất nhiên, những gì bạn thực sự có thể chạy sẽ khác nhau rất nhiều dựa trên cấu hình phần cứng của bạn, nhưng sự thật là có rất nhiều lựa chọn ngoài kia.

Hiện tại, tôi đang vận hành các mô hình Gemma 27B IT QAT và Qwen 2.5 Coder 32B trên chiếc AMD Radeon RX 7900 XTX của mình, đồng thời thử nghiệm các mô hình nhỏ hơn để kiểm tra cục bộ, như Deepseek R1 0528 Qwen 3 8B. Có rất nhiều điều tôi đã học được theo thời gian, và khi tự mình khám phá, có vô số bài học quý giá mà tôi ước mình đã biết trước khi bắt đầu, vì điều đó đã giúp tôi tiết kiệm rất nhiều thời gian hoặc nâng cấp thiết lập nhanh hơn. Đây là những bài học quan trọng nhất mà tôi đúc rút được, và trong khi một số hướng đến những người mới bắt đầu, thì một số khác lại là những điều mà ngay cả những chuyên gia tự host dày dặn kinh nghiệm cũng có thể chưa biết đến.

1. Kích thước mô hình và VRAM không phải là tất cả

Băng thông bộ nhớ là yếu tố quan trọng

Bài học đầu tiên tôi ước mình biết sớm hơn là kích thước mô hình không chỉ đơn thuần nói lên sự “thông minh” của một mô hình, ngay cả khi các tham số của mô hình có mối liên hệ khá tuyến tính với khả năng của nó. Tuy nhiên, có một khía cạnh khác cần xem xét, đó là số lượng token được tạo ra mỗi giây. Băng thông bộ nhớ có thể đóng một vai trò lớn ở đây, và đó là lý do tại sao RTX 3090 vẫn là một trong những GPU cấp tiêu dùng tốt nhất để suy luận cục bộ bất chấp sự ra mắt của 4090 và 5090. Điều này là nhờ băng thông bộ nhớ cao và chi phí thấp hơn so với các card RTX xx90 mới hơn đã được phát hành kể từ đó. Những card mới hơn này thực hiện tốt hơn RTX 3090 ở nhiều khía cạnh, nhưng không ở mức độ bạn mong đợi khi so sánh chúng trong suy luận chuyên biệt. Để tham khảo, RTX 5090 có thể đạt hiệu suất nhanh gấp hai đến ba lần RTX 3090 (mặc dù nó cũng có 32GB VRAM), nhưng RTX 4090 so với RTX 3090 chỉ mang lại một sự nâng cấp nhỏ khi nói đến các mô hình ngôn ngữ lớn.

Mô hình DeepSeek LLM đang chạy trên thiết bị nhúng Radxa Orion O6 sử dụng Ollama, thể hiện khả năng xử lý tại biên.Mô hình DeepSeek LLM đang chạy trên thiết bị nhúng Radxa Orion O6 sử dụng Ollama, thể hiện khả năng xử lý tại biên.

Có một phần khác của phương trình cần xem xét, đó là cửa sổ ngữ cảnh (context window). Các mô hình ngôn ngữ tính toán “vị trí” của chúng bằng cách sử dụng RoPE (Rotary Positional Embeddings) được mã hóa trong các transformer, và những thứ này hoạt động giống như một thước kẻ toán học được đặt trên chuỗi. Tăng độ dài của thước kẻ này (cửa sổ ngữ cảnh) có nghĩa là nhiều phép nhân hơn trong mỗi lần truyền tiến và một bộ đệm khóa-giá trị lớn hơn. Việc tăng gấp đôi độ dài ngữ cảnh (ví dụ: từ 8K token lên 16K) có thể làm giảm hiệu suất một nửa. Có các phương pháp mở rộng RoPE giúp mở rộng điều này hơn nữa (như NTK hoặc yaRN), nhưng việc mở rộng đó có thể làm mờ các chi tiết, làm giảm chất lượng phản hồi khi cuộc trò chuyện kéo dài.

Có những cách tốt hơn để khắc phục điều này cho phép bạn cung cấp nhiều thông tin hơn mà không làm hết cửa sổ ngữ cảnh của mình, nhưng mặc dù việc tăng độ dài ngữ cảnh để cố gắng cung cấp cho LLM của bạn khả năng ghi nhớ siêu phàm là điều hấp dẫn, nhưng nó đi kèm với một cái giá. Hiệu suất sẽ nhanh chóng giảm sút theo thời gian, và nếu bạn tràn VRAM và bắt đầu sử dụng RAM hệ thống, mọi thứ sẽ chỉ trở nên tồi tệ hơn.

2. Lượng tử hóa (Quantization) là bạn của bạn

Giảm mức sử dụng bộ nhớ với tác động không đáng kể đến hiệu suất

Lượng tử hóa là một trong những điều quan trọng nhất cần tìm hiểu khi nói đến các LLM tự host, vì nó quyết định rất nhiều thứ. Về cơ bản, nó nén các số dấu phẩy động 16 bit hoặc 32 bit liên tục tạo nên một mạng thần kinh thành ít bit hơn, lưu trữ các giá trị gần đúng đủ tốt cho suy luận. Trên thực tế, lượng tử hóa số nguyên 8 bit (INT8) khá phổ biến vào thời điểm này và nó ánh xạ phạm vi của từng kênh đến 256 mức rời rạc tại thời gian chạy và thường có thể chạy mà không cần huấn luyện lại. Nói cách khác, hãy lấy phiên bản tham số 671B của mô hình R1 của DeepSeek, cụ thể là phiên bản lượng tử hóa 4 bit Q4_K_M. Có rất ít chất lượng bị mất so với mô hình kích thước đầy đủ không có bất kỳ lượng tử hóa nào, nhưng việc giảm đáng kể dung lượng bộ nhớ là một điều lớn. Đầu tiên, đây là cách đọc các ký hiệu đó:

  • Qx: Đề cập đến mức độ lượng tử hóa. Đây là lượng bộ nhớ được sử dụng để lưu trữ trọng số của mô hình.
  • K: Đề cập đến các sơ đồ trong họ k-quant (ban đầu là “k-means”/lượng tử hóa cải tiến) trong llama.cpp sử dụng các khối được nhóm với dữ liệu tỷ lệ và tối thiểu bổ sung để có độ chính xác tốt hơn.
  • M: Đề cập đến các tensor nào nhận các định dạng con có độ chính xác cao hơn, và có thể là S, M hoặc L, có nghĩa là nhỏ (small), trung bình (medium) hoặc lớn (large).

Mô hình DeepSeek LLM đang hoạt động trên máy Mac Studio với chip M3 Ultra, minh họa việc chạy LLM trên phần cứng cao cấp.Mô hình DeepSeek LLM đang hoạt động trên máy Mac Studio với chip M3 Ultra, minh họa việc chạy LLM trên phần cứng cao cấp.

Vì vậy, phiên bản Q4_K của mô hình Deepseek R1 gốc (không phải 0528) có dung lượng khoảng 400GB. Còn Q6_K và Q8_0 thì sao? Chúng có dung lượng lần lượt khoảng 550GB và 713GB, nhưng sự khác biệt về hiệu suất kỹ thuật giữa chúng là rất nhỏ. Điều này có nghĩa là một mô hình về mặt lý thuyết sẽ yêu cầu 713GB RAM để chạy có thể chạy trong một máy có ít hơn 500GB, đây là một điều lớn. Chuyển từ Q8 sang Q4 sẽ thấy mức sử dụng bộ nhớ giảm gần một nửa, như chúng ta có thể thấy ở trên, nhưng nhờ công nghệ nền tảng cho việc triển khai các mô hình ngôn ngữ cục bộ, nó vẫn gần như tốt. Về cơ bản, nó sử dụng một tensor dấu phẩy động nén cùng với siêu dữ liệu, có nghĩa là nó có thể tái tạo các giá trị tại thời gian chạy, dẫn đến các đầu ra tương tự như một mô hình lớn hơn với bộ nhớ thấp hơn nhiều.

Tuy nhiên, có những hạn chế đối với việc lượng tử hóa mạnh mẽ, chẳng hạn như lỗi tái tạo cao hơn. Điều này có nghĩa là các từ hiếm hoặc lý luận số tinh tế có thể thất bại khi mọi phép toán đều được làm tròn. Mặc dù vậy, việc tiết kiệm VRAM và băng thông theo cấp số nhân thường lớn hơn việc mất độ chính xác đôi khi, đặc biệt đối với việc sử dụng “cơ bản” hơn, và sự đánh đổi hiệu suất rất nhỏ sẽ giúp bạn có thể chạy một mô hình lớn hơn so với cách khác. Hơn nữa, gần như chắc chắn rằng mô hình nhỏ hơn sẽ có hiệu suất kém hơn ở tất cả các hạng mục so với phiên bản lượng tử hóa của mô hình lớn hơn.

3. Đừng quên tính đến chi phí điện

Chưa kể chi phí phần cứng

Mặc dù một LLM tự host có vẻ là một cách tiết kiệm chi phí để có được khả năng suy luận cục bộ tốt, nhưng nhiều người quên đi hóa đơn tiền điện liên quan và các chi phí khác có thể tăng lên khi triển khai một LLM được host cục bộ. RTX 4090 có TDP 450W và chi phí điện trung bình ở Hoa Kỳ là 0.16 USD mỗi kWh. Điều đó có nghĩa là bạn có thể phải trả hóa đơn tiền điện hơn 50 USD mỗi tháng nếu bạn chạy nó ở công suất tối đa. Rõ ràng, hầu hết mọi người sẽ không làm vậy, nhưng ngay cả việc sử dụng nó thường xuyên trong một ngày cũng có thể tăng lên nhanh chóng, và có thể đắt hơn so với việc sử dụng API Gemini hoặc OpenAI để truy cập các mô hình mạnh hơn đáng kể.

Cận cảnh bộ nguồn (PSU) bên trong một máy tính gaming, nhấn mạnh tầm quan trọng của nguồn điện ổn định cho hệ thống tự host LLM.Cận cảnh bộ nguồn (PSU) bên trong một máy tính gaming, nhấn mạnh tầm quan trọng của nguồn điện ổn định cho hệ thống tự host LLM.

Điều này thậm chí còn trở nên tồi tệ hơn nếu bạn muốn sử dụng nhiều GPU để suy luận, và điều đó chưa kể đến phân phối điện mà bạn sẽ cần tính đến, hệ thống làm mát tùy chỉnh và bất kỳ phần cứng nào khác mà bạn cần mua trên đường đi. Tôi đã thấy mọi người nói rằng họ có thể tiết kiệm tiền bằng cách tự host mô hình của riêng mình thay vì trả tiền cho ChatGPT Plus hoặc cấp độ AI của Google One, và điều đó có lẽ đúng trên bề mặt, nhưng hãy cộng thêm chi phí của GPU và các phần cứng khác, và bạn có thể thấy mình chi tiêu nhiều hơn về lâu dài.

4. Bạn không chỉ cần tập trung vào Nvidia

Intel và AMD cũng có thể rất tuyệt

Mặc dù đây là một sự phát triển gần đây hơn, Nvidia không phải là người chơi duy nhất trong cuộc chơi này khi nói đến các LLM tự host. Như tôi đã đề cập, tôi sử dụng AMD Radeon RX 7900 XTX cho các mô hình tự host của mình, và tôi cũng đã thử nghiệm Intel Arc A770 với 16GB VRAM của nó. AMD được hỗ trợ chính thức trong các công cụ như Ollama, và mặc dù cần nhiều công sức hơn một chút, bạn cũng có thể sử dụng GPU Intel thông qua IPEX LLM fork của Ollama.

Card đồ họa Intel Arc A770 với ánh sáng neon, biểu tượng cho sự lựa chọn thay thế mạnh mẽ cho GPU Nvidia trong việc chạy LLM cục bộ.Card đồ họa Intel Arc A770 với ánh sáng neon, biểu tượng cho sự lựa chọn thay thế mạnh mẽ cho GPU Nvidia trong việc chạy LLM cục bộ.

Mặc dù Nvidia chắc chắn thống trị khi nói đến khả năng tạo token trên giây thuần túy, nhưng thực tế là GPU của Nvidia rất được săn đón đến nỗi bạn có thể không mua được một card Nvidia cao cấp cho hệ thống của mình. Một chiếc A770 sẽ mang lại hiệu suất khá tốt khi nói đến các mô hình ngôn ngữ, và tôi đã rất hài lòng với chiếc 7900 XTX của mình. Ngay cả với mô hình Gemma 27B mà tôi đang chạy, tôi vẫn thấy khả năng tạo token hơn 30 token mỗi giây. Hơn nữa, nó có 24GB VRAM, chỉ bị vượt qua bởi RTX 5090 và ngang bằng với RTX 4090 trong khi có giá thấp hơn nhiều.

Nvidia chắc chắn là lựa chọn tốt hơn, nhưng nếu một card Nvidia là không thể, hãy xem xét AMD và Intel, và nghiên cứu hiệu suất cho các loại mô hình bạn muốn chạy và xem liệu có card nào của họ phù hợp với nhu cầu của bạn không. Bạn có thể sẽ ngạc nhiên.

5. Kỹ thuật prompt và sử dụng công cụ là những cách tuyệt vời để tận dụng tối đa mô hình nhỏ

Đừng chỉ cố gắng “brute-force” với nhiều tham số hơn

Nếu bạn đang chạy một mô hình nhỏ hơn và muốn có hiệu suất tốt hơn từ nó, đừng chỉ thay đổi mô hình với hy vọng rằng một vài tỷ tham số bổ sung sẽ giải quyết tất cả các vấn đề của bạn. Thay vào đó, hãy thử một vài mẹo, và điều đầu tiên là suy nghĩ lại về các prompt của bạn. Một prompt ngắn gọn, trực tiếp và toàn diện sẽ mang lại kết quả tốt hơn so với một prompt mơ hồ, mở rộng. Chỉ vì bạn đã quen với Gemini, ChatGPT hoặc Claude, những mô hình có thể hoạt động tốt với các prompt mơ hồ, không có nghĩa là bạn có thể tiếp cận một mô hình nhỏ hơn đáng kể đang chạy trên máy tính hoặc máy chủ gia đình của bạn theo cùng một cách. Nếu bạn trực tiếp và đi thẳng vào vấn đề, các mô hình của bạn có thể sẽ hoạt động tốt hơn đáng kể, vì vậy hãy suy nghĩ lại về các prompt của bạn nếu các câu trả lời bạn nhận được không đủ tốt.

Mẹo tiếp theo là tận dụng RAG (Retrieval Augmented Generation). Điều này cung cấp cho mô hình của bạn một tập dữ liệu mà nó có thể dựa vào để đưa ra câu trả lời, dẫn đến độ chính xác cao hơn trong các phản hồi mà không cần tải toàn bộ độ dài ngữ cảnh của mô hình với mọi thông tin có thể liên quan. Vì nó kéo dữ liệu thực tế tồn tại trên thiết bị, nó cũng giảm xu hướng “ảo giác”, vốn cũng có thể là một vấn đề trên các mô hình nhỏ hơn. Rõ ràng nó sẽ không giải quyết mọi vấn đề (cũng như không cung cấp cho mô hình 7 tỷ tham số tất cả các khả năng của mô hình 70 tỷ tham số), nhưng nó có thể cải thiện đáng kể hiệu suất nếu mục tiêu chính của bạn khi sử dụng LLM là truy vấn dữ liệu. Chat with RTX của Nvidia là một minh chứng tuyệt vời về cách RAG có thể tăng tốc suy luận cục bộ.

Mẹo cuối cùng là tận dụng các công cụ (tools). Các công cụ trong bối cảnh của một LLM là các tiện ích phần mềm được thiết kế để được mô hình vận hành và có thể được gọi khi cần thiết. Ví dụ, JSON Toolkit cung cấp cho một LLM khả năng khám phá một phản hồi JSON lặp đi lặp lại mà không lãng phí ngữ cảnh quý giá với dữ liệu vô dụng đối với truy vấn thực tế đã được cung cấp. Điều tương tự cũng xảy ra với công cụ Pandas Dataframe, vì thay vì tải toàn bộ dataframe vào ngữ cảnh, LLM có thể sử dụng công cụ Pandas Dataframe để chạy mã Python sẽ tìm ra câu trả lời, bỏ qua nhu cầu xem xét tất cả. Có rất nhiều loại công cụ khác nhau mà bạn có thể sử dụng, và trong nhiều trường hợp, việc “tăng cường trí thông minh” bằng cách đơn giản sử dụng một mô hình lớn hơn có thể không cần thiết.

6. Mô hình Mixture-of-Experts (MoE) cho phép chạy mô hình lớn hơn trong hạn chế VRAM

Mặc dù cần một số tinh chỉnh ban đầu

Các mô hình ngôn ngữ Mixture-of-Experts (MoE) tương đối mới, nhưng khái niệm này trong AI đã có từ hàng thập kỷ và đã được sử dụng trong bối cảnh học sâu cho nghiên cứu và tính toán. Các mô hình này về cơ bản phân vùng một mạng lưới “chuyên gia” với một cổng nhẹ quyết định chuyên gia nào xử lý tác vụ nào. Điều này không có nghĩa là dung lượng bộ nhớ của nó ít hơn so với một mô hình khác có cùng lượng tử hóa và số lượng tham số. Tuy nhiên, điều đó có nghĩa là bạn có thể tinh chỉnh việc tải mô hình để các tensor ít được truy cập hơn được offload sang RAM hệ thống, chừa chỗ trong VRAM của GPU cho các tensor mà chúng ta muốn truy cập thường xuyên.

Màn hình hiển thị phản hồi từ mô hình Mistral LLM chạy trên Raspberry Pi 5, minh họa khả năng chạy AI trên các thiết bị tài nguyên hạn chế.Màn hình hiển thị phản hồi từ mô hình Mistral LLM chạy trên Raspberry Pi 5, minh họa khả năng chạy AI trên các thiết bị tài nguyên hạn chế.

Đây là một chủ đề nâng cao hơn đáng kể, và không thực sự là một mẹo mà những người mới nên cố gắng chú ý ngay lập tức. Tuy nhiên, điều quan trọng là phải biết rằng nếu bạn thấy mình bị giới hạn bởi VRAM, có những giải pháp có thể giảm tác động đến hiệu suất khi nói đến các mô hình MoE. Cũng có rất nhiều mô hình MoE khác nhau ngoài kia, và một khi bạn đã quen thuộc với công cụ lựa chọn của mình, bạn có thể bắt đầu khám phá tùy chọn này nhiều hơn để chạy các mô hình lớn hơn nữa trên máy của mình theo cách tận dụng tối đa VRAM và offload các phần ít được truy cập nhất của mô hình sang RAM hệ thống.

7. Bắt đầu một cách đơn giản

LM Studio là một khởi đầu tuyệt vời

Thay vì đầu tư toàn lực vào việc thiết lập các công cụ như Ollama và Open Web UI, vốn có thể gây nản lòng cho người mới tự host, hãy sử dụng một giao diện đồ họa như LM Studio để bắt đầu. Nó siêu đơn giản: sử dụng tính năng tìm kiếm tích hợp để tìm một mô hình, tải xuống và chạy nó. Bạn không cần thực hiện bất kỳ cấu hình nào, và nó là một giải pháp “cắm và chạy” tương đương khi nói đến LLM. Nó đi kèm với tất cả các thư viện bạn cần để tận dụng tối đa phần cứng của mình và hoạt động trên Windows, Linux và macOS, do đó nó loại bỏ tất cả những rắc rối khi phải tìm hiểu chính xác những gì bạn cần để một LLM chạy trên hệ thống của bạn.

Tuyệt vời hơn nữa, cho mục đích phát triển, LM Studio có thể host một máy chủ tương thích OpenAI ở chế độ nền, vì vậy bạn có thể sử dụng nó để kiểm tra các ứng dụng hoặc công cụ của riêng mình hiểu API OpenAI một khi bạn trỏ chúng đến điểm cuối được host cục bộ của mình. Nó dễ dàng, miễn phí và là một cách tuyệt vời để bắt đầu và có cảm giác về việc tự host LLM trước khi triển khai nó ở nơi khác. Tất cả các cài đặt chính mà bạn muốn sửa đổi, từ system prompt đến độ dài ngữ cảnh, đều có thể sửa đổi được, vì vậy đây là một cách tuyệt vời để bắt đầu.

Tóm lại, việc tự host các mô hình ngôn ngữ lớn tại nhà mang lại nhiều lợi ích về quyền riêng tư và khả năng kiểm soát, nhưng cũng đi kèm với những thách thức riêng. Qua 7 bài học đắt giá này, chúng ta đã thấy rằng việc tối ưu LLM không chỉ dừng lại ở kích thước mô hình hay dung lượng VRAM, mà còn bao gồm nhiều yếu tố như băng thông bộ nhớ, chiến lược lượng tử hóa thông minh, cân nhắc chi phí vận hành và khám phá các lựa chọn GPU đa dạng ngoài Nvidia. Đồng thời, kỹ thuật prompt hiệu quả, sử dụng RAG và các công cụ khác có thể nâng cao đáng kể hiệu suất của cả những mô hình nhỏ. Đối với những người muốn thử sức với các mô hình tiên tiến như MoE, cần có sự đầu tư thời gian và kiến thức sâu hơn. Cuối cùng, để bắt đầu hành trình tự host LLM một cách suôn sẻ, các công cụ thân thiện với người dùng như LM Studio là lựa chọn lý tưởng. Hãy áp dụng những kinh nghiệm này để tối ưu hóa trải nghiệm LLM cá nhân của bạn và tận hưởng sức mạnh của trí tuệ nhân tạo ngay trên thiết bị của mình! Chia sẻ những thành tựu hoặc khó khăn của bạn trong phần bình luận bên dưới nhé!

Related posts

5 Ứng Dụng Hàng Đầu Giúp Tự Động Sắp Xếp File Trên Windows 11 Hiệu Quả Nhất

Administrator

Những Điều Màn Hình Cong “Giấu Kín”: Kinh Nghiệm Thực Tế Sau Nhiều Năm Sử Dụng

Administrator

Cách Kiểm Tra Và Khắc Phục Nghẽn Cổ Chai CPU Khi Chơi Game Mà Không Cần Nâng Cấp

Administrator