由于强制使用 torch.float16,CPU 推理出现卡死

作者: ZivkoOther创建于 2026年7月7日更新于 2026年8月6日

**环境** OS: Pop!_OS (Linux) 设备: Intel Core i7 笔记本电脑 (仅 CPU,无 CUDA) **命令:** uv run corridorkey_cli.py --device cpu generate-alphas 出现问题 CLI 允许使用 --device cpu 选项,但代码中有多处无条件地强制使用 torch.float16。 最初,我收到了以下警告: 使用 dtype=torch.float16 的管道无法在 CPU 设备上运行。不建议将它们移至 CPU,因为运行它们会失败。请确保在推理中使用加速器,因为 PyTorch 在此设备上不支持 float16 运算。 进程随后一直处于: 推理输入: 0% 的状态,持续了很长时间。 **调查** 我发现了几处无条件的 FP16 转换: gvm_core/wrapper.py self.pipe = self.pipe.to(self.device, dtype=torch.float16) 以及稍后: batch.to(self.device, dtype=torch.float16) gvm_core/gvm/pipelines/pipeline_gvm.py self.vae.to(dtype=torch.float16) 这些代码即使在选择 --device cpu 时也会执行。 **临时解决方案** 我修改了代码,使 CPU 使用 torch.float32,而 GPU 则继续使用 torch.float16。 例如: self.dtype = torch.float32 if self.device.type == "cpu" else torch.float16 self.pipe = self.pipe.to(self.device, dtype=self.dtype) 并在其他地方使用 self.dtype 而不是硬编码 torch.float16。 对于 VAE,我根据当前设备而改变 dtype,而不是始终强制使用 FP16。 在进行这些更改后,之前的警告消失了,模型加载成功,推理进一步进行。 **问题** CPU 推理是否正式受支持? 如果是,代码是否应该在使用 --device cpu 时自动选择 torch.float32,而不是在多个位置强制使用 torch.float16?

内容来源: nikopueringer/CorridorKey