这个文档以DeepSeek-V3-0324-INT4模型为例,介绍如何使用混合推理来榨干硬件
假设我们在一台有两张48G的显卡上部署DeepSeek-V3-0324-INT4模型,一般用法是这样的
ftllm server fastllm/DeepSeek-V3-0324-INT4
这时候会默认将模型的moe部分运行在cpu上,非moe部分运行在cuda上,等价于如下命令:
ftllm server fastllm/DeepSeek-V3-0324-INT4 --device cuda --moe_device cpu
(注意:之后的优化目前仅对cuda和cpu的混合推理有效,numa无法使用这些功能)
用上述命令运行时,显存会有大量剩余,我们可以通过设置moe_device,将一部分moe层
指定在cuda上运行
ftllm server fastllm/DeepSeek-V3-0324-INT4 --device cuda --moe_device "{'cuda':1,'cpu':19}"
上述命令中将moe_device设置为"{'cuda':1,'cpu':19}",代表1/20的moe层运行在cuda上,19/20的moe层运行在cpu上
这样能轻微提升decode速度,但是可能会降低上下文长度
使用下面的命令可以使用多张显卡来加速部分moe层
ftllm server fastllm/DeepSeek-V3-0324-INT4 --device cuda --moe_device "{'multicuda:0,1':15,'cpu':85}"
上述命令中将moe_device设置为"{'multicuda:0,1':15,'cpu':85}",代表15/100的moe层使用0,1两张gpu张量并行推理,85/100的moe层运行在cpu上
这样能进一步提升decode速度
(建议看到这里就结束,但如果想了解更多的花活也可以继续往下看)
使用下面的命令可以使用混合张量并来加速部分moe层
ftllm server fastllm/DeepSeek-V3-0324-INT4 --device cuda --moe_device "{'multicuda:0:3,1:3,cpu:2':15,'cpu':85}"
上述命令中将moe_device设置为"{'multicuda:0:3,1:3,cpu:2':15,'cpu':85}",代表:
15/100的moe层使用混合张量并行,这时候两张显卡和cpu会同时工作,3/8的计算量在显卡0上,3/8的计算量在显卡1上,2/8的计算量在cpu上85/100的moe层运行在cpu上
这样理论上能更进一步提升decode速度,但目前实现效率不高,速度还不如上一步,后续会继续优化