前言
之前出过单卡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-8b和deepseek-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 在大批次任务中表现更好(但用户场景未体现此需求)。
结论与建议
根本原因:
Vulkan 的低开销 API 设计、显存管理优化及硬件适配性,使其在 Qwen-14b 这类模型的轻量级推理任务中表现更优;而 CUDA 的初始化成本及旧架构优化不足导致性能劣势。优化方向:
对 CUDA 后端:
启用 CUDA Graph 捕获推理流程以减少内核启动开销。
使用 FP16 或量化技术(如 TensorRT)提升计算密度。
对 Vulkan 后端:
针对复杂任务(如 Q3)优化显存预分配策略,避免首 Token 延迟劣化。
验证驱动版本,确保启用 Vulkan 的最新计算扩展(如
VK_KHR_shader_float16
)。
场景适配:
短文本交互:优先使用 Vulkan(首 Token 快,tok/sec 高)。
长文本生成:若 Vulkan 的 Q3 延迟可优化,仍可优于 CUDA;否则切换至 CUDA 并启用动态批处理。
综上,P104-100 显卡上 Vulkan 的性能优势源于其轻量级设计与硬件适配优化,而 CUDA 的潜力需通过针对性调优释放。