遠端節點最貴的往往不是單次解碼,而是連線抖動、槽位超賣與 KV 預算被上下文吃光後的尾延遲與重試風暴。

本文與《LM Studio 對 llama.cpp server》《M4:llama.cpp 與 Ollama》《OpenAI 相容路由與 vLLM》《多模型路由成本矩陣》同一座標系:在 Apple Silicon 上常以 llama.cpp server 承載本機或同網段 Mac;「vLLM 類聚合」指具連續批次、多序列排程與分頁式 KV 管理語意的 OpenAI 相容後端(含 vLLM 本體或閘道後掛的同類叢集)。驗收目標是把連線、併發、記憶體三條預算寫進 runbook,避免報表好看、上線即熔斷。

HTTP Keep-Alive 與遠端成本

跨機房或家用寬頻打遠端 Mac,每次新建 TCP/TLS 都會吃掉首包延遲預算。客戶端預設開啟 keep-alive 時,請同步檢查:反向代理的 keepalive_timeout、上游 idle 逾時、以及客戶端連線池上限是否低於伺服器可接受的工作連線數。池子太大會造成「握手變少、佇列變長」的假健康;太小則頻繁建連,放大 CPU 與延遲方差。

建議在閘道與推理節點兩端記錄:連線重用率每連線佇列深度、以及 499/502 與逾時是否與連線回收相關。與可觀測性欄位對齊可參考《GenAI 可觀測性矩陣》

llama.cpp server 與 vLLM 類聚合:決策矩陣

維度 llama.cpp server(Mac 常態) vLLM 類聚合(GPU/多卡語意)
Keep-Alive 敏感度 單程序多連線時收益明顯;注意 --parallel 與 OS 檔句柄 批次調度器前常有多層代理;需對齊 idle 與 gRPC/HTTP2 行為
併發槽位 --parallel 等顯式上限;超賣即記憶體線性惡化 max_num_seqs 等語意;KV 區塊與預取策略影響尾延遲
KV 預算 統一記憶體池:上下文、槽位、量化 KV 需一起試算 顯存分頁與碎片;與 Mac 路徑疊加時多經閘道轉發
遠端驗收重心 版本釘選、模型檔校驗、浸泡時記憶體壓力曲線 路由別名、後端健康與熔斷、批次排程下的 p99

可執行 curl 與壓測門檻

BASE 換成你的 OpenAI 相容根路徑(含閘道前綴時一併寫入)。下列請求刻意帶短輸出,利於連線重用下的延遲基線比對。

# 單次健康/延遲嗅探(請替換模型 id 與主機) BASE="http://127.0.0.1:8080" curl -sS -o /dev/null -w "tcp:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer} total:%{time_total}\n" \ -H "Content-Type: application/json" -H "Connection: keep-alive" \ -d '{"model":"your-model-id","messages":[{"role":"user","content":"ping"}],"max_tokens":8,"stream":false}' \ "$BASE/v1/chat/completions"

併發浸泡可使用 heywrk(自備 Lua 腳本送 JSON)。下列為 hey 範例:請替換模型 id,並依節點調整 -c(併發連線)與 -q(每秒請求上限)。

# 120 秒、8 連線、每連線最多 5 QPS(示例;請勿直接打生產) hey -z 120s -c 8 -q 5 -m POST -H "Content-Type: application/json" \ -d '{"model":"your-model-id","messages":[{"role":"user","content":"ping"}],"max_tokens":8,"stream":false}' \ http://127.0.0.1:8080/v1/chat/completions

請以你自己的冷啟基線重標定下列門檻;表中數字為常見簽核起點。

指標 建議門檻(相對穩態基線) 超標時優先動作
HTTP 5xx 率(5 分鐘窗) >0.5% 持續 3 分鐘 降併發、縮上下文、檢查上游 OOM/代理逾時
TTFT p95 劣化 >30% 逾 5 分鐘 查 keep-alive/TLS 重用;減閘道跳數;減槽位
成功請求解碼吞吐 低於基線 <65% 且記憶體壓力黃區 KV 量化或降 -c;關閉同機競爭行程
連線建立速率 每秒新建連線 > 成功 RPS 的 50% 放大客戶端池或修正代理 idle;禁止每請求新建連線

KV cache 預算:與槽位聯動

每增加一個穩定併發槽,長上下文場景近似多配一份 KV 工作集。請在伺服器端硬夾 max_tokens 與上下文上限,並把「單會話峰值 tokens」寫進 SLO。Mac 統一記憶體路徑上,寧可閘道排隊也不要讓 llama-server 槽位超賣;vLLM 類後端則要額外對齊分頁命中率與搶佔帶來的尾延遲,避免誤判成網路問題。

買斷或租用遠端 Mac:一筆帳怎麼算

買斷適合模型資產與資料治理已內部化、且團隊願意自行處理保固、機房/電費與釋出版本節奏的情境;前期 CAPEX 高,但長期若 7×24 滿載,單位算力成本可攤薄。租用(含按節點時數或訂閱)適合驗收期需要快速橫向擴縮、想把桌面環境與推理隔離、或要把浸泡與釘選版號交給受控映像的團隊;OPEX 可預測,且失敗時換節點比自維硬體快。兩者共通點是:沒有連線/KV/併發三張表,買租都會變成「先付錢再救火」。

遠端節點驗收勾選

  • 模型檔雜湊與內部命名一致;禁止同名不同檔。
  • 二進位或映像版號寫入資產清冊;閘道路由與後端池快照一併存檔。
  • 同一壓測腳本浸泡 ≥2 小時:記錄 p95/p99、5xx、連線重用率與記憶體壓力。
  • 熔斷與退避策略與路由成本文對齊,避免重試放大。

小結:先量連線與槽位,再算 KV;門檻寫進儀表板與 runbook,遠端簽核才可重現。