因为电脑是A卡,所以想用pytorch directml来跑yolov5
以前用笔记本来实验(笔记本是N卡 但是pytorch版本没装CUDA 而是按照pytorch directml的要求装的CPU版本然后装direcml插件,微软教程https://learn.microsoft.com/en-us/windows/ai/directml/gpu-pytorch-windows)
到最后一步都是成功的
import torch
tensor1 = torch.tensor([1]).to(dml)
tensor2 = torch.tensor([2]).to(dml)
dml_algebra = tensor1 + tensor2
dml_algebra.item()
3
能成功输出3
但是用yolov5 检测
python detect.py --source ./data/images/bus.jpg --weights yolov5s.pt --device dml
就会报错
不加--device dml 的话用cpu检测就能成功
为什么还要cuda? pytorch-directml不是a卡也能用吗
a卡按理来说用没啥问题,但是你源码改了没有?yolov5的device本身并没有dml的选项吧
根据错误提示,`select_device()` 函数在检测到你请求一个无效的 CUDA 设备 `--device dml` 时触发了断言错误。这表明目前 pytorch-directml 可能不能够在不使用 CUDA 的情况下工作,或者你需要选择正确的设备参数才能工作。
根据 YOLOv5 的文档,如果不指定 `--device` 参数,则默认使用 `--device cpu`。这可能是为什么在不加 `--device dml` 的情况下检测运行成功的原因。
为了解决问题,你可以尝试以下几步:
1. 尝试按照 https://learn.microsoft.com/en-us/windows/ai/directml/gpu-pytorch-windows 的要求:为了使用 PyTorch-DirectML,确保你的 PyTorch 版本未安装 CUDA,并按照 DirectML 插件的指导安装 PyTorch-DirectML,并确保 DirectML 可以正常工作,可以尝试运行其他示例程序。
2. 确认你是否选择了正确的设备。目前,PyTorch 和 PyTorch-DirectML 支持以下设备:
* "cpu"
* "cuda"
* "cuda:X"(X 代表设备号)
请确保你的设备参数与上述设备参数中的一个匹配。在你的情况下,如果你希望使用 PyTorch-DirectML,在指定 `--device` 参数时应该使用 `--device dml`,而不是使用 `--device cuda`。
3. 如果问题仍然存在,你可以尝试在使用 PyTorch-DirectML 运行 YOLOv5 显式地处理第一张图片之前,显式地初始化 DirectML 设备。具体来说,你可以在 `detect.py` 中的 `main()` 函数的第一行添加以下代码:`torch.backends.directml.enable_directml()`
希望这能够帮助你解决问题!
pytorch-directml的作用就是可以使用A卡,所以肯定是可以使用的,但是需要做一些代码的修改,比如你需要在devices.py中,添加如下字段
if get_optimal_device_name() == "dml"
import torch_directml
return torch_directml.device()
让它能够返回A卡的设备名称,不然默认就是加载N卡的一些东西,除此之外可能还需要其它的一些修改,建议你你再找下官方文档和资料看看
可能是由于DirectML并不支持所有的PyTorch操作而引起的,建议使用具有CUDA支持的PyTorch版本来运行YOLOv5,并查看它是否可以正常工作。
在使用yolov5训练时,提示这个错误,查看torch.cuda.is_available()得到的返回值是false
查看nvidia-smi可以看到信息
由于之前使用conda安装的torch1.9.0
这里使用pip重新安装:
pip3 install torch == 1.9.0+cu111 torchvision == 0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
应该就好了
源于chatgpt仅供参考
`invalid cuda` 错误通常表示 PyTorch 无法找到 CUDA 库。这可能是因为您的计算机上没有安装 CUDA,或者 PyTorch 的版本与 CUDA 的版本不兼容。
提示中提到了 `pytorch-directml`,这意味着您在使用 PyTorch-DirectML,在 Windows 上运行 PyTorch 模型,而非使用 Nvidia GPU 的 CUDA。因此,如果您使用的是 DirectML,则应该避免 CUDA 相关错误。
以下是一些可能的解决方案:
1. 确保您已经正确地安装和配置了 PyTorch-DirectML。请检查您是否已经按照官方文档中的说明进行设置,并且您正在运行最新版本的 PyTorch-DirectML。
2. 确认您的计算机满足运行 PyTorch-DirectML 所需的系统要求。特别是,确保您的操作系统版本、CPU 和 GPU 支持 PyTorch-DirectML。
3. 如果您仍然有问题,请尝试卸载并重新安装 PyTorch-DirectML。也许安装过程中出现了错误,导致库文件无法正确加载。
4. 您可以在代码中添加以下语句来手动指定 CPU 运行模式,以帮助您避免 CUDA 相关错误:
```python
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
这将禁用 CUDA 并强制 PyTorch 在 CPU 上运行。注意,这可能会导致模型的运行速度变慢。
如果您仍然无法解决问题,请提供更多详细信息,以便我们能够帮助您找到更好的解决方案。
```
请点击:yolov5官方权重文件下载🔗
底部可以看到
回答部分参考、引用ChatGpt以便为您提供更准确的答案:
根据您提供的信息,您在使用pytorch directml运行yolov5时遇到了问题。您在笔记本电脑上安装了pytorch的CPU版本和directml插件,并且通过将--device dml
参数传递给yolov5的检测脚本来指定使用directml进行推理。但是,当您运行检测脚本时,遇到了错误。
首先,让我们回答您的问题:"为什么还要cuda?pytorch-directml不是a卡也能用吗?"
PyTorch-DirectML是一个针对Windows的PyTorch后端,它利用了DirectML API来在支持DirectX的GPU上执行计算。虽然PyTorch-DirectML可以在非NVIDIA GPU(例如AMD或Intel)上运行,但在某些情况下,使用CUDA进行计算可能仍然是更好的选择。
原因有两个:
综上所述,虽然PyTorch-DirectML可以在非NVIDIA GPU上运行,但对于YOLOv5这样的使用CUDA进行加速的模型,使用CUDA进行计算可能会更好。
引用chatptpytorch-directml
是一个 PyTorch 扩展,它允许在 DirectML(Direct3D GPU)上运行 PyTorch 代码。然而,并非所有的 PyTorch 操作都能直接在 DirectML 上执行。
对于 YOLOv5 这种深度学习模型,它需要大量的计算资源和内存来训练和推理。虽然 pytorch-directml
可以让你使用 A 卡进行加速,但它可能无法满足 YOLOv5 的计算需求。因此,当你尝试使用 --device dml
参数时,可能会遇到错误。
如果你想在 A 卡上运行 YOLOv5,你可以尝试以下方法:
detect.py
时,不使用 --device dml
参数,让 PyTorch 自动选择最佳设备(CPU 或 GPU)。python detect.py --source ./data/images/bus.jpg --weights yolov5s.pt