Thế giới công nghệ ngày càng phát triển với tốc độ chóng mặt, và các mô hình ngôn ngữ lớn (LLM) dựa trên đám mây đã trở thành công cụ không thể thiếu trong nhiều lĩnh vực. Tuy nhiên, như mọi dịch vụ đám mây khác, chúng ta đối mặt với hai vấn đề lớn: thu thập dữ liệu và quyền riêng tư, cùng với việc truy cập nhất quán. Đây chính là lý do tại sao tôi luôn say mê thử nghiệm với các LLM tự host (self-hosted). Thật đáng kinh ngạc khi công nghệ này đã tiến bộ vượt bậc, giờ đây cho phép chạy những mô hình mạnh mẽ và hoàn toàn miễn phí ngay trên một chiếc card đồ họa tiêu dùng thông thường. Tất nhiên, khả năng vận hành sẽ phụ thuộc đáng kể vào cấu hình máy của bạn, nhưng điều đáng mừng là có rất nhiều lựa chọn ngoài kia.
Hiện tại, tôi đang sử dụng 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 như Deepseek R1 0528 Qwen 3 8B cho mục đích kiểm tra cục bộ. Trong suốt hành trình khám phá này, tôi đã học được rất nhiều điều. Có những bài học mà tôi ước mình đã biết ngay từ đầu, bởi chúng sẽ giúp tôi tiết kiệm được rất nhiều thời gian hoặc nâng cấp hệ thống nhanh hơn. Dưới đây là 7 bài học quan trọng nhất mà tôi đã đúc kết được. Một số dành cho những người mới bắt đầu, nhưng cũng có 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.
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 mà 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 “độ thông minh” của nó, mặc dù 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 chúng. 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ớ (memory bandwidth) có thể đóng một vai trò rất lớn ở đây. Đó là lý do tại sao RTX 3090 vẫn là một trong những GPU tiêu dùng tốt nhất cho suy luận cục bộ (local inference) bất chấp sự ra đời của 4090 và 5090. Điều này nhờ vào 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. Những card mới hơn này có hiệu suất tốt hơn RTX 3090 ở nhiều mặt, nhưng không đạt đến mức bạn mong đợi khi so sánh riêng về suy luận. Để tham khảo, 5090 có thể có hiệu suất nhanh hơn từ hai đến ba lần so với 3090 (mặc dù nó cũng có 32GB VRAM), trong khi 4090 so với 3090 chỉ mang lại một nâng cấp nhỏ khi nói đến các mô hình ngôn ngữ lớn.
DeepSeek đang chạy trên Radxa Orion O6
Ngoài ra, còn một phần khác của phương trình cần xem xét: 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. Chúng hoạt động giống như một thước kẻ toán học được đặt trên chuỗi. Tăng chiều dài của thước kẻ này (cửa sổ ngữ cảnh) đồng nghĩa với việc có nhiều phép nhân hơn trong mỗi lần truyền và một bộ đệm key-value lớn hơn. Ví dụ, tăng gấp đôi độ dài ngữ cảnh (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 để mở rộng thêm (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 để cung cấp thêm thông tin mà không cần sử dụng hết cửa sổ ngữ cảnh, nhưng dù rất hấp dẫn khi 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, điều này sẽ phải trả giá. Hiệu suất sẽ nhanh chóng suy giảm theo thời gian, và nếu bạn tràn VRAM và bắt đầu sử dụng RAM hệ thống, tình hình sẽ còn tệ hơn.
2. Lượng Tử Hóa (Quantization) Là Người Bạn Thân Thiết
Giảm Sử Dụng Bộ Nhớ Với Tác Động Hiệu Suất Không Đáng Kể
Lượng tử hóa (quantization) 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 nơ-ron 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 hiện nay, nó ánh xạ dải kênh của từng giá trị thành 256 mức rời rạc trong 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 671B tham số của mô hình R1 của DeepSeek, cụ thể là phiên bản Q4_K_M 4-bit đã được lượng tử hóa. Có rất ít chất lượng bị mất so với mô hình kích thước đầy đủ mà không cần bất kỳ lượng tử hóa nào, nhưng việc giảm dung lượng bộ nhớ lại là một vấn đề lớn. Đây là cách đọc các ký hiệu này:
- Qx: Đây là mức độ lượng tử hóa. Nó cho biết bao nhiêu bộ nhớ được sử dụng để lưu trữ trọng số của mô hình.
- K: Đây là 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 scale và min bổ sung để có độ chính xác tốt hơn.
- M: Điều này đề 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).
DeepSeek đang chạy trên Mac Studio.
Vì vậy, Q4_K của mô hình Deepseek R1 gốc (không phải 0528) có dung lượng khoảng 400GB. Vậy còn Q6_K và Q8_0 thì sao? Chúng có dung lượng khoảng 550GB và 713GB tương ứng, nhưng sự khác biệt về hiệu suất kỹ thuật giữa chúng lại rất nhỏ. Điều này có nghĩa là một mô hình về lý thuyết sẽ yêu cầu 713GB RAM để chạy có thể chạy trong một máy có dung lượng dưới 500GB, đây là một vấn đề lớn. Chuyển từ Q8 sang Q4 sẽ thấy việc sử dụng bộ nhớ giảm gần một nửa, nhưng nhờ công nghệ nền tảng hỗ trợ triển khai các mô hình ngôn ngữ cục bộ, nó vẫn gần như tốt như trước. 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 lại các giá trị trong thời gian chạy, dẫn đến kết quả tương tự như một mô hình lớn hơn nhưng sử dụng ít bộ nhớ hơn nhiều.
Tuy nhiên, có những nhược điểm đối với lượng tử hóa quá mức, 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ố học 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 thỉnh thoảng mất độ chính xác, đặ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 khả năng ban đầu. 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 tệ 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 Và Phần Cứng
Chưa Kể Chi Phí Phần Cứng Ban Đầu
Mặc dù tự host LLM 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 mất các hóa đơn tiền điện và các chi phí khác có thể phát sinh khi triển khai một LLM được host cục bộ. RTX 4090 có TDP là 450W, và chi phí điện trung bình ở Mỹ là 0.16 đô la mỗi kWh. Điều đó có nghĩa là bạn có thể phải trả hơn 50 đô la tiền điện mỗi tháng nếu bạn chạy nó hết công suất. Rõ ràng, hầu hết mọi người sẽ không làm như vậy, nhưng ngay cả việc sử dụng nó thường xuyên trong ngày cũng có thể tăng lên nhanh chóng, và có thể tốn kém hơn so với việc sử dụng API của Gemini hoặc OpenAI để truy cập vào các mô hình mạnh hơn đáng kể.
Ảnh cận cảnh bộ nguồn (PSU) bên trong một máy tính chơi game
Điều này còn trở nên phức tạp hơn nếu bạn muốn sử dụng nhiều GPU cho suy luận, và đó là chưa kể đến việc phân phối điện bạn cần tính đến, hệ thống tản nhiệt tùy chỉnh và bất kỳ phần cứng nào khác bạn cần mua thêm trong quá trình này. Tôi đã thấy nhiều 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 gói 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. Không Chỉ Cần Tập Trung Vào Nvidia
Intel Và AMD Cũng Có Thể Là Lựa Chọn Tuyệt Vời
Mặc dù đây là một sự phát triển tương đối gần đây, Nvidia không phải là người chơi duy nhất trong cuộc chơi tự host LLM nữa. 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 một chút công sức hơn, bạn cũng có thể sử dụng GPU Intel thông qua IPEX LLM fork của Ollama.
Trong khi Nvidia chắc chắn thống trị khi nói đến tốc độ tạo token-per-second thuần túy, 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 tốc độ 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 chi phí thấp hơn nhiều.
Card đồ họa Intel Arc A770.
Nvidia chắc chắn là lựa chọn ưu tiên, nhưng nếu một chiếc card Nvidia nằm ngoài khả năng tài chính của bạn, 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 để 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 đấy.
5. Kỹ Thuật Prompt Và Sử Dụng Công Cụ Để Tận Dụng Mô Hình Nhỏ
Đừng Chỉ Cố Gắng Nâng Cấp Bằng Tham Số Lớn 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 vội đổi mô hình với hy vọng rằng vài tỷ tham số bổ sung sẽ giải quyết mọi vấn đề của bạn. Thay vào đó, đây là một vài lời khuyên, và lời khuyên đầu tiên là hãy xem xét lại 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 một prompt mơ hồ, mở. 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 đề, mô hình của bạn có thể sẽ hoạt động tốt hơn đáng kể, vì vậy hãy xem xét lại các prompt của bạn nếu câu trả lời bạn nhận được không đủ tốt.
Lời khuyên tiếp theo là sử dụng Retrieval Augmented Generation (RAG). Đ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 phải tải toàn bộ độ dài ngữ cảnh của mô hình với mọi thông tin có liên quan tiềm năng. Vì nó lấy dữ liệu từ dữ liệu thực tế tồn tại trên thiết bị, nó cũng làm giảm xu hướng ảo giác (hallucinations), 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 không mang lại cho mô hình 7B tham số tất cả khả năng của mô hình 70B 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 ví dụ tuyệt vời về cách RAG có thể tăng tốc suy luận cục bộ.
Lời khuyên cuối cùng là sử dụng các công cụ (tools). Công cụ trong ngữ cảnh của LLM là các tiện ích phần mềm được thiết kế để 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 LLM khả năng khám phá một phản hồi JSON một cách lặp đi lặp lại mà không lãng phí ngữ cảnh quý giá với dữ liệu vô ích cho truy vấn thực tế được đưa ra. Điều tương tự cũng áp dụng cho công cụ Pandas Dataframe, 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 thấy câu trả lời, bỏ qua việc cần phải xem xét tất cả. Có rất nhiều loại công cụ khác nhau bạn có thể sử dụng, và trong nhiều trường hợp, không cần thiết phải “ép buộc” trí thông minh bằng cách đơn giản sử dụng một mô hình lớn hơn.
6. Mô Hình Mixture of Experts (MoE) Giúp Chạy Mô Hình Lớn Hơn Với VRAM Thấp Hơn
Mặc Dù Cần Một Chút Nỗ Lực Ban Đầu
Các mô hình ngôn ngữ Mixture-of-Experts (MoE) khá mới, nhưng khái niệm trong AI đã có từ hàng thập kỷ trước và đã được sử dụng trong các ngữ cảnh học sâu để nghiên cứu và tính toán. Về cơ bản, các mô hình này phân chia một mạng lưới các “chuyên gia” với một cổng nhẹ quyết định chuyên gia nào xử lý nhiệm vụ nào. Điều này không có nghĩa là dung lượng bộ nhớ của nó ít hơn 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 sao cho các tensor ít được truy cập hơn được giải phóng sang RAM hệ thống, để lại không gian trong VRAM của GPU cho các tensor mà chúng ta thường xuyên truy cập.
Phản hồi của Mistral trên Raspberry Pi 5
Đây là một chủ đề nâng cao hơn đáng kể, và không thực sự là một lời khuyên mà những người mới nên cố gắng làm theo ngay lập tức. Tuy nhiên, thật tốt khi 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 bớt 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à 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 của bạn và giải phóng các phần ít được truy cập nhất của mô hình vào RAM hệ thống.
7. Bắt Đầu Với Cách Đơn Giản Nhất
LM Studio Là Nơi Tuyệt Vời Để Bắt Đầu
Thay vì cố gắng thiết lập tất cả các công cụ phức tạp như Ollama và Open Web UI, vốn có thể gây choáng ngợp 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ó cực kỳ đơn giản; chỉ cầ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ó giống như một giải pháp “plug-and-play” trong thế giới 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, vì vậy nó loại bỏ mọi rắc rối khi phải tìm hiểu chính xác những gì bạn cần để chạy một LLM trên hệ thống của mình.
Tuyệt vời hơn nữa, đối với các nhà 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ó để thử nghiệm các ứng dụng hoặc công cụ của riêng mình mà hiểu API OpenAI khi bạn trỏ chúng đến điểm cuối 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à làm quen với việc tự host LLM trước khi triển khai một mô hình ở 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ể điều chỉnh được, vì vậy đây là một cách tuyệt vời để bắt đầu.
Tự host LLM tại nhà là một hành trình thú vị và đầy thử thách, nhưng với những kinh nghiệm và lời khuyên trên, bạn sẽ có thể bắt đầu một cách hiệu quả và tối ưu hơn. Hãy bắt tay vào thử nghiệm và khám phá tiềm năng vô hạn của các mô hình ngôn ngữ lớn ngay trên thiết bị của bạn. Bạn đã sẵn sàng để trở thành một chuyên gia tự host LLM chưa? Chia sẻ những kinh nghiệm của bạn trong phần bình luận bên dưới nhé!