Chuyển tới nội dung chính

Chạy LLM cục bộ trên máy Mac

Hướng dẫn này hướng dẫn bạn cách chạy máy chủ LLM cục bộ trên macOS với API tương thích với OpenAI. Bạn có được toàn bộ quyền riêng tư, chi phí API bằng 0 và hiệu suất tốt đến mức đáng kinh ngạc trên Apple Silicon.

Chúng tôi bao gồm hai phần phụ trợ:

Phần cuốiCài đặtTốt nhất tạiĐịnh dạng
llama.cppbrew install llama.cppBộ nhớ đệm KV được lượng tử hóa, có thời gian tạo mã thông báo đầu tiên nhanh nhất dành cho bộ nhớ thấpGGUF
omlxomlx.aiTạo mã thông báo nhanh nhất, tối ưu hóa kim loại gốcMLX (bộ an toàn)

Cả hai đều hiển thị điểm cuối /v1/chat/completions tương thích với OpenAI. Hermes hoạt động với một trong hai — chỉ cần trỏ nó vào http://localhost:8080 hoặc http://localhost:8000 .

Chỉ Apple Silicon

Hướng dẫn này nhắm đến các máy Mac có Apple Silicon (M1 trở lên). Máy Mac Intel sẽ hoạt động với llama.cpp nhưng không có khả năng tăng tốc GPU - hiệu năng sẽ chậm hơn đáng kể.


Chọn mẫu

Để bắt đầu, chúng tôi khuyên dùng Qwen3.5-9B — đây là một mô hình suy luận mạnh mẽ, vừa vặn thoải mái với bộ nhớ hợp nhất 8GB+ có khả năng lượng tử hóa.

Biến thểKích thước trên đĩaCần RAM (ngữ cảnh 128K)Phần cuối
Qwen3.5-9B-Q4_K_M (GGUF)5,3 GB~10 GB với bộ đệm KV được lượng tử hóallama.cpp
Qwen3.5-9B-mlx-lm-mxfp4 (MLX)~5 GB~12GBôi trời

Quy tắc chung về bộ nhớ: kích thước model + bộ đệm KV. Model 9B Q4 có dung lượng ~5 GB. Bộ đệm KV ở ngữ cảnh 128K với lượng tử hóa Q4 thêm ~ 4-5 GB. Với bộ đệm KV mặc định (f16), con số đó sẽ tăng lên ~ 16 GB. Cờ bộ đệm KV được lượng tử hóa trong llama.cpp là thủ thuật chính cho các hệ thống bị hạn chế về bộ nhớ.

Đối với các kiểu máy lớn hơn (27B, 35B), bạn sẽ cần bộ nhớ hợp nhất trên 32 GB. 9B là lựa chọn phù hợp cho máy 8-16 GB.


Tùy chọn A: llama.cpp

llama.cpp là thời gian chạy LLM cục bộ di động nhất. Trên macOS, nó sử dụng Metal để tăng tốc GPU ngay lập tức.

Cài đặt

brew install llama.cpp

Điều này cung cấp cho bạn lệnh llama-server trên toàn cầu.

Tải mô hình xuống

Bạn cần một mô hình có định dạng GGUF. Nguồn đơn giản nhất là Hugging Face qua huggingface-cli :

brew install huggingface-cli

Sau đó tải xuống:

huggingface-cli download unsloth/Qwen3.5-9B-GGUF Qwen3.5-9B-Q4_K_M.gguf --local-dir ~/models

Mô hình có cổng

Một số người mẫu trên Ôm Mặt yêu cầu xác thực. Trước tiên hãy chạy huggingface-cli login nếu bạn gặp lỗi 401 hoặc 404.

Khởi động máy chủ

llama-server -m ~/models/Qwen3.5-9B-Q4_K_M.gguf \
-ngl 99 \
-c 131072 \
-np 1 \
-fa on \
--cache-type-k q4_0 \
--cache-type-v q4_0 \
--host 0.0.0.0

Đây là những gì mỗi lá cờ làm:| Cờ | Mục đích | |------|----------| | -ngl 99 | Giảm tải tất cả các lớp sang GPU (Kim loại). Sử dụng số cao để đảm bảo không có gì lưu lại trên CPU. | | -c 131072 | Kích thước cửa sổ ngữ cảnh (128K mã thông báo). Giảm điều này nếu bạn sắp hết bộ nhớ. | | -np 1 | Số lượng khe song song. Giữ ở mức 1 cho mục đích sử dụng của một người dùng — nhiều khe cắm hơn sẽ chia nhỏ ngân sách bộ nhớ của bạn. | | -fa on | Chú ý chớp nhoáng. Giảm mức sử dụng bộ nhớ và tăng tốc độ suy luận theo ngữ cảnh dài. | | --cache-type-k q4_0 | Số hóa bộ nhớ đệm chính thành 4-bit. Đây là trình tiết kiệm bộ nhớ lớn. | | --cache-type-v q4_0 | Số hóa bộ đệm giá trị thành 4 bit. Cùng với những điều trên, điều này làm giảm bộ nhớ đệm KV ~ 75% so với f16. | | --host 0.0.0.0 | Nghe trên tất cả các giao diện. Sử dụng 127.0.0.1 nếu bạn không cần truy cập mạng. |

Máy chủ đã sẵn sàng khi bạn thấy:

main: server is listening on http://0.0.0.0:8080
srv update_slots: all slots are idle

Tối ưu hóa bộ nhớ cho các hệ thống bị hạn chế

Cờ --cache-type-k q4_0 --cache-type-v q4_0 là sự tối ưu hóa quan trọng nhất cho các hệ thống có bộ nhớ hạn chế. Đây là tác động ở bối cảnh 128K:

Loại bộ đệm KVBộ nhớ đệm KV (128K ctx, kiểu 9B)
f16 (mặc định)~16 GB
q8_0~8GB
q4_0*4 GB

Trên máy Mac 8 GB, hãy sử dụng bộ đệm q4_0 KV và giảm ngữ cảnh xuống -c 32768 (32K). Trên 16 GB, bạn có thể thoải mái làm bối cảnh 128K. Trên 32 GB+, bạn có thể chạy các model lớn hơn hoặc nhiều khe cắm song song.

Nếu bạn vẫn hết bộ nhớ, trước tiên hãy giảm kích thước ngữ cảnh ( -c ), sau đó thử lượng tử hóa nhỏ hơn (Q3_K_M thay vì Q4_K_M).

Kiểm tra nó

curl -s http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3.5-9B-Q4_K_M.gguf",
"messages": [{"role": "user", "content": "Hello!"}],
"max_tokens": 50
}' | jq .choices[0].message.content

Lấy tên model

Nếu bạn quên tên mô hình, hãy truy vấn điểm cuối của mô hình:

curl -s http://localhost:8080/v1/models | jq '.data[].id'


Tùy chọn B: MLX qua omlx

omlx là một ứng dụng gốc macOS quản lý và phục vụ các mô hình MLX. MLX là khung học máy của riêng Apple, được tối ưu hóa đặc biệt cho kiến ​​trúc bộ nhớ hợp nhất của Apple Silicon.

Cài đặt

Tải xuống và cài đặt từ omlx.ai. Nó cung cấp GUI để quản lý mô hình và máy chủ tích hợp.

Tải mô hình xuống

Sử dụng ứng dụng omlx để duyệt và tải xuống các mô hình. Tìm kiếm Qwen3.5-9B-mlx-lm-mxfp4 và tải xuống. Các mô hình được lưu trữ cục bộ (thường ở ~/.omlx/models/ ).

Khởi động máy chủ

omlx phục vụ các mô hình trên http://127.0.0.1:8000 theo mặc định. Bắt đầu phân phát từ giao diện người dùng ứng dụng hoặc sử dụng CLI nếu có.

Kiểm tra nó

curl -s http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3.5-9B-mlx-lm-mxfp4",
"messages": [{"role": "user", "content": "Hello!"}],
"max_tokens": 50
}' | jq .choices[0].message.content

Liệt kê các model có sẵn

omlx có thể phục vụ nhiều mô hình cùng một lúc:

curl -s http://127.0.0.1:8000/v1/models | jq '.data[].id'


Điểm chuẩn: llama.cpp so với MLX

Cả hai phần phụ trợ được thử nghiệm trên cùng một máy (Apple M5 Max, bộ nhớ hợp nhất 128 GB) chạy cùng một kiểu máy (Qwen3.5-9B) ở mức lượng tử hóa tương đương (Q4_K_M cho GGUF, mxfp4 cho MLX). Năm lời nhắc đa dạng, mỗi lời nhắc có ba lần chạy, các phần phụ trợ được kiểm tra tuần tự để tránh tranh chấp tài nguyên.

Kết quả

| Số liệu | llama.cpp (Q4_K_M) | MLX (mxfp4)

| Người chiến thắng | |--------|-------------------|-------------|--------| | TTFT (trung bình) | 67 mili giây | 289 mili giây | llama.cpp (nhanh hơn 4,3 lần) | | TTFT (tr50) | 66 mili giây | 286 mili giây | llama.cpp (nhanh hơn 4,3 lần) | | Thế hệ (trung bình) | 70 tok/s | 96 tok/giây | MLX (nhanh hơn 37%) | | Thế hệ (tr50) | 70 tok/s | 96 tok/giây | MLX (nhanh hơn 37%) | | Tổng thời gian (512 token) | 7,3 giây | 5,5 giây | MLX (nhanh hơn 25%) |

Điều này có nghĩa là gì

  • llama.cpp vượt trội trong việc xử lý nhanh chóng — sự chú ý nhanh chóng của nó + đường dẫn bộ nhớ đệm KV được lượng tử hóa sẽ mang lại cho bạn mã thông báo đầu tiên sau ~66 mili giây. Nếu bạn đang xây dựng các ứng dụng tương tác trong đó khả năng phản hồi được nhận thức là quan trọng (chatbot, tự động hoàn thành), thì đây là một lợi thế có ý nghĩa.

  • MLX tạo mã thông báo nhanh hơn ~37% sau khi hoạt động. Đối với khối lượng công việc hàng loạt, tạo biểu mẫu dài hoặc bất kỳ nhiệm vụ nào mà tổng thời gian hoàn thành quan trọng hơn độ trễ ban đầu, MLX sẽ kết thúc sớm hơn.

  • Cả hai phần phụ trợ đều cực kỳ nhất quán — phương sai giữa các lần chạy là không đáng kể. Bạn có thể dựa vào những con số này.

Bạn nên chọn cái nào?

Trường hợp sử dụngKhuyến nghị
Trò chuyện tương tác, công cụ có độ trễ thấpllama.cpp
Tạo dạng dài, xử lý hàng loạtMLX (omlx)
Hạn chế về bộ nhớ (8-16 GB)llama.cpp (bộ đệm KV lượng tử hóa chưa từng có)
Phục vụ đồng thời nhiều mô hìnhomlx (hỗ trợ đa mô hình tích hợp)
Khả năng tương thích tối đa (Linux nữa)llama.cpp

Kết nối với Hermes

Khi máy chủ cục bộ của bạn đang chạy:

hermes model

Chọn Custom Endpoint và làm theo lời nhắc. Nó sẽ yêu cầu URL cơ sở và tên mô hình - sử dụng các giá trị từ bất kỳ chương trình phụ trợ nào bạn thiết lập ở trên.