如何解决“RuntimeError: CUDA error: invalid device ordinal”错误?

19

我正在尝试运行这段代码。我不知道有什么问题,但是这段代码无法运行。我也不知道如何解决这个问题。

import cv2
from facial_emotion_recognition import EmotionRecognition

emotion_detector = EmotionRecognition(device='gpu', gpu_id=1)
camera = cv2.VideoCapture(0)

while True:
    image = camera.read()[1]
    image = emotion_detector.recognise_emotion(image, return_type='BGR')
    cv2.imshow('Camera', image)

    key = cv2.waitKey(1)
    if key == 27:
        break

camera.release()
cv2.destroyAllWindows()

但是我遇到了这个错误:

Traceback (most recent call last):
  File "/home/fahim/Documents/Python_projects/Python tutorials/pantech AI Master/Computer_Vision/Day 8 Face emotion recognition/emotion.py", line 4, in <module>
    emotion_detector = EmotionRecognition(device='gpu', gpu_id=1)
  File "/home/fahim/anaconda3/envs/Computer_Vision/lib/python3.7/site-packages/facial_emotion_recognition/facial_emotion_recognition.py", line 25, in __init__
    self.network = NetworkV2(in_c=1, nl=32, out_f=7).to(self.device)
  File "/home/fahim/anaconda3/envs/Computer_Vision/lib/python3.7/site-packages/torch/nn/modules/module.py", line 607, in to
    return self._apply(convert)
  File "/home/fahim/anaconda3/envs/Computer_Vision/lib/python3.7/site-packages/torch/nn/modules/module.py", line 354, in _apply
    module._apply(fn)
  File "/home/fahim/anaconda3/envs/Computer_Vision/lib/python3.7/site-packages/torch/nn/modules/module.py", line 354, in _apply
    module._apply(fn)
  File "/home/fahim/anaconda3/envs/Computer_Vision/lib/python3.7/site-packages/torch/nn/modules/module.py", line 376, in _apply
    param_applied = fn(param)
  File "/home/fahim/anaconda3/envs/Computer_Vision/lib/python3.7/site-packages/torch/nn/modules/module.py", line 605, in convert
    return t.to(device, dtype if t.is_floating_point() else None, non_blocking)
RuntimeError: CUDA error: invalid device ordinal

Process finished with exit code 1

这是我的电脑配置: GPU:NVIDIA GeForce MX130 CPU:Intel i5-10210U(8)@ 4.200GHz 请帮我解决这个问题。

3个回答

19

尝试更改:

emotion_detector = EmotionRecognition(device='gpu', gpu_id=1)

收件人:

emotion_detector = EmotionRecognition(device='gpu', gpu_id=0)

gpu_id仅在检测到多个GPU时有效,您只似乎有一个GPU,因此由于您要求函数获取第二个GPU(由于我们从0开始计数),因此会引发错误。


我一开始尝试了这个。但不起作用。 得到了这个错误:FileNotFoundError: [Errno 2] No such file or directory: '/home/fahim/anaconda3/envs/Computer_Vision/lib/python3.7/site-packages/facial_emotion_recognition/model/model.pkl' - Fahim kamal Ahmed
@FahimkamalAhmed,看起来你没有model.pkl文件。为了让识别工作正常,你需要一个模型。源文件中应该有一个模型,如果没有,请尝试重新安装包。 - funie200
2
在这种情况下,它确实可以工作。您只是遇到了另一个与原始错误无关的错误。 - Berriel
1
@funie200,是的,你说得对。model.pkl文件在文件中丢失了。我尝试重新安装库,但每次都缺少该文件。所以我从pypi.org下载了tar.z文件,并从那里获取了model.pkl文件,然后将其粘贴到我的库中。现在它可以工作了。现在已经凌晨1点了,我必须说我对自己的工作非常满意。谢谢,伙计。 - Fahim kamal Ahmed

0
在我的情况下,是意外地设置了 CUDA_VISIBLE_DEVICES=0 并尝试将进程设置到非 0 设备。要解决这个问题,您可以运行以下命令:
unset CUDA_VISIBLE_DEVICES

或者

export CUDA_VISIBLE_DEVICES=1,2,3,4,...

根据您拥有/想要使用的GPU数量。

0

如果不是使用
emotion_detector = EmotionRecognition(device='gpu', gpu_id=0)
或类似的函数...请尝试以下解决方法

就像在我的情况中,是由于代码中存在这行代码导致的

torch.set_default_tensor_type('torch.cuda.FloatTensor')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接