3.7 KiB
昆仑芯 DeepSeek INT8 修复镜像
基础镜像:用户已提交的 xc-llm-kunlun:v0.25.1。
输出镜像:xc-llm-kunlun:v0.25.1-int8-fixed。
修改内容
vllm_kunlun/quantization/compressed_tensors/compressed_tensors_moe.py: INT8 MoE 从 RoutedExperts 实例读取 scoring_func、num_expert_group、topk_group、e_score_correction_bias 和 routed_scaling_factor,替代旧接口的默认值。避免 DeepSeek sigmoid 分组路由被错误地执行成 softmax;尊重外层 runner 的缩放分工,不硬编码 2.5。vllm_kunlun/ops/_custom_ops.py: 两个 sigmoid 路由包装函数向 kunlun_ops 传参时,将block_static=block_static改为block_statistic=block_static。保留上层 Torch 注册接口的 block_static 名称。
补丁可重复执行。构建时检查版本、语法、路由参数与底层函数签名,不导入 torch/vllm、不使用 XPU。文件原本已修复时只验证,不重复插入。
MLA 接口并未修复,启动脚本使用 VLLM_MLA_DISABLE=1 绕过当前 FlashMLAImpl 缺少 forward_mha/forward_mqa 的问题。使用 VLLM_KUNLUN_ENABLE_INT8_BMM=0,与已转换权重中的 BF16 kv_b_proj 一致。首测使用 TP=8、不启用 EP、eager、单并发、4096 上下文、每卡 4 GiB KV cache。
模型权重不打入镜像。当前转换结果中,路由专家和部分 MLA 投影为 INT8,kv_b_proj、Dense MLP 与共享专家为 BF16;MTP 已排除。
构建
在 172.28.4.201 宿主机执行:
cd /mnt/disk1/quant_tools/deepseek_r1_image
docker build --pull=false \
--build-arg BASE_IMAGE=xc-llm-kunlun:v0.25.1 \
-t xc-llm-kunlun:v0.25.1-int8-fixed .
仅针对内置文件验证补丁,不挂卡、不挂模型:
docker run --rm xc-llm-kunlun:v0.25.1-int8-fixed \
/opt/vllm_kunlun/bin/python /opt/kunlun-deepseek-fixes/apply_patches.py --check
启动与验证
切换服务前先停止旧服务,释放设备和端口。若旧服务由 srx_test 承载,可停止旧容器后再启动新容器:
docker stop srx_test
cd /mnt/disk1/quant_tools/deepseek_r1_image
bash run_container.sh xc-llm-kunlun:v0.25.1-int8-fixed deepseek_int8_fixed
run_container.sh 挂入八张 XPU、xpuctrl、32 GiB 共享内存,使用 host 网络,沿用实际宿主机映射:
/mnt/disk0 -> /mnt/data0
/mnt/disk1 -> /mnt/data1
执行真实 P800 路由数值检查(小张量,不加载模型):
docker exec deepseek_int8_fixed \
/opt/vllm_kunlun/bin/python /opt/kunlun-deepseek-fixes/test_route_p800.py
启动完整服务(该命令前台运行,测试请求另开终端):
docker exec -it deepseek_int8_fixed \
bash /opt/kunlun-deepseek-fixes/serve_deepseek.sh
确认模型文件存在于宿主机 /mnt/disk1/deepseek-r1-INT8。镜像内脚本使用容器路径 /mnt/data1/deepseek-r1-INT8。
服务启动后:
curl -sS http://127.0.0.1:8000/v1/models
curl -sS --max-time 300 http://127.0.0.1:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"/mnt/data1/deepseek-r1-INT8","messages":[{"role":"user","content":"北京是哪个国家的首都?请简短回答。"}],"temperature":0,"max_tokens":2048}'
查看 content、reasoning 和 finish_reason。完整输出质量需实际业务问题验证,算子数值检查不能代替该步骤。
导出与回滚
docker save -o /mnt/disk1/xc-llm-kunlun-v0.25.1-int8-fixed.tar \
xc-llm-kunlun:v0.25.1-int8-fixed
# 另一台同架构、驱动兼容的 P800 机器:
docker load -i /path/to/xc-llm-kunlun-v0.25.1-int8-fixed.tar
镜像归档不包含挂载模型;迁移时模型目录需要单独准备。 回滚时停止新服务/容器,再使用原镜像或启动原容器;旧镜像标签保持不变。