Chuyển đến nội dung chính

Cách chạy Kimi K2 cục bộ: Thiết lập hoàn chỉnh & Khắc phục sự cố

Tìm hiểu cách chạy Kimi K2 trên một GPU A100 với RAM 250GB bằng llama.cpp.
· 6 phút đọc

Khám phá cùng AI

Kimi K2, được phát triển bởi Moonshot AI, là một mô hình ngôn ngữ Mixture-of-Experts (MoE) tối tân. Mô hình vượt trội ở tri thức tuyến đầu, suy luận và tác vụ lập trình, đồng thời được tối ưu đặc biệt cho năng lực agentic, bao gồm sử dụng công cụ và tự động giải quyết vấn đề.

Như chúng tôi phân tích trong hướng dẫn Kimi K2, mô hình đang đạt kết quả benchmark ấn tượng, trở thành mô hình ngôn ngữ mã nguồn mở đa dụng tốt nhất. Chúng ta đang chứng kiến khoảnh khắc Deepseek R1, và để ăn mừng, tôi sẽ hướng dẫn bạn cách chạy mô hình khổng lồ 1 terabyte này trên một GPU duy nhất. 

Chúng ta sẽ học cách thiết lập máy Runpod, cài đặt llama.cpp và tải mô hình với tốc độ nhanh hơn. Ngoài ra, chúng ta sẽ chạy mô hình bằng CLI của llama.cpp, offload các lớp của mô hình sang RAM. Cuối cùng, chúng ta sẽ xử lý các vấn đề thường gặp khi chạy những mô hình này. Bạn cũng có thể xem hướng dẫn về Kimi K2.5 với Agent Swarm mới.

Thiết lập Runpod

Truy cập Runpod GPU Cloud và tạo một cloud với máy A100 SXM, dùng Python Container Image phiên bản 2.8.0. 

Sau đó, tăng dung lượng đĩa của container lên 300 GB bằng tùy chọn Edit pod. 

Chỉnh sửa Pod để tăng dung lượng Container Disk.

Khi thiết lập xong, bạn sẽ thấy có 300 GB dung lượng lưu trữ, đủ dùng vì mô hình lượng tử hóa 1-bit của chúng ta cần 250 GB.

Bảng điều khiển máy Runpod 1X A100 SXM

Cài đặt llama.cpp

1. Nhấp nút connect và khởi chạy Jupyter Lab. Tạo một notebook mới và cài các công cụ Linux cần thiết như cmake và curl.

!apt-get update
!apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y

Cài đặt các công cụ Linux.

2. Chuyển thư mục về root. Chúng ta sẽ không dùng thư mục workspace. Lý do là để tăng tốc độ tải xuống và nạp mô hình. Bạn sẽ hiểu thêm trong phần khắc phục sự cố ở cuối.

%cd ..

3. Clone phiên bản mới nhất của kho lưu trữ llama.cpp.

!git clone https://github.com/ggml-org/llama.cpp

Cloning llama.cpp

4. Thiết lập tùy chọn build. Chúng ta đang build cho máy GPU. Nếu bạn muốn suy luận bằng CPU, hãy đổi DGGML_CUDA=ON thành DGGML_CUDA=OFF.

!cmake llama.cpp -B llama.cpp/build \
  -DBUILD_SHARED_LIBS=OFF \
  -DGGML_CUDA=ON \
  -DLLAMA_CURL=ON \
  -DCMAKE_CUDA_ARCHITECTURES="80;90" \
  -DCMAKE_CUDA_FLAGS="-Wno-deprecated-gpu-targets"

Thiết lập build cho llama.cpp

5. Chúng ta sẽ dùng lệnh cmake để build các công cụ: llama-quantize, llama-cli, llama-gguf-split và llama-mtmd-cli.

!cmake --build llama.cpp/build --config Release -j --clean-first --target llama-quantize llama-cli llama-gguf-split llama-mtmd-cli

Cài đặt llama-cli và các công cụ khác.

6. Sao chép tất cả công cụ build vào thư mục chính của kho để dễ truy cập.

!cp llama.cpp/build/bin/llama-* llama.cpp

Tải Kimi K2 nhanh với xnet

Các phiên bản lượng tử hóa của Kimi K2 do Unsloth phát hành hỗ trợ xnet, cho phép tải xuống và tải lên nhanh gấp 4 lần Git LFS. Để kích hoạt cục bộ, vui lòng cài phiên bản mới nhất của huggingface_hub và hf_transfer:

!pip install huggingface_hub hf_transfer

Cài đặt các gói Python để tải tệp từ Hugging Face.

Dùng API snapshot_download để chỉ tải các tệp mô hình GGUF lượng tử hóa 1-bit của kho này:

import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0"

from huggingface_hub import snapshot_download
snapshot_download(
    repo_id = "unsloth/Kimi-K2-Instruct-GGUF",
    local_dir = "/unsloth/Kimi-K2-Instruct-GGUF",
    allow_patterns = ["*UD-TQ1_0*"],
)

Thời gian tải phụ thuộc vào tốc độ internet và lưu trữ của bạn.

Tải mô hình lượng tử hóa 1-bit từ Hugging Face.

Với chúng tôi, tốc độ rất nhanh nhờ giải pháp lưu trữ nhanh và xnet được bật. 

Cách chạy Kimi K2 cục bộ

Đến lúc thử phiên bản lượng tử hóa của mô hình. Đây là phần tôi dành nhiều thời gian gỡ lỗi nhất, vì tôi cố chạy trên một GPU duy nhất. Dù không phải bất khả thi, việc này đi kèm nhiều vấn đề liên quan đến nạp và thực thi mô hình.

Chúng tôi tận dụng toàn bộ luồng CPU và tối đa hóa số lớp nạp lên GPU, bao gồm offload sang CPU cho cả lớp up và down projection của các lớp Mixture of Experts. 

Đây là lệnh chúng tôi chạy trong terminal và hoạt động mượt:

./llama.cpp/llama-cli \
  --model /unsloth/Kimi-K2-Instruct-GGUF/UD-TQ1_0/Kimi-K2-Instruct-UD-TQ1_0-00001-of-00005.gguf \
  --cache-type-k q4_0 \
  --threads -1 \
  --n-gpu-layers 99 \
  --temp 0.6 \
  --min_p 0.01 \
  --ctx-size 16384 \
  --seed 3407 \
  -ot ".ffn_(up|down)_exps.=CPU" \
  --prompt "Hey"

Jupyter Lab Terminal chạy llama-cli

Mất gần một phút để nạp đầy đủ mô hình. Như thấy, mô hình vừa khít với máy.

nạp tensor vào CPU và GPU.

Nếu kiểm tra bảng điều khiển Runpod, bạn sẽ thấy CPU sử dụng cao, và cả RAM lẫn VRAM đều được dùng.

Bảng điều khiển Runpod hiển thị mức sử dụng RAM và VRAM.

Sau khoảng bốn phút nạp và làm ấm, bạn sẵn sàng đặt câu hỏi cho mô hình.

Giao diện llama.cpp

Tôi hỏi một câu đơn giản: "Gió mùa là gì? Viết câu trả lời trong một dòng."

Kiểm thử mô hình Kimi K2

Mất gần năm phút để hoàn tất sinh chuỗi. 

Tôi đã tìm hiểu vì sao tốc độ sinh token chậm, hóa ra GPU chỉ được dùng như bộ nhớ trong khi toàn bộ xử lý diễn ra trên CPU. Để khắc phục, bạn cần offload nhiều lớp hơn sang GPU, nghĩa là bạn sẽ cần 2 máy A100.

Khắc phục sự cố

Phần này sẽ bàn về các vấn đề thường gặp khi chạy mô hình lớn trên một GPU duy nhất và cách vượt qua chúng.

1. Hiểu VRAM so với compute

Khi bạn thấy GPU RAM dùng 95%, GPU compute 0% và CPU 99%, thường nghĩa là VRAM đang đóng vai trò lưu trữ bộ nhớ cho mô hình, còn việc xử lý thực sự diễn ra trên CPU.

Ngay cả các mô hình lượng tử hóa cao và nhỏ như 1-bit vẫn cần nạp vào bộ nhớ, góp phần dùng VRAM. GPU chỉ bắt đầu được sử dụng để tính toán nếu bạn offload nhiều lớp hơn sang VRAM.

2. Xử lý việc sinh token chậm

Để cải thiện tốc độ sinh token, bạn cần offload nhiều lớp mô hình hơn sang GPU. Có thể cân nhắc thiết lập đa GPU, chẳng hạn ba GPU A100. Đặt temperature ở 0,6 để giúp giảm lặp lại và thiếu mạch lạc trong văn bản sinh ra.

3. Yêu cầu phần cứng và hiệu năng

Nếu VRAM hoặc RAM hạn chế, bạn vẫn có thể chạy mô hình 1-bit trên CPU phổ thông. Tuy nhiên, tốc độ sinh token sẽ rất chậm (ví dụ, 1 token mỗi 20 giây).

Yêu cầu nghiêm ngặt duy nhất để chạy mô hình 1-bit là tổng dung lượng ổ đĩa + RAM + VRAM lớn hơn hoặc bằng 250 GB.

Để đạt hiệu năng tối ưu (5+ token/giây), bạn sẽ cần ít nhất 250 GB bộ nhớ hợp nhất hoặc tổng 250 GB RAM và VRAM cộng lại.

4. Khắc phục tải xuống chậm

Cài phiên bản mới nhất của huggingface_hub và hf_transfer để truy cập "tốc độ xnet", nhanh gấp 4 lần Git LFS thông thường.

Để tối ưu lưu trữ và nạp các tệp GGUF sharded, nên dùng container disk để lưu trữ thay vì container volume. Vì container volume có thể khiến tốc độ tải xuống và nạp mô hình chậm.

5. Khắc phục nạp mô hình chậm

Nạp mô hình chậm thường cho thấy bạn đang nạp một mô hình rất lớn. Nạp mô hình từ lưu trữ mạng có thể làm chậm đáng kể quá trình. Luôn dùng SSD M.2 nội bộ để lưu mô hình. SSD M.2 có tốc độ đọc/ghi nhanh hơn nhiều so với ổ cứng truyền thống hoặc lưu trữ mạng, giúp giảm mạnh thời gian nạp. 

Nếu không đủ RAM để nạp mô hình, hệ điều hành có thể bắt đầu hoán đổi dữ liệu xuống đĩa (swap), chậm hơn RAM rất nhiều và tạo nút thắt cổ chai. Hãy cố có thiết lập đa GPU với RAM cao hơn.

Kết luận

Chạy các phiên bản lượng tử hóa của Kimi K2 vẫn có thể gặp thách thức, khi những công cụ như llama.cpp vẫn đang phát triển để bắt kịp các cập nhật mới nhất của mô hình. Trong vài tuần tới, hãy kỳ vọng có giải pháp cải thiện, chuyển tính toán sinh token sang GPU để đạt hiệu năng tốt hơn, thay vì chỉ dựa vào CPU.

Hơn nữa, đây là một trải nghiệm học tập giá trị với tôi. Tôi đã hiểu thêm cách cộng đồng mã nguồn mở hợp tác để tối ưu và triển khai các mô hình này hiệu quả nhất có thể.

Kimi K2 nổi bật như một trong những mô hình mã nguồn mở hàng đầu, tiến gần năng lực của các mô hình như DeepSeek R1, đạt hiệu năng tối tân về tri thức tuyến đầu, toán học và lập trình trong nhóm mô hình không "tư duy". 

Mô hình đặc biệt mạnh ở lựa chọn công cụ và các tác vụ agentic, là lựa chọn tiết kiệm chi phí so với các mô hình cao cấp như Claude 4 Sonnet cho các dự án lập trình hoặc vibe coding.

Bạn có thể phục vụ phiên bản lượng tử hóa của Kimi K2 cho các giải pháp nội bộ theo hướng dẫn này. Llama.cpp cho phép bạn phục vụ mô hình ngôn ngữ như một API tương thích OpenAI. Để tiếp tục học hỏi, nhớ xem hướng dẫn Kimi K2 kèm ví dụ của chúng tôi. Nếu bạn quan tâm đến AI agentic, hãy tham gia khóa học mới về xây dựng hệ thống đa agent với LangGraph.

Abid Ali Awan

Tác giả

Abid Ali Awan

Là một nhà khoa học dữ liệu được chứng nhận, tôi đam mê tận dụng công nghệ tiên tiến để tạo ra các ứng dụng học máy đổi mới. Với nền tảng vững chắc về nhận dạng giọng nói, phân tích và báo cáo dữ liệu, MLOps, AI hội thoại và NLP, tôi đã rèn giũa kỹ năng phát triển các hệ thống thông minh có thể tạo ra tác động thực sự. Bên cạnh chuyên môn kỹ thuật, tôi cũng là một người truyền đạt tốt, có khả năng chắt lọc các khái niệm phức tạp thành ngôn ngữ rõ ràng, súc tích. Nhờ đó, tôi trở thành một blogger được nhiều người quan tâm trong lĩnh vực khoa học dữ liệu, chia sẻ góc nhìn và kinh nghiệm với cộng đồng các chuyên gia dữ liệu ngày càng lớn. Hiện tại, tôi tập trung vào sáng tạo và biên tập nội dung, làm việc với các mô hình ngôn ngữ lớn để phát triển nội dung mạnh mẽ và hấp dẫn, giúp doanh nghiệp và cá nhân tận dụng tối đa dữ liệu của mình.

Chủ đề

Liên quan