我正在尝试在配备 M1 芯片的 Macbook 上使用我自己的数据集训练 YOLOv7。我知道 CUDA 可与 NVIDA 配合使用,但不适用于 macOS。我尝试通过重新安装与arm兼容的anaconda3和miniforge3来解决这个问题,但我仍然收到此断言错误。
!python train.py --workers 1 --batch-size 1 --epochs 200 --img 640 640 --data data/custom_data.yaml --hyp data/hyp.scratch.custom.yaml --cfg cfg/training/custom_yolov7.yaml --name yolov7-output --weights yolov7.pt
YOLOR 🚀 v0.1-121-g2fdc7f1 torch 1.13.1 CPU
Namespace(weights='yolov7.pt', cfg='cfg/training/custom_yolov7.yaml', data='data/custom_data.yaml', hyp='data/hyp.scratch.custom.yaml', epochs=200, batch_size=1, img_size=[640, 640], rect=False, resume=False, nosave=False, notest=False, noautoanchor=False, evolve=False, bucket='', cache_images=False, image_weights=False, device='', multi_scale=False, single_cls=False, adam=False, sync_bn=False, local_rank=-1, workers=1, project='runs/train', entity=None, name='yolov7-output', exist_ok=False, quad=False, linear_lr=False, label_smoothing=0.0, upload_dataset=False, bbox_interval=-1, save_period=-1, artifact_alias='latest', freeze=[0], v5_metric=False, world_size=1, global_rank=-1, save_dir='runs/train/yolov7-output11', total_batch_size=1)
tensorboard: Start with 'tensorboard --logdir runs/train', view at http://localhost:6006/
hyperparameters: lr0=0.01, lrf=0.1, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.3, cls_pw=1.0, obj=0.7, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.2, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0, paste_in=0.0, loss_ota=1
wandb: Install Weights & Biases for YOLOR logging with 'pip install wandb' (recommended)
from n params module arguments
0 -1 1 928 models.common.Conv [3, 32, 3, 1]
1 -1 1 18560 models.common.Conv [32, 64, 3, 2]
2 -1 1 36992 models.common.Conv [64, 64, 3, 1]
3 -1 1 73984 models.common.Conv [64, 128, 3, 2]
4 -1 1 8320 models.common.Conv [128, 64, 1, 1]
5 -2 1 8320 models.common.Conv [128, 64, 1, 1]
6 -1 1 36992 models.common.Conv [64, 64, 3, 1]
7 -1 1 36992 models.common.Conv [64, 64, 3, 1]
8 -1 1 36992 models.common.Conv [64, 64, 3, 1]
9 -1 1 36992 models.common.Conv [64, 64, 3, 1]
10 [-1, -3, -5, -6] 1 0 models.common.Concat [1]
11 -1 1 66048 models.common.Conv [256, 256, 1, 1]
12 -1 1 0 models.common.MP []
13 -1 1 33024 models.common.Conv [256, 128, 1, 1]
14 -3 1 33024 models.common.Conv [256, 128, 1, 1]
15 -1 1 147712 models.common.Conv [128, 128, 3, 2]
16 [-1, -3] 1 0 models.common.Concat [1]
...
matching_bs[i] = torch.tensor([], device='cuda:0', dtype=torch.int64)
File "/Users/yeti/opt/anaconda3/envs/yolo/lib/python3.10/site-packages/torch/cuda/__init__.py", line 221, in _lazy_init
raise AssertionError("Torch not compiled with CUDA enabled")
AssertionError: Torch not compiled with CUDA enabled
模型训练了 30 个 epoch,但随后会抛出此断言错误。你建议我做什么?
https://github.com/WongKinYiu/yolov7/issues/414
这解决了我的问题
“您好,我现在可以使用 CPU 运行了,我将 loss.py 中的第 786 行到 791 行从 device='cuda:0' 更改为 device='cpu'”
我们需要删除所有 cuda 依赖项。这就是解决我的问题的方法:
就上下文而言,我在 MacOS 上使用以下版本的 torch
火炬==2.1.0
首先,您必须将所有文件中的
.cuda()
替换为 .to(device)
(您可以使用 IDE 的替换功能 来完成此操作)。
然后,打开 build.py 并将
model.to(torch.device(cfg.MODEL.DEVICE))
更改为 model.to(torch.device('cpu'))
。
通过在您的IDE中搜索进行交叉检查,以确保您已删除所有
.cuda()
操作。
结论是,你需要让你的Mac知道它需要使用它的CPU而不是寻找cuda。
此时,错误应该已经解决,但如果仍然没有解决,请尝试在终端中手动设置变量 CUDA_VISIBLE_DEVICES 的值:
导出 CUDA_VISIBLE_DEVICES=""
我希望这有帮助!