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