inference 注意力掩码大小不匹配错误和输入选择的问题

7lrncoxx  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(45)

系统信息 / 系统信息

cuda12.4

是否使用 Docker 运行 Xinference?

  • docker / 是的,使用 Docker
  • pip install / 通过 pip install 安装
  • installation from source / 从源码安装

版本信息 / 版本信息

v0.13.0

用以启动 xinference 的命令

docker run --gpus "device=0" -p 9998:9997 -itd --restart unless-stopped -v pwd : pwd --name xinference-013 registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference:v0.13.0 xinference-local --host 0.0.0.0 --port 9997

复现过程

正文:
你好,
我在某些模型中遇到了以下代码的问题:

for i in range(max_new_tokens):
        if i == 0:
            if model.config.is_encoder_decoder:
                out = model.decoder(
                    input_ids=start_ids,
                    encoder_hidden_states=encoder_output,
                    use_cache=True,
                )
                logits = model.lm_head(out[0])
            else:
                out = model(torch.as_tensor([input_ids], device=device), use_cache=True)
                logits = out.logits
            past_key_values = out.past_key_values
        else:
            if model.config.is_encoder_decoder:
                out = model.decoder(
                    input_ids=torch.as_tensor(
                        [[token] if not sent_interrupt else output_ids], device=device
                    ),
                    encoder_hidden_states=encoder_output,
                    use_cache=True,
                    past_key_values=past_key_values if not sent_interrupt else None,
                )
                sent_interrupt = False

                logits = model.lm_head(out[0])
            else:
                out = model(
                    input_ids=torch.as_tensor(
                        [[token] if not sent_interrupt else output_ids], device=device
                    ),
                    use_cache=True,
                    past_key_values=past_key_values if not sent_interrupt else None,
                )
                sent_interrupt = False
                logits = out.logits
            past_key_values = out.past_key_values

我收到的错误信息是:

[address=0.0.0.0:43813, pid=2037] Attention mask should be of size(1,1, 1, 20), but is torch.Size([1, 1, 1, 1])

这似乎是一个注意力掩码大小不匹配的问题。我希望了解是什么原因导致了这个错误以及如何解决它。
此外,我对代码中的输入选择还有疑问。我注意到在后续迭代(当 i > 0 时),代码仅使用上一个生成的令牌作为输入:

input_ids=torch.as_tensor([[token] if not sent_interrupt else output_ids], device=device)

为什么使用最后一个令牌作为输入而不是完整的 output_ids?这是设计上的特定原因吗?这种做法对模型的性能和输出有什么影响?
感谢您的时间和帮助。
您是否希望我修改或扩展此问题的部分内容?

预期行为 / 期待表现

澄清是否有意将最后一个令牌用作输入以及这样做是否最优,还是使用完整的 output_ids 更合适。
感谢您的时间和帮助。

相关问题