vLLM CPU推理優(yōu)化

前言

在CPU環(huán)境使用vLLM推理框架會明顯比GPU緩慢的多。但是CPU也是有很大的優(yōu)化空間的。

本篇為大家?guī)韛LLM CPU推理的優(yōu)化配置方式。

vLLM參數(shù)

--tensor-parallel-size 張量并行度。如果下面distributed-executor-backend配置的是mp,則張量并行度對應(yīng)的是openMP進程數(shù)。不一定越多越好。需要選擇合適的數(shù)值。
要注意該值必須能被注意力頭數(shù)(attention heads,數(shù)量和采用的模型有關(guān))整除,否則啟動vllm會出現(xiàn)類似如下錯誤:

Total number of attention heads (40) must be divisible by tensor parallel size (3)

還需要注意的是張量并行度不宜設(shè)置的過多,否則會出現(xiàn)類似如下錯誤:

RuntimeError: Expected group_size <= 8 to be true, but got false.  (Could this error message be improved?  If so, please report an enhancement request to PyTorch.)

--distributed-executor-backend 分布式執(zhí)行后端類型。配置值使用mp啟用openMP(Open Multi-Processing)。
--enable-chunked-prefill 啟用chunk-prefill。官方原文:Chunked prefill allows vLLM to process large prefills in smaller chunks and batch them together with decode requests. This feature helps improve both throughput and latency by better balancing compute-bound (prefill) and memory-bound (decode) operations.(摘自Optimization and Tuning - vLLM

環(huán)境變量

VLLM_CPU_OMP_THREADS_BIND 將openMP線程和CPU內(nèi)核綁定。如果需要分別綁定多個openMP進程和CPU內(nèi)核,使用|分隔。例如VLLM_CPU_OMP_THREADS_BIND=0-59|60-119|120-179|180-239。盡量完全使用CPU所有的物理核心。但務(wù)必預(yù)留少量物理核心供框架本身使用。需要注意的是該環(huán)境變量綁定的openMP進程數(shù)(|分隔開的字符串數(shù))必須和--tensor-parallel-size一致。

VLLM_CPU_KVCACHE_SPACE 配置KV cache大小。單位為GB。

啟用TCMalloc

TCMalloc提供了高性能的內(nèi)存分配和緩存本地化能力,強烈建議使用。使用的方式為:

# 先search一下tcmalloc的包名,然后安裝
apt install libtcmalloc-minimal4/now
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4:$LD_PRELOAD
# 啟動vllm
vllm serve ...

如果使用Docker,可以在容器內(nèi)部安裝和配置tcmalloc。方法和上面的相同。如果使用官方項目中提供的Dockerfile制作鏡像,已經(jīng)默認啟用了TCMalloc,無需其他操作。

其他注意事項

不要使用超線程出來的虛擬核,務(wù)必使用物理核??赏ㄟ^cat /proc/cpuinfo來查看CPU的型號和核心數(shù)。如果CPU支持超線程,則核心數(shù)除以2才是真正的物理核心數(shù)。

采用支持avx512bf16指令集的CPU可以顯著提高推理速度。

Docker鏡像實例

啟動命令:

docker run --name vllm_paul --rm --privileged -d -v /home/paul/DeepSeek-R1-Distill-Qwen-14B:/models -p 8000:8000 --env "HF_HUB_OFFLINE=1" --env "VLLM_CPU_KVCACHE_SPACE=40" --env "VLLM_CPU_OMP_THREADS_BIND=0-59|60-119|120-179|180-239" --shm-size=32g --ipc=host vllm-cpu-env --model /models --served_model_name deepseek --max_model_len 10000 --tensor-parallel-size 4 --distributed-executor-backend mp

參考鏈接

CPU - vLLM

Optimization and Tuning - vLLM

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容