故障排除和常见问题#

故障排除#

本页面列出了常见错误及解决方法。

CUDA 内存不足#

如果您遇到内存不足(OOM)错误,可以调整以下参数:

  • 如果在预填充(prefill)阶段出现 OOM,尝试将 --chunked-prefill-size 减小到 40962048。这会节省内存但会减长提示词的预填充速度。

  • 如果在解码阶段出现 OOM,尝试降低 --max-running-requests

  • 您也可以将 --mem-fraction-static 减小到更小的值,如 0.8 或 0.7。这会减小 KV 缓存内存池的内存使用量,并有助于防止预填充和解码过程中的 OOM 错误。但是,它会限制最大并发数并降低峰值吞吐量。

  • OOM 的另一个常见情况是为长提示词请求输入对数概率(input logprobs),因为这需要大量内存。要解决这个问题,请在采样参数中将 logprob_start_len 设置为仅包含必要的部分。如果您确实需要长提示词的输入对数概率,尝试减小 --mem-fraction-static

CUDA 错误:遇到非法内存访问#

此错误可能是由于内核错误或内存不足问题导致的:

  • 如果是内核错误,解决起来可能比较困难。请在 GitHub 上提交问题。

  • 如果是内存不足问题,有时会报告为这个错误而不是"内存不足"。请参考上述部分了解如何避免 OOM 问题。

服务器挂起#

  • 如果服务器在初始化或运行期间挂起,可能是内存问题(内存不足)、网络问题(nccl 错误)或 sglang 中的其他错误。

    • 如果是内存不足,您可能会在初始化期间或初始化后立即看到 可用内存(avail mem)非常低。在这种情况下,您可以尝试减小 --mem-fraction-static、减小 --cuda-graph-max-bs 或减小 --chunked-prefill-size

  • 其他错误,请在 GitHub 上提交问题。

常见问题#

即使温度设置为 0,结果也不是确定性的#

您可能会注意到,当您两次发送相同的请求时,即使温度设置为 0,引擎的结果也会略有不同。

根据我们最初的调查,这种不确定性源于两个因素:动态批处理和前缀缓存。粗略地说,动态批处理约占不确定性的 95%,而前缀缓存占剩余部分。服务器在后台运行动态批处理。不同的批处理大小可能导致 PyTorch/CuBLAS 分发到不同的 CUDA 内核,从而可能导致微小的数值差异。这种差异在许多层中累积,当批处理大小变化时会导致非确定性的输出。类似地,当启用前缀缓存时,它也可能分发到不同的内核。即使计算在数学上是等价的,来自不同内核实现的小数值差异也会导致最终非确定性的输出。

要在当前代码中实现更确定性的输出,您可以添加 --disable-radix-cache 并一次只发送一个请求。在此设置下,结果将大多是确定性的。

更新: 最近,我们还引入了一种确定性模式,您可以使用 --enable-deterministic-inference 启用它。 有关更多详细信息,请参阅这篇博客文章:https://lmsys.org/blog/2025-09-22-sglang-deterministic/