CPU 服务器#
本文档介绍如何在 CPU 服务器上设置 SGLang 环境并运行 LLM 推理。 SGLang 已在配备 Intel® AMX® 指令的 CPU 上启用和优化, 这些 CPU 是第 4 代或更新的 Intel® Xeon® 可扩展处理器。
优化模型列表#
以下流行的 LLM 已在 CPU 上优化并能高效运行, 包括最著名的开源模型,如 Llama 系列、Qwen 系列以及 DeepSeek 系列, 如 DeepSeek-R1 和 DeepSeek-V3.1-Terminus。
模型名称 |
BF16 |
W8A8_INT8 |
FP8 |
|---|---|---|---|
DeepSeek-R1 |
|||
DeepSeek-V3.1-Terminus |
|||
Llama-3.2-3B |
|||
Llama-3.1-8B |
|||
QwQ-32B |
|||
DeepSeek-Distilled-Llama |
|||
Qwen3-235B |
注意: 上表列出的模型标识符 已经在第 6 代 Intel® Xeon® P 核平台上进行了验证。
安装#
使用 Docker 安装#
建议使用 Docker 设置 SGLang 环境。
提供了一个 Dockerfile 以方便安装。
将下面的 <secret> 替换为您的 HuggingFace 访问令牌。
# 克隆 SGLang 仓库
git clone https://github.com/sgl-project/sglang.git
cd sglang/docker
# 构建 docker 镜像
docker build -t sglang-cpu:latest -f xeon.Dockerfile .
# 启动一个 docker 容器
docker run \
-it \
--privileged \
--ipc=host \
--network=host \
-v /dev/shm:/dev/shm \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-p 30000:30000 \
-e "HF_TOKEN=<secret>" \
sglang-cpu:latest /bin/bash
从源码安装#
如果您希望在裸金属环境中安装 SGLang,
命令列表如下。
值得注意的是,需要设置环境变量 SGLANG_USE_CPU_ENGINE=1
才能启用 CPU 引擎的 SGLang 服务。
# 创建并激活一个 conda 环境
conda create -n sgl-cpu python=3.12 -y
conda activate sgl-cpu
# 将 PyTorch CPU 设置为主要的 pip 安装渠道,以避免安装更大的 CUDA 版本并防止潜在的运行时问题。
pip config set global.index-url https://download.pytorch.org/whl/cpu
pip config set global.extra-index-url https://pypi.org/simple
# 检查是否已设置一些 conda 相关的环境变量
env | grep -i conda
# 如果没有正确设置,以下环境变量设置是必需的
export CONDA_EXE=$(which conda)
export CONDA_ROOT=${CONDA_EXE}/../..
export CONDA_PREFIX=${CONDA_ROOT}/envs/sgl-cpu
export PATH=${PATH}:${CONDA_ROOT}/bin:${CONDA_ROOT}/condabin
# 克隆 SGLang 代码
git clone https://github.com/sgl-project/sglang.git
cd sglang
git checkout <YOUR-DESIRED-VERSION>
# 使用专用的 toml 文件
cd python
cp pyproject_cpu.toml pyproject.toml
# 安装 SGLang 依赖库,并构建 SGLang 主包
pip install --upgrade pip setuptools
conda install -y libsqlite==3.48.0 gperftools tbb libnuma numactl
pip install .
pip install torch==2.9.0 torchvision==0.24.0 triton==3.5.0 --force-reinstall
# 构建 CPU 后端内核
cd ../sgl-kernel
cp pyproject_cpu.toml pyproject.toml
pip install .
# 其他必需的环境变量
# 建议设置在 ~/.bashrc 中,这样每次在新终端中就不必重复设置
export SGLANG_USE_CPU_ENGINE=1
export LD_PRELOAD=${LD_PRELOAD}:${CONDA_PREFIX}/lib/libiomp5.so:${CONDA_PREFIX}/lib/libtcmalloc.so:${CONDA_PREFIX}/lib/libtbbmalloc.so.2
启动服务引擎#
启动 SGLang 服务的示例命令:
python -m sglang.launch_server \
--model <MODEL_ID_OR_PATH> \
--trust-remote-code \
--disable-overlap-schedule \
--device cpu \
--host 0.0.0.0 \
--tp 6
注意事项:
要运行 W8A8 量化模型,请添加标志
--quantization w8a8_int8。标志
--tp 6指定将使用 6 个等级(TP6)应用张量并行。 指定的 TP 数量是执行过程中将使用的 TP 等级数量。 在 CPU 平台上,一个 TP 等级表示一个子 NUMA 集群(SNC)。 通常我们可以从操作系统获取 SNC 信息(可用数量)。 用户可以将 TP 指定为不超过当前系统中总可用 SNC 数。如果指定的 TP 等级数与总 SNC 计数不同, 系统将自动使用前
n个 SNC。 请注意n不能超过总 SNC 数量,否则会导致错误。要指定要使用的核心,我们需要显式设置环境变量
SGLANG_CPU_OMP_THREADS_BIND。 例如,如果我们希望在 Xeon® 6980P 服务器上使用每个 SNC 的前 40 个核心运行 SGLang 服务, 该服务器在一个插槽的 3 个 SNC 上有 43-43-42 个核心,我们应该设置:export SGLANG_CPU_OMP_THREADS_BIND="0-39|43-82|86-125|128-167|171-210|214-253"
请注意,设置了 SGLANG_CPU_OMP_THREADS_BIND 后, 各等级的可用内存量可能无法预先确定。 您可能需要设置适当的
--max-total-tokens以避免内存不足错误。要使用 torch.compile 优化解码,请添加标志
--enable-torch-compile。 要在使用torch.compile时指定最大批处理大小,请设置标志--torch-compile-max-bs。 例如,--enable-torch-compile --torch-compile-max-bs 4表示使用torch.compile并将最大批处理大小设置为 4。目前使用torch.compile优化的最大适用批处理大小为 16。服务启动时会自动触发预热步骤。 当您看到日志
The server is fired up and ready to roll!时,服务器就准备好了。
使用请求进行基准测试#
您可以通过 bench_serving 脚本对性能进行基准测试。
在另一个终端中运行命令。
python -m sglang.bench_serving \
--dataset-name random \
--random-input-len 1024 \
--random-output-len 1024 \
--num-prompts 1 \
--request-rate inf \
--random-range-ratio 1.0
参数的详细解释可以通过以下命令查看:
python -m sglang.bench_serving -h
此外,请求可以通过
OpenAI Completions API
形成,并通过命令行(例如使用 curl)或您自己的脚本发送。
示例:运行 DeepSeek-V3.1-Terminus#
在 Xeon® 6980P 服务器上启动 W8A8_INT8 DeepSeek-V3.1-Terminus 服务的示例命令:
python -m sglang.launch_server \
--model IntervitensInc/DeepSeek-V3.1-Terminus-Channel-int8 \
--trust-remote-code \
--disable-overlap-schedule \
--device cpu \
--quantization w8a8_int8 \
--host 0.0.0.0 \
--mem-fraction-static 0.8 \
--enable-torch-compile \
--torch-compile-max-bs 4 \
--tp 6
类似地,启动 FP8 DeepSeek-V3.1-Terminus 服务的示例命令将是:
python -m sglang.launch_server \
--model deepseek-ai/DeepSeek-V3.1-Terminus \
--trust-remote-code \
--disable-overlap-schedule \
--device cpu \
--host 0.0.0.0 \
--mem-fraction-static 0.8 \
--enable-torch-compile \
--torch-compile-max-bs 4 \
--tp 6
注意:请将 --torch-compile-max-bs 设置为您部署所需的最大批处理大小,
最大可设置为 16。示例中的值 4 仅作说明。
然后您可以使用 bench_serving 命令进行测试,
或按照基准测试示例构建您自己的命令或脚本。