在各种硬件(3090、4090,以及几台 Mac)上进行了各种速度测试和基准测试,速度比较:4090 VLLM、3090 LCPP、M3Max MLX、M3Max LCPP 与 Qwen-30B-a3b MoE
观察
- 比较快速处理速度更有意思。Token 生成速度基本符合我的预期。
- 不确定为什么 VLLM 处理短提示很慢,而处理长提示却快得多。可能是因为它更擅长处理批量数据?
- 令人惊讶的是,对于这个特定的型号,Qwen3 MoE、带有 MLX 的 M3Max 甚至处理速度都不是太糟糕。
- 尽管输入的提示完全相同,但与 LCPP 还是存在一个 token 差异。不过,一个 token 应该不会对速度造成太大影响。
- 看来您还不能使用 2xRTX-3090 在 VLLM 或 Exllama 上运行 Qwen3 MoE。
- vllm 0.8.5
- MLX-LM 0.24. 和 MLX 0.25.1
- 骆驼.cpp 5215
- 设置 1:2xRTX-4090,VLLM,FP8
- 设置 2:2x3090、Llama.cpp、q8_0、闪存注意事项
- 设置 3:M3Max,MLX,8 位
- 设置 4:M3Max、Llama.cpp、q8_0、flash 注意事项
每行代表不同的配置(机器、引擎)。每行对应一个提示长度。
Machine Engine Prompt Tokens Prompt Processing Speed Generated Tokens Token Generation Speed |
网友1:
感谢您发布这些数据!这周我也在各种硬件(3090、4090,以及几台 Mac)上进行了各种速度测试和基准测试(主要是 llmperf 和 aider/livebench)。这些信息绝对有用!
表格中未显示的一点是整体批处理吞吐量——这一点可能显而易见(但或许对读者有用),我们预计当多个用户或同时对 LLM 发出多个请求时(例如在批处理并行处理文档/行或潜在的代理用例中),VLLM FP8 4090 的性能将完全碾压 llama.cpp 和 mlx_lm.server。目前,Exllama 在这方面应该比 llama.cpp 或 mlx-server 表现更好(看起来基本支持大约在 4 小时前就已在引擎的 dev 分支中发布)。
但我很想能够使用 3090s 在 vllm 或 sglang 中运行 Qwen-30B-a3b,但还没有找到合适的量化器(也许是那些 w4a16 量化器之一?)到目前为止,我发现的最佳批处理吞吐量选项是在不同的端口上为每个 3090 启动一个单独的 llama.cpp 实例,然后使用 litellm 代理对它们进行并发请求负载平衡 - 但感觉应该有一种更简单/更好的方法
说得好,这或许可以解释为什么 VLLM 处理长提示符时速度很快,而处理短提示符时却不行。也许它把长提示符拆分成了多个批次?
网友2:
2x4090 LCPP 的基准测试在哪里呢?或者反过来说,2x3090 VLM 的基准测试在哪里呢?又或者 M3Max VLM 的基准测试在哪里呢?
你基本上会同时不断地改变至少两个(甚至更多)变量,以及机器(不仅仅是 GPU)和干扰代理。这使得它有点没用,带有 VLM 的 2x4090 比带有 LCPP 的 2x3090 更快,但这是因为机器还是因为干扰引擎?目前尚不清楚(根据你提供的数据)。
单个 4090 比单个 3090 更快,但 2x3090 在特定工作负载和 nvlink 下比不支持 nvlink 的 2x4090 更快(或基本跟上)。
我猜测安装了 2x4090 的特定机器通常会比安装了 2x3090 的机器更新/规格更好(更新更快的 RAM、CPU 和其他因素)
我可以理解 MLX 仅适用于 Mac,但 LCPP 几乎可以在任何设备上运行,我怀疑 VLM 至少可以在两台 Nvidia 机器上运行,如果不是在 M3Max 上运行的话。
而且 LCPP 不断少 1 个令牌看起来很奇怪,它真的少了 1 个令牌,还是只是 LCPP 本身发送的一个令牌。
基本上我喜欢你正在尝试做的事情的想法,但执行并不完美,这意味着结论有待解释。
回答:
- VLLM 不支持 rtx-3090 上 fp8 中的特定型号。
- VLLM 不支持 Mac。
- 不知道为什么 LCPP 多了一个 token。我输入了完全相同的提示。
- 显然 4090 上的 LCPP 会比 3090 更快,无需测试来证明这一点。哈哈
网友3:
为什么不也使用 vllm 运行 3090s?
好像不支持, VLLM 支持 RTX 3090,但似乎不支持 Qwen3 MoE FP8 搭配 RTX-3090。我试了好几个小时,最后还是放弃了,在 Runpod 上租了个 RTX-4090。
- 3090 本身不支持 FP8 和原生的 BF16。所以需要 AWQ 量化分析。
- 3090 支持 BF16。VLLM 上下文量化又是另一回事,因此可能更难适配该模型。
网友4:
问:你启用了张量并行吗?你的 vllm 好像很慢。我有双 4090。
答:由于我使用的是 2xrtx-4090,所以我将张量并行大小指定为 2。否则,它无法适配。
此外,为了获得每次完整测试的速度,我使用了他们的 python API from vllm import LLM:。
我先尝试了 vllm serve,结果它给出的是批次快照速度,而不是每次测试的完整运行速度,这可能会造成误导。我当时就觉得哇,这玩意儿真是快得要命。哈哈