sglang 最佳實踐
自從 deepseek 研發團隊推薦使用 sglang 部署 R1,就開始慢慢的關注 sglang。大模型的推理框架很多,企業級中 vllm 已經成爲實際的工業標準,其他框架多多少少會參考 vllm;sglang 作爲同是伯克利大學出品也越來越凸顯出來,tensorRT-LLM 由於對於 gpu 的深度綁定,一般的廠商不會採用。ollama,llama.cpp 在整體性能上像是一個單機個人玩家,不適合生產部署。mindie 是華爲昇騰專用,經過了最近一年的迭代,也很完善了,就是部署的時候還需要 root 或者單獨創建一個用戶,對權重的 config 的權限也有強制,不知道這壞習慣是從哪裏學習的,對於生產部署每次都要申請 root 權限非常不爽。不過 vllm 支持昇騰了,只不過對於最新的版本慢上一兩個版本,昇騰用戶應該有一部分人使用 vllm 了。今天學習下 sglang。
現在的推理框架已經發展的很成熟了,在掌握基本的知識(例如: 向量並行,流水線並行,prefill,decode 等)後,學一點框架的參數就夠了,只要不是專注於做推理的工作,這一部分完全夠工作中應用了。
1 docker 部署。自己配置環境過於麻煩,浪費時間也學不到啥有用知識,不如直接使用 docker 部署了事。下載最新鏡像如下:(這裏用的是國內 docker 的鏡像服務 - 毫秒鏡像,我想應該是國外的 docker 對於國內的鏡像網站有什麼動作了,很大一部分 docker 的加速節點都不能用了)
docker pull docker.1ms.run/lmsysorg/sglang
2 選用模型 qwen3 0.6b
命令行部署
docker run --rm --gpus all \
-v /home/qiangyu/work_space/llm/llm/qwen3_0d6b_fp16/Qwen/Qwen3-0.6B:/mnt/Qwen3-0.6B \
--name qwen3_0d6b_fp16 \
-e VLLM_USE_MODELSCOPE=true \
-p 8000:8000 \
docker.1ms.run/lmsysorg/sglang:latest \
python3 -m sglang.launch_server \
--model-path /mnt/Qwen3-0.6B \
--tokenizer-path /mnt/Qwen3-0.6B \
--tensor-parallel-size 1 \
--host 0.0.0.0 --port 8000 \
--trust-remote-code \
--context-length 8000 \
--served-model-name Qwen3-0d6B \
--max-running-request 50 \
--chunked-prefill-size 516
請求下:
import requests
# API 地址(根據你的服務地址修改)
url = "http://localhost:8000/v1/chat/completions"
# 請求頭
headers = {
"Content-Type": "application/json"
}
text = "你好,請介紹一下你自己。"
# 請求體
data = {
"model": "Qwen3-0d6B",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": text}
],
"temperature": 0.7,
"max_tokens": 100 # 設置最大生成 token 數
}
# 發送 POST 請求
response = requests.post(url, headers=headers, json=data)
# 輸出響應結果
print("Status Code:", response.status_code)
print("Response JSON:", response.json())
3 重要參數
--model-path MODEL_PATH 模型權重的路徑。
--tokenizer-path TOKENIZER_PATH 分詞器的路徑,通常就是模型權重的路徑。
--host HOST 服務地址。
--port PORT 服務端口。
--trust-remote-code 是否允許Hub上自定義模型在其自己的建模文件中定義。
--dtype {auto,half,float16,bfloat16,float,float32} 模型權重和激活的數據類型。* "auto"對FP32和FP16模型使用FP16精度,對BF16模型使用BF16精度。 * "half"爲FP16。推薦用於AWQ量化。 * "float16"與"half"相同。 * "bfloat16"在精度和範圍之間取得平衡。 * "float"是FP32精度的簡寫。 * "float32"爲FP32精度。
--kv-cache-dtype {auto,fp8_e5m2,fp8_e4m3} KV緩存存儲的數據類型。“auto”將使用模型數據類型。“fp8_e5m2”和“fp8_e4m3”支持CUDA 11.8+。
--quantization-param-path QUANTIZATION_PARAM_PATH 包含KV緩存縮放因子的JSON文件的路徑。當KV緩存數據類型爲FP8時通常需要提供。否則,默認縮放因子爲1.0,可能導致準確性問題。
--quantization {awq,fp8,gptq,marlin,gptq_marlin,awq_marlin,bitsandbytes,gguf,modelopt,w8a8_int8} 量化方法。
--context-length CONTEXT_LENGTH 模型的最大上下文長度。
--served-model-name SERVED_MODEL_NAME 服務的模型名稱。
--chat-template CHAT_TEMPLATE 聊天模板名稱或聊天模板文件的路徑。
--max-running-requests MAX_RUNNING_REQUESTS 最大處理請求數量。
--chunked-prefill-size CHUNKED_PREFILL_SIZE 分塊預填充中每個塊的最大token數量。和vllm 0.72的--max-num-batched-tokens相同。
--mem-fraction-static MEM_FRACTION_STATIC 用於靜態分配(模型權重和KV緩存內存池)的內存比例。和vllm的m --gpu-memory-utilization相同。
--tensor-parallel-size TENSOR_PARALLEL_SIZE, --tp-size TENSOR_PARALLEL_SIZE 張量並行大小。
--log-level LOG_LEVEL 所有記錄器的日誌級別。
--log-level-http LOG_LEVEL_HTTP HTTP服務器的日誌級別。如果沒有設置,默認重用--log-level。
--log-requests 記錄所有請求的輸入和輸出。
--show-time-cost 顯示自定義標記的時間成本。
--enable-metrics 啓用日誌Prometheus指標。
--api-key API_KEY 設置服務器的API密鑰。也用於兼容OpenAI API的服務器。
後面再慢慢探究多節點部署和效率評測,作爲主流推理框架的 vllm 和 sglang,性能相比應該大差不差。
4 參考鏈接
1 https://blog.csdn.net/qq_15060477/article/details/146154371
2 https://docs.sglang.ai/start/install.html
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/737eXHknsvyFzftdsIEhiw