故障排除和常见问题#
故障排除#
本页面列出了常见错误及解决方法。
CUDA 内存不足#
如果您遇到内存不足(OOM)错误,可以调整以下参数:
如果在预填充(prefill)阶段出现 OOM,尝试将
--chunked-prefill-size减小到4096或2048。这会节省内存但会减长提示词的预填充速度。如果在解码阶段出现 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/