大家好,我是Ai學習的老章
簡單介紹一個推理引擎SGLang
它也是DeepSeek官方推薦的推理引擎之一
Why SGLang
項目地址:https://github.com/sgl-project/sglang
SGLang 是適用于大型語言模型和視覺語言模型的快速服務框架。它通過共同設計后端運行時和前端語言,與模型的交互更快、更可控。
核心功能包括:
快速后端運行時:使用 RadixAttention 為前綴緩存、零開銷 CPU 調度程序、連續批處理、標記注意力(分頁注意力)、推測解碼、張量并行、分塊預填充、結構化輸出和量化 (FP8/INT4/AWQ/GPTQ) 提供高效服務。
靈活的前端語言:為編程LLM應用程序提供直觀的界面,包括鏈式生成調用、高級提示、控制流、多模態輸入、并行性和外部交互。
廣泛的模型支持:支持廣泛的生成模型(Llama、Gemma、Mistral、QWen、DeepSeek、LLaVA 等)、嵌入模型(e5-mistral、gte、mcdse)和獎勵模型 (Skywork),并易于擴展以集成新模型。
活躍的社區:SGLang 是開源的,并得到行業采用的活躍社區的支持。
SGLang目前還支持支持MLA優化、FP8 (W8A8)、FP8 KV緩存以及Torch編譯,在開源框架中提供了最先進的延遲和吞吐量性能。
SGLang團隊的啟動說明:https://github.com/sgl-project/sglang/tree/main/benchmark/deepseek_v3
https://lmsys.org/blog/2024-12-04-sglang-v0-4/#data-parallelism-attention-for-deepseek-models
安裝SGLamg
文檔:https://docs.sglang.ai/start/install.html#method-2-from-source
提供了pip/uv、source、docker/docker compose、k8s等方式的安裝方法
官方建議的uv我不喜歡, 用conda先安裝環境,再安裝sglang。
conda create -n sglang python=3.12 conda activate sglang pip install --upgrade pip pip install "sglang[all]>=0.4.4.post1"
一行命令啟動模型:
python3 -m sglang.launch_server --model deepseek-ai/DeepSeek-V3 --tp 8 --trust-remote-code
如果要在內網離線部署的話,建議還是docker吧,docker save 成tar后哪網docker load即可。
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN= " \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server --model-path meta-llama/Llama-3.1-8B-Instruct --host 0.0.0.0 --port 30000
附錄
-h, --help 顯示幫助信息并退出 --model-path MODEL_PATH模型權重的路徑。可以是本地文件夾或Hugging Face倉庫ID。 --tokenizer-path TOKENIZER_PATH分詞器的路徑。 --host HOST 服務器的主機地址。 --port PORT 服務器的端口。 --tokenizer-mode {auto,slow}分詞器模式。'auto'會使用可用的快速分詞器,而'slow'總是使用慢速分詞器。 --skip-tokenizer-init如果設置,跳過初始化分詞器,并在生成請求時傳遞input_ids。 --load-format {auto,pt,safetensors,npcache,dummy,gguf,bitsandbytes,layered}要加載的模型權重格式。“auto”將嘗試以safetensors格式加載權重,如果不可用則回退到pytorch bin格式。“pt”將以pytorch bin格式加載權重。“safetensors”將以safetensors格式加載權重。“npcache”將以pytorch格式加載權重并在numpy緩存中存儲以加快加載速度。“dummy”將使用隨機值初始化權重,主要用于性能分析。“gguf”將以gguf格式加載權重。“bitsandbytes”將使用bitsandbytes量化加載權重。“layered”逐層加載權重,以便在一個層被量化之前加載另一個層,從而減小峰值內存占用。 --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模型的最大上下文長度。默認為None(將使用模型config.json中的值)。 --device {cuda,xpu,hpu,cpu}設備類型。 --served-model-name SERVED_MODEL_NAME覆蓋OpenAI API服務器v1/models端點返回的模型名稱。 --chat-template CHAT_TEMPLATE內置聊天模板名稱或聊天模板文件的路徑。僅用于兼容OpenAI API的服務器。 --is-embedding 是否將CausalLM用作嵌入模型。 --revision REVISION 使用的具體模型版本。可以是分支名、標簽名或提交ID。未指定時,使用默認版本。 --mem-fraction-static MEM_FRACTION_STATIC用于靜態分配(模型權重和KV緩存內存池)的內存比例。如果遇到內存不足錯誤,請使用較小的值。 --max-running-requests MAX_RUNNING_REQUESTS正在運行的最大請求數量。 --max-total-tokens MAX_TOTAL_TOKENS內存池中的最大token數量。如果未指定,將根據內存使用比例自動計算。此選項通常用于開發和調試目的。 --chunked-prefill-size CHUNKED_PREFILL_SIZE分塊預填充中每個塊的最大token數量。設置為-1表示禁用分塊預填充。 --max-prefill-tokens MAX_PREFILL_TOKENS預填充批次中的最大token數量。實際限制將是此值和模型最大上下文長度之間的較大值。 --schedule-policy {lpm,random,fcfs,dfs-weight}請求的調度策略。 --schedule-conservativeness SCHEDULE_CONSERVATIVENESS調度策略的保守程度。較大的值意味著更保守的調度。如果經常看到請求被撤回,請使用較大的值。 --cpu-offload-gb CPU_OFFLOAD_GB為CPU卸載保留的RAM GB數。 --prefill-only-one-req PREFILL_ONLY_ONE_REQ如果為true,則每次預填充僅處理一個請求。 --tensor-parallel-size TENSOR_PARALLEL_SIZE, --tp-size TENSOR_PARALLEL_SIZE張量并行大小。 --stream-interval STREAM_INTERVAL流式傳輸的間隔(或緩沖區大小),按token長度計算。較小的值使流式傳輸更平滑,而較大的值提高吞吐量。 --stream-output 是否作為一系列不連續的段輸出。 --random-seed RANDOM_SEED隨機種子。 --constrained-json-whitespace-pattern CONSTRAINED_JSON_WHITESPACE_PATTERNJSON約束輸出中允許的語法空白的正則表達式模式。例如,要允許模型生成連續的空格,請將模式設置為[\n\t ]* --watchdog-timeout WATCHDOG_TIMEOUT設置看門狗超時時間(秒)。如果前向批處理花費的時間超過此值,服務器將崩潰以防止掛起。 --download-dir DOWNLOAD_DIR模型下載目錄。 --base-gpu-id BASE_GPU_ID開始分配GPU的基礎GPU ID。在單臺機器上運行多個實例時很有用。 --log-level LOG_LEVEL所有記錄器的日志級別。 --log-level-http LOG_LEVEL_HTTPHTTP服務器的日志級別。如果沒有設置,默認重用--log-level。 --log-requests 記錄所有請求的輸入和輸出。 --show-time-cost 顯示自定義標記的時間成本。 --enable-metrics 啟用日志Prometheus指標。 --decode-log-interval DECODE_LOG_INTERVAL解碼批次的日志間隔。 --api-key API_KEY 設置服務器的API密鑰。也用于兼容OpenAI API的服務器。 --file-storage-pth FILE_STORAGE_PTH后端文件存儲的路徑。 --enable-cache-report返回openai請求中usage.prompt_tokens_details中的緩存token數量。 --data-parallel-size DATA_PARALLEL_SIZE, --dp-size DATA_PARALLEL_SIZE數據并行大小。 --load-balance-method {round_robin,shortest_queue}數據并行性的負載均衡策略。 --expert-parallel-size EXPERT_PARALLEL_SIZE, --ep-size EXPERT_PARALLEL_SIZE專家并行大小。 --dist-init-addr DIST_INIT_ADDR, --nccl-init-addr DIST_INIT_ADDR初始化分布式后端的主機地址(例如`192.168.0.2:25000`)。 --nnodes NNODES 節點數量。 --node-rank NODE_RANK節點排名。 --json-model-override-args JSON_MODEL_OVERRIDE_ARGS用于覆蓋默認模型配置的JSON字符串格式的字典。 --lora-paths [LORA_PATHS ...]LoRA適配器列表。可以提供str格式的路徑列表,或{名稱}={路徑}的重命名路徑格式。 --max-loras-per-batch MAX_LORAS_PER_BATCH運行批次中的最大適配器數量,包括僅基礎模型的請求。 --lora-backend LORA_BACKEND選擇多LoRA服務的內核后端。 --attention-backend {flashinfer,triton,torch_native}選擇注意力層的內核。 --sampling-backend {flashinfer,pytorch}選擇采樣層的內核。 --grammar-backend {xgrammar,outlines}選擇語法引導解碼的后端。 --enable-flashinfer-mla啟用FlashInfer MLA優化 --speculative-algorithm {EAGLE}推測算法。 --speculative-draft-model-path SPECULATIVE_DRAFT_MODEL_PATH草稿模型權重的路徑。可以是本地文件夾或Hugging Face倉庫ID。 --speculative-num-steps SPECULATIVE_NUM_STEPS在推測解碼中從草稿模型采樣的步驟數。 --speculative-num-draft-tokens SPECULATIVE_NUM_DRAFT_TOKENS在推測解碼中從草稿模型采樣的token數。 --speculative-eagle-topk {1,2,4,8}在eagle2每步中從草稿模型采樣的token數。 --enable-double-sparsity啟用雙重稀疏性注意力 --ds-channel-config-path DS_CHANNEL_CONFIG_PATH雙重稀疏性通道配置的路徑 --ds-heavy-channel-num DS_HEAVY_CHANNEL_NUM雙重稀疏性注意力中的重型通道數量 --ds-heavy-token-num DS_HEAVY_TOKEN_NUM雙重稀疏性注意力中的重型token數量 --ds-heavy-channel-type DS_HEAVY_CHANNEL_TYPE
制作不易,如果這篇文章覺得對你有用,可否點個關注。給我個三連擊:點贊、轉發和在看。若可以再給我加個,謝謝你看我的文章,我們下篇再見!
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.