ktransformers icon indicating copy to clipboard operation
ktransformers copied to clipboard

[Feature] 用4卡跑ds-r1,每个卡只用可4GB左右,可以怎么设置yaml让单卡的显存使用率提升

Open PhzCode opened this issue 7 months ago • 8 comments

Checklist

  • [x] 1. If the issue you raised is not a feature but a question, please raise a discussion at https://github.com/kvcache-ai/ktransformers/discussions. Otherwise, it will be closed.
  • [x] 2. To help the community, I will use Chinese/English or attach an Chinese/English translation if using another language. Non-English/Chinese content without translation may be closed.

Motivation

我使用仓库的DeepSeek-V3-Chat-multi-gpu-4.yaml运行了4卡的deepseek-r1,每个卡只用了4GB左右,但是H20单卡有90GB,可以把部分的逻辑搬移到gpu做吗,现在推理比较慢。可以怎么修改yaml呢?

Image

另外,我把yaml的model.embed_tokens部分改为这样后,会报错cuda和cpu两个设备的错误,model.embed_tokens在代码里默认使用cpu了吗?

- match:
    name: "^model.embed_tokens"
  replace:
    class: "default"
    kwargs:
      generate_device: "cuda:0"
      prefill_device: "cuda:0"

Related resources

No response

PhzCode avatar Apr 29 '25 11:04 PhzCode

可以通过将更多experts放在GPU上的方法利用显存,但目前此方法与CUDA Graph冲突,会导致成倍的性能下降,导致利用更多显存甚至不如当前默认速度。 与CUDA Graph兼容的experts算子正在开发中,不过会晚一段时间

Atream avatar Apr 29 '25 12:04 Atream

@Atream 好的。那embed_tokens放gpu就是会报错的吗?只能放cpu? 另外想问下,把attn的kv_b_proj剔除是出于什么考虑?

Image

PhzCode avatar Apr 29 '25 12:04 PhzCode

embedding实际上只是从一个矩阵中取出一列,放在GPU基本没有收益且占据较大显存,因此放在了CPU上,理论上也可以放在GPU上,但代码里可能会有些错误导致不支持。 kv_b_proj矩阵需要拆分来进行矩阵吸收,所以没有替换。这是后续可以进一步优化的点。不过因为目前性能的主要瓶颈在于CPU上的Moe部分,因此Attention中没有进行详细的优化,还有很多优化点。

Atream avatar Apr 29 '25 13:04 Atream

llama.cpp仓库对sft转gguf的代码中,就是把kv_b_proj矩阵拆违k_b_proj和v_b_proj两个tensor进行存储的。如果要适配ktrans的load形式,需要把转换逻辑的这个部分注释掉。 https://github.com/ggml-org/llama.cpp/blob/master/convert_hf_to_gguf.py#L4764-L4776

MoE效率低,主要是因为算子库不适配,还是框架流程上需要优化呢

PhzCode avatar Apr 30 '25 00:04 PhzCode

llama.cpp仓库对sft转gguf的代码中,就是把kv_b_proj矩阵拆违k_b_proj和v_b_proj两个tensor进行存储的。如果要适配ktrans的load形式,需要把转换逻辑的这个部分注释掉。 https://github.com/ggml-org/llama.cpp/blob/master/convert_hf_to_gguf.py#L4764-L4776

MoE效率低,主要是因为算子库不适配,还是框架流程上需要优化呢

第一个问题应该是最近更新的,之前我们一直使用的是unsloth的GGUF,能够成功运行

MoE的问题需要写新的算子,对框架也有小幅的修改,不然可用性会很低,因此优先级没那么高,会晚一段时间发布

Atream avatar Apr 30 '25 02:04 Atream

bf16的

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: MacColdNET @.> 发送时间: 2025年5月29日 11:29 收件人: kvcache-ai/ktransformers @.> 抄送: PhzCode @.>, Author @.> 主题: Re: [kvcache-ai/ktransformers] [Feature] 用4卡跑ds-r1,每个卡只用可4GB左右,可以怎么设置yaml让单卡的显存使用率提升 (Issue #1232)

PhzCode avatar May 29 '25 03:05 PhzCode

好的,感谢

MacColdNET avatar May 29 '25 04:05 MacColdNET

可以通过将更多experts放在GPU上的方法利用显存,但目前此方法与CUDA Graph冲突,会导致成倍的性能下降,导致利用更多显存甚至不如当前默认速度。 与CUDA Graph兼容的experts算子正在开发中,不过会晚一段时间

我试着修改KExpertsMarlin,试图让他与CUDA Graph兼容,但是并没有起效

xx59469xx avatar Aug 11 '25 07:08 xx59469xx