PyTorch可检测GPU但spaCy 3 NER训练时提示未检测到GPU求助
问题描述
设备搭载Tesla T4 GPU,GPU规格如下:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 515.86.01 Driver Version: 515.86.01 CUDA Version: 11.7 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 | | N/A 68C P0 29W / 70W | 567MiB / 15360MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 1352 C python 563MiB | +-----------------------------------------------------------------------------+
通过PyTorch命令验证,GPU可正常使用:
>>> import torch >>> torch.backends.cudnn.is_available() True >>> torch.backends.cudnn.version() 8500 >>> torch.cuda.is_available() True >>> torch.zeros(1).cuda() tensor([0.], device='cuda:0') >>> torch.cuda.get_device_name() 'Tesla T4'
执行spaCy3 NER模型训练命令:
python3 -m spacy train configs/config.cfg --output training/ --path.train corpus/train.spacy --path.dev corpus/train.spacy --gpu-id 0
出现错误:
ValueError: No GPU devices detected
当前环境:Python 3.10.6,PyTorch 1.13.1+cu117,已确认版本兼容且GPU可执行其他常规任务,未找到有效解决方案。
可行的解决步骤
- 安装/修复spaCy的GPU支持:执行
pip install spacy[cuda117](匹配你的CUDA 11.7版本),确保spaCy关联上CUDA依赖;若已安装,可尝试重新安装修复组件。 - 验证spaCy的GPU检测能力:在Python交互环境运行以下代码,确认spaCy能否识别GPU:
若返回import spacy from thinc.api import has_gpu, require_gpu print(has_gpu()) print(require_gpu(0)) # 尝试调用GPU 0False,说明Thinc库(spaCy底层依赖)未正确适配CUDA,需检查Thinc版本与PyTorch、CUDA的兼容性。 - 生成GPU适配的配置文件:用spaCy自动生成支持GPU的NER训练配置,替换原配置后重试:
python3 -m spacy init config configs/gpu_config.cfg --lang zh --pipeline ner --optimize efficiency --gpu - 检查环境变量:确保设置
CUDA_VISIBLE_DEVICES=0,让spaCy能识别到GPU设备。 - 排查权限问题:若在容器/虚拟环境中运行,确认当前用户拥有GPU设备访问权限,可临时用
sudo执行训练命令测试(仅用于排查,不推荐长期使用)。
内容的提问来源于stack exchange,提问作者majid bhatti
相关产品推荐
相关产品推荐

