text-generation-inference 异步和同步结果在不同代之间产生

6yt4nkrj  于 4个月前  发布在  其他
关注(0)|答案(7)|浏览(144)

系统信息

2023-06-15T04:27:53.010592Z  INFO text_generation_launcher: Runtime environment:                                                                                                                        [30/661]
Target: x86_64-unknown-linux-gnu
Cargo version: 1.69.0
Commit sha: 5ce89059f8149eaf313c63e9ded4199670cd74bb
Docker label: sha-5ce8905
nvidia-smi:
Thu Jun 15 04:27:51 2023
   +-----------------------------------------------------------------------------+
   | NVIDIA-SMI 515.65.07    Driver Version: 515.65.07    CUDA Version: 11.8     |
   |-------------------------------+----------------------+----------------------+
   | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
   | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
   |                               |                      |               MIG M. |
   |===============================+======================+======================|
   |   0  NVIDIA A100-SXM...  On   | 00000000:10:00.0 Off |                  Off |
   | N/A   34C    P0    86W / 400W |  25302MiB / 81920MiB |      0%      Default |
   |                               |                      |             Disabled |
   +-------------------------------+----------------------+----------------------+
   |   1  NVIDIA A100-SXM...  On   | 00000000:16:00.0 Off |                  Off |
   | N/A   30C    P0    64W / 400W |      0MiB / 81920MiB |      0%      Default |
   |                               |                      |             Disabled |
   +-------------------------------+----------------------+----------------------+
   |   2  NVIDIA A100-SXM...  On   | 00000000:49:00.0 Off |                  Off |
   | N/A   31C    P0    73W / 400W |      0MiB / 81920MiB |      0%      Default |
   |                               |                      |             Disabled |
   +-------------------------------+----------------------+----------------------+
   |   3  NVIDIA A100-SXM...  On   | 00000000:4D:00.0 Off |                  Off |
   | N/A   31C    P0    71W / 400W |      0MiB / 81920MiB |      0%      Default |
   |                               |                      |             Disabled |
   +-------------------------------+----------------------+----------------------+
   |   4  NVIDIA A100-SXM...  On   | 00000000:C5:00.0 Off |                  Off |
   | N/A   34C    P0    91W / 400W |  32900MiB / 81920MiB |      0%      Default |
   |                               |                      |             Disabled |
   +-------------------------------+----------------------+----------------------+
   |   5  NVIDIA A100-SXM...  On   | 00000000:CA:00.0 Off |                  Off |
   | N/A   34C    P0    92W / 400W |  33044MiB / 81920MiB |      0%      Default |
   |                               |                      |             Disabled |
   +-------------------------------+----------------------+----------------------+
   |   6  NVIDIA A100-SXM...  On   | 00000000:E3:00.0 Off |                  Off |
   | N/A   33C    P0    96W / 400W |  33044MiB / 81920MiB |      0%      Default |
   |                               |                      |             Disabled |
   +-------------------------------+----------------------+----------------------+
   |   7  NVIDIA A100-SXM...  On   | 00000000:E7:00.0 Off |                  Off |
   | N/A   35C    P0    89W / 400W |  32900MiB / 81920MiB |      0%      Default |
   |                               |                      |             Disabled |
   +-------------------------------+----------------------+----------------------+

   +-----------------------------------------------------------------------------+
   | Processes:                                                                  |

信息

  • Docker
  • 命令行界面(CLI)直接使用

任务

  • 一个官方支持的命令
  • 我自己的修改

复现过程

  1. 我用LLaMa 7B和65B(max_concurrent_request=128)进行了测试。我尝试了单块A100(80GB)设置和在8块A100上进行分片。
  2. 当向服务器发送50个或更多的异步请求时,即使我给出以下参数,我可以看到生成结果会略有变化:
  • top_k=1 & do_sample=false
  • 这里是一个例子:

=> 对于相同的输入,即使我关闭了所有随机性,"什么是深度学习?"也有两到多种不同的生成类型。

预期行为
异步和同步请求对于相同的提示和参数应该具有相同的生成结果。有趣的是,当我以相同数量的请求同步发送时,生成结果是稳定的。从上面的图像中,您还可以看到模型有时会退化。这种行为发生在我用两个不同用户端点同时发送100个异步请求时。

基本上,当我同时发送更多请求时,模型变差

我猜这与连续批处理功能有关?

gev0vcfq

gev0vcfq1#

异步和同步在后端使用相同的函数。然而,混合精度下的矩阵乘法核是非确定性的,当批量大小增加时,可能会导致不同代之间的差异。
当设置top_k = False时,do_sample = False没有任何作用。无论如何,采样都会被激活。top_k = 1可能是奇怪行为的原因。

gtlvzcf8

gtlvzcf82#

你能尝试在不使用top_k的情况下重现这个错误吗?只是使用贪婪解码?我打赌多项式正在做一些奇怪的事情。

参见:$x^{1e0}f^{1}x$

$x^{1e1}f^{1}x$

1dkrff03

1dkrff033#

好的,当我尝试在自定义内核上运行时,似乎生成是稳定的(即使有128个异步请求)。我无法重现错误。然而,我尝试在自定义构建的内核(遵循本地安装步骤)上运行,所以它与上述环境并不完全相同。让我尝试在原始环境中重现它,看看是否有任何不同。
不过,我可以确认一件事:使用 top_k=1top_k=None 的代数肯定是不同的。

3zwjbxry

3zwjbxry4#

@jshin49 是的,top_k=1 并不等同于贪婪。Top k 会从分数 >= 第k高的分数的tokens中进行采样。这意味着如果有k个并列的分数,它可能会从超过k个tokens中进行选择,特别是当k=1时,它会从与最高分并列的所有tokens中随机抽取。贪婪使用argmax,它会确定性地选择具有最高分数和最低id的token。
至少对我来说,这使得k=1在固定随机种子的情况下进行采样比贪婪更可取,因为在使用贪婪时,你可能会意外地偏向id较低的tokens。
请注意,在16位的情况下,这样的分数碰撞非常常见,尤其是在较大的词汇表大小时。

fcy6dtqo

fcy6dtqo5#

关于这个有什么更新吗?

ovfsdjhp

ovfsdjhp6#

请注意,使用16位时,这样的分数碰撞非常常见,尤其是在较大的词汇量的情况下。
对于16位的分数碰撞,您能提供一些示例或相关参考资料吗?@njhill

ou6hu8tu

ou6hu8tu7#

这个问题已经过期,因为它已经打开了30天,没有活动。请移除过期标签或评论,否则将在5天内关闭。

相关问题