You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch张量赋值异常:目标位置与实际修改位置不符求助

问题分析与解决方案

问题复现代码

import torch

# 创建CPU上的2×2零张量
empty_tensor = torch.zeros(2, 2)
# 创建MPS设备上的1D张量
r_tensor = torch.tensor([4.], device="mps")

# 执行赋值操作
empty_tensor[1, 1] = r_tensor
print(empty_tensor)
# 异常输出:
# tensor([[4., 0.],
#         [0., 0.]])

原因定位

这是PyTorch 2.1 nightly版本中MPS后端跨设备索引赋值的bug:当右侧赋值的张量位于MPS设备,而目标张量在CPU时,单元素索引(如[1,1])的映射逻辑出现错误,导致赋值位置被错误映射到[0,0]。直接赋值Python float时,PyTorch会自动将其转换为CPU张量,避开了跨设备的索引解析问题,因此功能正常。

可行解决方案

  • 方案1:将MPS张量转移到CPU后赋值
empty_tensor[1, 1] = r_tensor.cpu()
  • 方案2:提取张量标量值赋值
empty_tensor[1, 1] = r_tensor.item()
  • 方案3:统一张量设备
    将目标张量也移到MPS设备,避免跨设备操作:
empty_tensor = torch.zeros(2, 2, device="mps")
r_tensor = torch.tensor([4.], device="mps")
empty_tensor[1, 1] = r_tensor

补充说明

该问题属于nightly版本的后端实现bug,后续PyTorch正式版本大概率会修复。若需跟进,可在PyTorch GitHub仓库的issues中搜索相关问题提交反馈。

内容的提问来源于stack exchange,提问作者Camaltra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:04:56