vLLM CPU推理优化

前言

在CPU环境使用vLLM推理框架会明显比GPU缓慢的多。但是CPU也是有很大的优化空间的。

本篇为大家带来vLLM CPU推理的优化配置方式。

vLLM参数

--tensor-parallel-size 张量并行度。如果下面distributed-executor-backend配置的是mp,则张量并行度对应的是openMP进程数。不一定越多越好。需要选择合适的数值。
要注意该值必须能被注意力头数(attention heads,数量和采用的模型有关)整除,否则启动vllm会出现类似如下错误:

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

还需要注意的是张量并行度不宜设置的过多,否则会出现类似如下错误:

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 分布式执行后端类型。配置值使用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

环境变量

VLLM_CPU_OMP_THREADS_BIND 将openMP线程和CPU内核绑定。如果需要分别绑定多个openMP进程和CPU内核,使用|分隔。例如VLLM_CPU_OMP_THREADS_BIND=0-59|60-119|120-179|180-239。尽量完全使用CPU所有的物理核心。但务必预留少量物理核心供框架本身使用。需要注意的是该环境变量绑定的openMP进程数(|分隔开的字符串数)必须和--tensor-parallel-size一致。

VLLM_CPU_KVCACHE_SPACE 配置KV cache大小。单位为GB。

启用TCMalloc

TCMalloc提供了高性能的内存分配和缓存本地化能力,强烈建议使用。使用的方式为:

# 先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,可以在容器内部安装和配置tcmalloc。方法和上面的相同。如果使用官方项目中提供的Dockerfile制作镜像,已经默认启用了TCMalloc,无需其他操作。

其他注意事项

不要使用超线程出来的虚拟核,务必使用物理核。可通过cat /proc/cpuinfo来查看CPU的型号和核心数。如果CPU支持超线程,则核心数除以2才是真正的物理核心数。

采用支持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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容