谷歌Colab训练模型报错No CUDA GPUs are available如何解决
No CUDA GPUs are available报错修复方案
错误根因
你提供的训练代码中设备选择逻辑存在硬编码问题:前3行代码已经实现了自动检测CUDA资源、不存在就回退到CPU运行的兼容逻辑,但最后一行device = torch.device("cuda")直接强制指定设备为CUDA,覆盖了前面的兼容逻辑,当Colab未分配GPU时就会触发该报错。
方案一:修改代码兼容CPU运行(无需CUDA资源)
删除硬编码指定CUDA的代码行,启用自动兼容逻辑即可,修改后设备选择部分代码如下:
def train_model(model, train_loader, val_loader, epoch, loss_function, optimizer, path, early_stop): # 设备选择:自动检测CUDA,不存在则用CPU device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # 注释或删除下方两行硬编码CUDA的代码 #device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') #device = torch.device("cuda") model = model.to(device) # 剩余训练逻辑保持不变
修改后代码会自动适配当前环境的硬件资源,不需要调整其他训练代码即可直接运行。
提示:CPU训练速度远低于GPU,若模型规模大、数据集体量高,训练耗时会明显增长。
方案二:给Colab分配GPU资源(推荐,无需修改代码)
如果希望用CUDA加速训练,可以手动调整Colab运行时配置:
- 点击Colab顶部菜单栏「修改」→「笔记本设置」
- 在弹出窗口的「硬件加速器」选项中选择「GPU」,点击保存
- 等待运行时重启完成后再执行代码,即可正常调用CUDA资源
补充:代码附带的其他逻辑错误
当前验证环节存在两处笔误,会导致输出的验证指标异常:
- 验证AUC计算误用了训练集的标签和预测结果,正确写法为:
val_auc = roc_auc_score(np.array(val_true), np.array(val_y_pred))
- 验证结果打印语句存在格式错误和字段错误,正确写法为:
print("Epoch %d val loss is %.3f and val auc is %.3f" % (i+1, total_eval_loss / count_eval, val_auc))
内容的提问来源于stack exchange,提问作者kams
相关产品推荐
相关产品推荐

