系统信息 / 系统信息
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 更合适。
感谢您的时间和帮助。
1条答案
按热度按时间wn9m85ua1#
你使用的是哪个模型?