DeepSeek
April 9, 2025 · View on GitHub
DeepSeek-R1蒸馏模型
蒸馏模型的使用方式与基础模型相同。例如:
DeepSeek-R1-Distill-Qwen-xxB,基于 Qwen2.5,使用Qwen2Convert。DeepSeek-R1-Distill-Llama-xxB使用LlamaConvert。
DeepSeek-R1 671B满血版
注意,DeepSeek-R1 671B满血版模型只支持数据格式fp8_e4m3, kvcache缓存格式bf16。
软件要求
- xfastertransformer >= 2.0.0
- oneCCL
- vllm-xft >= 0.5.5.3
使用 Docker
注意:
- Docker 镜像仅包含
xfastertransformer和oneCCL,未安装vllm-xft,可通过pip install vllm-xft安装。 - Docker 镜像默认设置了
libiomp5.so环境变量,因此无需手动预加载libiomp5.so。
docker pull intel/xfastertransformer:latest
# 使用以下命令运行 Docker(假设模型文件位于 `/data/` 目录):
docker run -it \
--name xfastertransformer \
--privileged \
--shm-size=16g \
-v /data/:/data/ \
-e "http_proxy=$http_proxy" \
-e "https_proxy=$https_proxy" \
intel/xfastertransformer:latest
提示
- 如果遇到
mpirun: command not found错误,请参考“软件要求”部分安装 oneCCL 或使用 Docker 镜像。 - 默认情况下,基准测试脚本使用 1 个 CPU,可通过
-s选项修改。 - 为了获得更好的性能,请考虑使用以下命令清除所有缓存:
sudo sync; echo 3 | sudo tee /proc/sys/vm/drop_caches。 - 如果性能未达到预期,请在运行基准测试前尝试设置环境变量:
export XDNN_N64=64或export XDNN_N64=16。
运行基准测试
执行基准测试脚本,使用假权重评估模型性能,无需下载超过 600GB 的权重。
手动配置环境
git clone https://github.com/intel/xFasterTransformer.git
cd xFasterTransformer/benchmark
export $(python -c 'import xfastertransformer as xft; print(xft.get_env())')
bash run_benchmark.sh -m deepseek-r1 -d fp8_e4m3 -kvd bf16 -bs 1 -in 32 -out 32 -s 1
在Docker容器中
cd /root/xFasterTransformer/benchmark
bash run_benchmark.sh -m deepseek-r1 -d fp8_e4m3 -kvd bf16 -bs 1 -in 32 -out 32 -s 1
-bs:batch size大小。-in 32:输入令牌长度,[32, 64, 128, 256, 512, 1024, 2048, 4096, 8192]。-out:输出长度。-s:使用的 CPU 节点数量。如果只有一个启用了 SNC-3 的节点,它将用作为 subnuma 的数量。
模型服务(兼容 OpenAI 的服务)
准备模型
- 从 HuggingFace 下载原始的 DeepSeek-R1 671B 模型。
- 将模型转换为 xFT 格式。
python -c 'import xfastertransformer as xft; xft.DeepSeekR1Convert().convert("${HF_DATASET_DIR}","${OUTPUT_DIR}")'转换后,如果希望节省存储空间,
${HF_DATASET_DIR}中的*.safetensor文件不再需要。
运行服务
-
单实例
如果希望在一个CPU numa 中运行 DeepSeek,例如NUMA node0 CPU(s): 0-47,96-143# 通过以下命令预加载 libiomp5.so 或手动 LD_PRELOAD=libiomp5.so export $(python -c 'import xfastertransformer as xft; print(xft.get_env())') numactl 0-47 -l python -m vllm.entrypoints.openai.api_server \ --model ${MODEL_PATH} \ --tokenizer ${TOKEN_PATH} \ --dtype fp8_e4m3 \ --kv-cache-dtype bf16 \ --served-model-name xft \ --port 8000 \ --trust-remote-codeMODEL_PATH:xFT 格式的模型权重。TOKEN_PATH:与分词器相关的文件,例如HF_DATASET_DIR。served-model-name:API 中使用的模型名称。
-
分布式(多 rank) 如果希望在多个 numa 之间运行 DeepSeek,例如
NUMA node0 CPU(s): 0-47,96-143 NUMA node1 CPU(s): 48-95,144-191# 通过以下命令预加载 libiomp5.so 或手动 LD_PRELOAD=libiomp5.so export $(python -c 'import xfastertransformer as xft; print(xft.get_env())') OMP_NUM_THREADS=48 mpirun \ -n 1 numactl --all -C 0-47 \ python -m vllm.entrypoints.openai.api_server \ --model ${MODEL_PATH} \ --tokenizer ${TOKEN_PATH} \ --dtype fp8_e4m3 \ --kv-cache-dtype bf16 \ --served-model-name xft \ --port 8000 \ --trust-remote-code \ : -n 1 numactl --all -C 48-95 \ python -m vllm.entrypoints.slave \ --dtype fp8_e4m3 \ --model ${MODEL_PATH} \ --kv-cache-dtype bf16 -
查询示例
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "xft", "messages": [{"role": "user", "content": "你好呀!请问你是谁?"}], "max_tokens": 256, "temperature": 0.6, "top_p": 0.95 }'