一、執行
# 設置日志目錄
export FD_LOG_DIR=/workspace/models/log# 指定使用的 GPU 設備
export CUDA_VISIBLE_DEVICES=0,1,2,3# 創建日志目錄(如果不存在)
mkdir -p "$FD_LOG_DIR"# 定義日志文件路徑
LOG_FILE="$FD_LOG_DIR/fastdeploy_server_$(date +'%Y%m%d_%H%M%S').log"# 啟動服務并重定向輸出到日志文件,后臺運行
nohup python -m fastdeploy.entrypoints.openai.api_server \
--model /workspace/models/DeepSeek-R1-Distill-Qwen-32B_baidu \
--port 8180 \
--metrics-port 8181 \
--engine-worker-queue-port 8182 \
--gpu-memory-utilization 0.7 \
--max-model-len 8192 \
--max-num-seqs 32 \
--tensor-parallel-size 4 \
--reasoning-parser qwen3 > "$LOG_FILE" 2>&1 &
二、環境變量
🔹 1. CPU 與 BF16 相關
"FD_CPU_USE_BF16": lambda: os.getenv("FD_CPU_USE_BF16", "False"),
?作用:是否在 CPU 上啟用?BF16(BFloat16)?精度計算。
?默認值:"False"
?說明:
?BF16 是一種半精度浮點格式,常用于加速推理,減少內存占用。
?若設為?"True",則在支持 BF16 的 CPU(如 Intel AMX 支持的處理器)上啟用 BF16 計算。
🔹 2. CUDA 架構構建目標
"FD_BUILDING_ARCS": lambda: os.getenv("FD_BUILDING_ARCS", "[]"),
?作用:指定編譯 FastDeploy 時針對的?CUDA 架構(Compute Capability)。
?默認值:"[]"(空列表)
?示例值:"[80, 90]"?表示支持 SM80(Ampere)、SM90(Hopper)架構。
?說明:影響編譯生成的 CUDA 二進制代碼兼容性。
🔹 3. 日志目錄
"FD_LOG_DIR": lambda: os.getenv("FD_LOG_DIR", "log"),
?作用:指定日志文件的存儲目錄。
?默認值:"log"
?說明:所有運行日志將保存在此目錄下。
🔹 4. 調試模式
"FD_DEBUG": lambda: os.getenv("FD_DEBUG", "0"),
?作用:是否啟用調試模式。
?取值:"0"(關閉)、"1"(開啟)
?說明:開啟后可能輸出更詳細的日志,用于調試問題。
🔹 5. 日志保留天數
"FD_LOG_BACKUP_COUNT": lambda: os.getenv("FD_LOG_BACKUP_COUNT", "7"),
?作用:保留最近多少天的日志文件。
?默認值:"7"(保留7天)
?說明:配合日志輪轉機制,防止磁盤被占滿。
🔹 6. 模型下載源
"FD_MODEL_SOURCE": lambda: os.getenv("FD_MODEL_SOURCE", "AISTUDIO"),
?作用:指定從哪個平臺下載模型。
?可選值:
?"AISTUDIO":百度 AI Studio
?"MODELSCOPE":魔搭(ModelScope)
?"HUGGINGFACE":Hugging Face
?默認值:"AISTUDIO"
🔹 7. 模型緩存目錄
"FD_MODEL_CACHE": lambda: os.getenv("FD_MODEL_CACHE", None),
?作用:模型下載后的本地緩存路徑。
?默認值:None(使用系統默認緩存路徑)
?說明:設置后可避免重復下載大模型。
🔹 8. 停止序列限制
"FD_MAX_STOP_SEQS_NUM": lambda: os.getenv("FD_MAX_STOP_SEQS_NUM", "5"),"FD_STOP_SEQS_MAX_LEN": lambda: os.getenv("FD_STOP_SEQS_MAX_LEN", "8"),
?作用:
?FD_MAX_STOP_SEQS_NUM:最多支持多少個“停止序列”(stop sequences),用于控制文本生成的終止。
?FD_STOP_SEQS_MAX_LEN:每個停止序列的最大長度(字符數)。
?說明:常用于 LLM 推理中,例如遇到“\n\n”或“###”時停止生成。
🔹 9. 可見 GPU 設備
"CUDA_VISIBLE_DEVICES": lambda: os.getenv("CUDA_VISIBLE_DEVICES", None),
?作用:控制程序可見的 GPU 設備。
?格式:用逗號分隔的設備 ID,如?"0,1,2"
?說明:這是標準的 CUDA 環境變量,用于 GPU 資源隔離。
🔹 10. 使用 HuggingFace Tokenizer
"FD_USE_HF_TOKENIZER": lambda: os.getenv("FD_USE_HF_TOKENIZER", 0),
?作用:是否使用 HuggingFace 提供的 tokenizer。
?注意:默認值是?0(整數),但?os.getenv?返回字符串,這里可能應為?"0"。
?說明:若為?1,則優先使用 HF 的分詞器實現。
🔹 11. ZMQ 數據發送水位線
"FD_ZMQ_SNDHWM": lambda: os.getenv("FD_ZMQ_SNDHWM", 10000),
?作用:設置 ZMQ(ZeroMQ)通信中發送隊列的高水位線(High Water Mark)。
?默認值:10000
?說明:防止發送緩沖區無限增長,超過此值會丟棄舊消息或阻塞。
🔹 12. KV Cache 量化參數緩存目錄
"FD_CACHE_PARAMS": lambda: os.getenv("FD_CACHE_PARAMS", "none"),
?作用:用于緩存 KV Cache 量化相關參數的目錄。
?默認值:"none"?表示不緩存。
🔹 13. 注意力機制后端
"FD_ATTENTION_BACKEND": lambda: os.getenv("FD_ATTENTION_BACKEND", "APPEND_ATTN"),
?可選值:
?"NATIVE_ATTN":原生注意力
?"APPEND_ATTN":追加式注意力(可能用于流式生成)
?"MLA_ATTN":多頭局部注意力(Multi-head Local Attention)
?說明:選擇不同的注意力實現方式,影響性能和內存使用。
🔹 14. 采樣策略類
"FD_SAMPLING_CLASS": lambda: os.getenv("FD_SAMPLING_CLASS", "base"),
?可選值:
?"base":基礎采樣(如 greedy、top-k、top-p)
?"base_non_truncated":非截斷式基礎采樣
?"air":可能是 Advanced Inference Resampling
?"rejection":拒絕采樣(Rejection Sampling)
?說明:決定文本生成時的 token 采樣策略。
🔹 15. MoE 后端實現
"FD_MOE_BACKEND": lambda: os.getenv("FD_MOE_BACKEND", "cutlass"),
?作用:選擇?Mixture of Experts (MoE)?模型的計算后端。
?可選值:
?"cutlass":NVIDIA Cutlass 庫,高性能 CUDA 矩陣計算
?"marlin":可能是量化推理優化庫
?"triton":使用 Triton 編寫的 kernel
?說明:影響 MoE 模型的推理效率。
🔹 16. 是否禁用請求重計算
"FD_DISABLED_RECOVER": lambda: os.getenv("FD_DISABLED_RECOVER", "0"),
?作用:當 KV Cache 滿時,是否禁用恢復/重計算機制。
?默認值:"0"(不禁用,允許恢復)
?說明:若禁用(設為?"1"),可能直接報錯或丟棄請求。
🔹 17. Triton Kernel 緩存目錄
"FD_TRITON_KERNEL_CACHE_DIR": lambda: os.getenv("FD_TRITON_KERNEL_CACHE_DIR", None),
?作用:Triton 編譯的 kernel 的緩存路徑。
?說明:避免重復編譯,提升啟動速度。
🔹 18. PD 解耦模式是否可變
"FD_PD_CHANGEABLE": lambda: os.getenv("FD_PD_CHANGEABLE", "0"),
?作用:是否允許從“獨立 PD 解耦”模式切換到“集中式推理”。
?說明:PD 可能指?Pre-decoding?或?Parallel Decoding,用于加速生成。
🔹 19. 是否使用 fastsafetensor 加載權重
"FD_USE_FASTSAFETENSOR": lambda: os.getenv("FD_USE_FASTSAFETENSOR", "0"),
?作用:是否使用?fastsafetensor?庫快速加載?.safetensors?格式的模型權重。
?優勢:比標準方式更快,更安全(防止代碼注入)。
🔹 20. 是否使用 DeepGemm(FP8 MoE)
"FD_USE_DEEP_GEMM": lambda: bool(int(os.getenv("FD_USE_DEEP_GEMM", "1"))),
?作用:是否啟用 DeepGemm(可能是針對 FP8 精度的 MoE 優化 GEMM 計算)。
?轉換邏輯:字符串 → int → bool
?默認啟用:"1"?→?True
🔹 21. 是否使用聚合發送
"FD_USE_AGGREGATE_SEND": lambda: bool(int(os.getenv("FD_USE_AGGREGATE_SEND", "0"))),
?作用:是否將多個小消息聚合后一次性發送(用于通信優化)。
?默認關閉:"0"?→?False
?場景:分布式推理、多節點通信。
🔹 22-27. 分布式追蹤(Tracing)配置
"TRACES_ENABLE": lambda: os.getenv("TRACES_ENABLE", "false"),"FD_SERVICE_NAME": lambda: os.getenv("FD_SERVICE_NAME", "FastDeploy"),"FD_HOST_NAME": lambda: os.getenv("FD_HOST_NAME", "localhost"),"TRACES_EXPORTER": lambda: os.getenv("TRACES_EXPORTER", "console"),"EXPORTER_OTLP_ENDPOINT": lambda: os.getenv("EXPORTER_OTLP_ENDPOINT"),"EXPORTER_OTLP_HEADERS": lambda: os.getenv("EXPORTER_OTLP_HEADERS"),
?作用:集成 OpenTelemetry 等分布式追蹤系統。
?說明:
?TRACES_ENABLE: 是否開啟追蹤。
?FD_SERVICE_NAME: 服務名。
?FD_HOST_NAME: 主機名。
?TRACES_EXPORTER: 追蹤數據輸出方式(如?console,?otlp,?jaeger)。
?EXPORTER_OTLP_ENDPOINT: OTLP 服務地址(如?http://localhost:4317)。
?EXPORTER_OTLP_HEADERS: 發送 OTLP 請求時的頭部(如認證信息)。
🔹 28. 啟用 V1 版本的 KV Cache 調度器
"ENABLE_V1_KVCACHE_SCHEDULER": lambda: int(os.getenv("ENABLE_V1_KVCACHE_SCHEDULER", "0")),
?作用:是否啟用新版(v1)的 KV Cache 塊調度器。
?特點:無需設置?kv_cache_ratio,更智能地管理顯存。
?默認關閉:"0"