不初始化CUDA时如何检查torch与GPU的兼容性
老旧GPU的PyTorch兼容性问题
即便CUDA版本较新,部分老旧GPU仍可能不支持torch运行。
实际运行崩溃报错
/home/maxs/dev/mdb/venv38/lib/python3.8/site-packages/torch/cuda/__init__.py:83: UserWarning: Found GPU%d %s which is of cuda capability %d.%d. PyTorch no longer supports this GPU because it is too old. The minimum cuda capability supported by this library is %d.%d. warnings.warn(old_gpu_warn.format(d, name, major, minor, min_arch // 10, min_arch % 10)) WARNING:lightwood-16979:Exception: CUDA error: no kernel image is available for execution on the device CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1. when training model: <lightwood.model.neural.Neural object at 0x7f9c34df1e80> Process LearnProcess-1:13: Traceback (most recent call last): File "/home/maxs/dev/mdb/venv38/sources/lightwood/lightwood/model/helpers/default_net.py", line 59, in forward output = self.net(input) File "/home/maxs/dev/mdb/venv38/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1051, in _call_impl return forward_call(*input, **kwargs) File "/home/maxs/dev/mdb/venv38/lib/python3.8/site-packages/torch/nn/modules/container.py", line 139, in forward input = module(input) File "/home/maxs/dev/mdb/venv38/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1051, in _call_impl return forward_call(*input, **kwargs) File "/home/maxs/dev/mdb/venv38/lib/python3.8/site-packages/torch/nn/modules/linear.py", line 96, in forward return F.linear(input, self.weight, self.bias) File "/home/maxs/dev/mdb/venv38/lib/python3.8/site-packages/torch/nn/functional.py", line 1847, in linear return torch._C._nn.linear(input, weight, bias) RuntimeError: CUDA error: no kernel image is available for execution on the device CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
已验证的环境条件
报错发生时,已确认以下条件成立:
assert torch.cuda.is_available() == True torch.version.cuda == '10.2'
检测需求
需要在不使用try/catch执行张量转移到GPU操作的前提下,检测不支持torch的老旧GPU,原因如下:
- 张量转移操作会初始化CUDA,单次初始化会占用约2GB内存
- 检查需要在数十个进程中执行,无法承担CUDA初始化带来的额外内存开销
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

