常见问题#

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

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

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

为了在当前代码中实现更确定的输出,你可以添加--disable-radix-cache并一次只发送一个请求。在这种设置下,结果将大部分是确定的。

我们仍在调查根本原因和潜在的解决方案。短期内,我们可能会引入一种“确定性模式”,该模式使用更多的填充来解决动态批处理引起的方差。这种模式将更加确定,但速度会更慢。

我们有两个问题来跟踪我们的进展: