菜单

沣大哈
发布于 2025-05-09 / 294 阅读
0
0

双卡P104-100跑AI性能

前言

之前出过单卡P104-100的AI性能之类的,这次就来看看双卡的效果怎么样。为什么要组双卡呢?因为想组一个小的家庭服务器,多用途的那种,all in one,也是all in boom哈哈哈。可以用来跑AI,虚拟机组nas,远程操控什么的比较方便。

毕竟宿舍里面空间也不多,两台电脑来回切换也不方便,再加上网络电费什么的,制约因素很多。这次双卡主要是测试跑AI的可行性和效率,到时候成型了应该会更多一点。

七嘴八舌

先说了来,在AI应用的调用中,AI画图时不支持多卡,只能调用单张显卡。所以多卡只在AI训练和大模型推理中才有用。这次的话就只测大模型的推理大模型训练这方面要测也是可以测的,只不过比较麻烦,可以训练往期的AI声音克隆(GPT-SoVITS)模型,这个直观感受比较明显,但不能量化,所以就没有去测了。之后试试B站开源的IndexTTS模型的时候再来详细说说吧。

大模型推理

这次还是采用往常的LM Studio软件推理deepseek-r1-distill-llama-8bdeepseek-r1-distill-qwen-14b两个模型。分别使用CUDA引擎和Vulkan两种后端比较速度,看看谁比较快。

还是老样子的三个问题:

Q1:你好

Q2:你觉得英伟达怎么样?

Q3:你了解英伟达公司的1080显卡吗?

下面就开始丢数据吧:

CUDA

deepseek-r1-distill-llama-8b

Q1:10.99 tok/sec 0.88s to first token

Q2:23.67 tok/sec 0.50s to first token

Q3:21.20 tok/sec 1.59s to first token

第二轮

Q1:20.33 tok/sec 1.74s to first token

Q2:19.64 tok/sec 0.23s to first token

Q3:18.12 tok/sec 1.47s to first token

晚上

第三轮

Q1:27.50 tok/sec 0.12s to first token

Q2:23.12 tok/sec 0.50s to first token

Q3:20.30 tok/sec 1.52s to first token

第四轮

Q1:26.58 tok/sec 0.35s to first token

Q2:23.40 tok/sec 0.12s to first token

Q3:20.54 tok/sec 1.43s to first token

deepseek-r1-distill-qwen-14b

Q1:15.86 tok/sec 0.44s to first token

Q2:14.04 tok/sec 0.25s to first token

Q3:12.62 tok/sec 1.71s to first token

第二轮

Q1:15.65 tok/sec 0.22s to first token

Q2:13.73 tok/sec 0.68s to first token

Q3:12.04 tok/sec 2.04s to first token

第三轮

Q1:16.18 tok/sec 0.20s to first token

Q2:16.18 tok/sec 0.20s to first token

Q3:12.32 tok/sec 1.31s to first token

Vulkan

deepseek-r1-distill-llama-8b

Q1:19.53 tok/sec 0.59s to first token

Q2:19.83 tok/sec 0.97s to first token

Q3:18.69 tok/sec 7.21s to first token

deepseek-r1-distill-qwen-14b

Q1:20.71 tok/sec 0.16s to first token

Q2:19.78 tok/sec 0.21s to first token

Q3:18.67 tok/sec 7.34s to first token

可以发现在CUDA的时候,我测了很多遍。因为在8B模型的时候测出来的数据不准,对比起Vulkan的数据明显慢了很多。这怎么可能呢?对吧?按理来说CUDA的优化肯定是比通用的Vulkan快的,虽然10系没有tensor core(张量核心)的加速,但是也要比Vulkan快的呀!

在晚上的时候我就进行了8B模型的复测,可以发现晚上的数据要明显高于早上的数据,大概是因为中途自动更新了CUDA后端吧。

但有意思的是,在14B模型时,CUDA始终要比Vlukan慢大约6 tokens,我还是复测了一次,还是老样子。这就很神奇了,CUDA跑不过Vulkan,这是为什么呢?

我询问了一下deepseek,它认为P104-100 显卡上 Vulkan 的性能优势源于其轻量级设计与硬件适配优化,而 CUDA 的潜力需通过针对性调优释放。

详细的解释我会放到最后的附录中。

总结

双卡的效率比起单卡来说是快很多的,并不是单纯意义上的共享显存,当然这是LM Studio的功劳。如果要自己设置的话,效率会更高,使用vLLM进行张量并行推理。当然这也更复杂,不太适合新手垃圾佬搞,就使用简单的LM Studio就好了,自动帮你搞定。

附录

根据提供的性能数据和分析,P104-100 显卡在推理 deepseek-r1-distill-qwen-14b 模型时,CUDA 的 Token 生成速率(tok/sec)低于 Vulkan 的可能原因如下:


1. Vulkan 的轻量级 API 设计优势

  • 低开销驱动模型
    Vulkan 作为跨平台的低级 API,其驱动开销显著低于 CUDA。对于 Qwen-14b 这类参数量适中的模型,Vulkan 在任务调度和内存管理上的效率更高,尤其适合小批次或单次推理场景。

    • 数据支持:在简单任务(Q1/Q2)中,Vulkan 的 tok/sec 稳定在 18~20,而 CUDA 仅为 12~16

  • 显存访问优化
    Vulkan 的显存分配策略(如显存池复用)可能更适合 Qwen-14b 的模型结构,减少了数据搬运次数,而 CUDA 的默认显存管理在特定场景下(如频繁动态分配)可能引入额外延迟。


2. CUDA 的初始化与上下文切换开销

  • 首 Token 生成的隐性成本
    CUDA 在首次启动内核时需加载驱动、初始化上下文,而 Vulkan 的显式控制机制(如预编译管线)可能减少了这类开销。

    • 数据支持

      • CUDA 的首 Token 时间在 Q3 任务中为 1.31~2.04s,而 Vulkan 在 Q1/Q2 的首 Token 时间极短(0.16~0.21s)。

      • 尽管 Vulkan 在 Q3 的首 Token 时间骤增(7.34s),这可能与模型复杂任务下的显存压力或后端优化不足有关,但简单任务仍体现其轻量优势。

  • 多轮推理的缓存差异
    CUDA 依赖运行时缓存(如 CUDA Context 缓存),而 Vulkan 通过手动控制资源生命周期(如 Command Buffer 复用),可能在多轮任务中更高效利用硬件资源。


3. 硬件架构适配性

  • Pascal 架构的 Vulkan 优化潜力
    NVIDIA P104-100(Pascal 架构)的 Vulkan 驱动可能针对计算任务进行了特殊优化,尤其是在 FP16/INT8 混合精度支持上,而 CUDA 在此旧架构上的优化可能未完全适配蒸馏模型(如 Qwen-14b)。

    • 推测依据
      Vulkan 的跨平台特性使其更注重通用计算优化,而 CUDA 的优化可能更偏向新架构(如 Ampere/Ada Lovelace)。

  • 并行计算效率
    Vulkan 的计算着色器(Compute Shaders)在并行任务调度上可能更贴合 Qwen-14b 的注意力机制或 FFN 层计算模式,而 CUDA 的线程块分配策略在此模型上存在效率损失。


4. 框架与后端实现差异

  • 模型算子优化差异
    若推理框架(如 ONNX Runtime、TensorRT)的 Vulkan 后端对 Qwen-14b 的算子(如 Rotary Embedding、Sparse Attention)进行了针对性优化(如内核融合),而 CUDA 后端依赖通用实现,可能导致性能差异。

    • 例证
      Vulkan 的 tok/sec 在 Qwen-14b 上稳定高于 CUDA,表明其计算管线更贴合模型结构。

  • 动态批处理支持
    Vulkan 可能更擅长处理动态输入长度或小批次任务,而 CUDA 在大批次任务中表现更好(但用户场景未体现此需求)。


结论与建议

  1. 根本原因
    Vulkan 的低开销 API 设计、显存管理优化及硬件适配性,使其在 Qwen-14b 这类模型的轻量级推理任务中表现更优;而 CUDA 的初始化成本及旧架构优化不足导致性能劣势。

  2. 优化方向

    • 对 CUDA 后端:

      • 启用 CUDA Graph 捕获推理流程以减少内核启动开销。

      • 使用 FP16 或量化技术(如 TensorRT)提升计算密度。

    • 对 Vulkan 后端:

      • 针对复杂任务(如 Q3)优化显存预分配策略,避免首 Token 延迟劣化。

      • 验证驱动版本,确保启用 Vulkan 的最新计算扩展(如 VK_KHR_shader_float16)。

  3. 场景适配

    • 短文本交互:优先使用 Vulkan(首 Token 快,tok/sec 高)。

    • 长文本生成:若 Vulkan 的 Q3 延迟可优化,仍可优于 CUDA;否则切换至 CUDA 并启用动态批处理。

综上,P104-100 显卡上 Vulkan 的性能优势源于其轻量级设计与硬件适配优化,而 CUDA 的潜力需通过针对性调优释放。


评论