与另一篇csdn博客所说的一样,报错原因并非真正原因。他的博客中实际问题是模型加载到了相同设备导致OOM。
而我的情况也是一样,报错信息与实际问题毫无关系。我的实际问题是输入参数与模型所在的设备不一样。
解决方法是,把以下的语句订正,令输入参数放置到当前进程被分配到的设备。如果是"cuda",会默认放置到设备0上。
device = f"cuda:{local_rank}"
...
input_ids = input_ids.to(device="cuda", non_blocking=True)
...
features=video_tensors.to(dtype=torch.float16, device="cuda", non_blocking=True),
input_ids = input_ids.to(device=device, non_blocking=True)
...
features=video_tensors.to(dtype=torch.float16, device=device, non_blocking=True),