PyTorch调用torch.cuda.current_device()报invalid stoi argument错误求助
PyTorch CUDA RuntimeError: invalid stoi argument 问题排查与解决
我业余学习Python和PyTorch,部分API能正常使用,但调用torch.cuda.current_device()时抛出RuntimeError: invalid stoi argument异常,而torch.cuda.is_available()能正常返回True。运行stable_diffusion_webui等GPU相关功能也失败,最终都指向这个异常。
环境信息
- 系统:Windows 11
- Python版本:3.10.8
- PyTorch版本:1.12.1+cu113
- 存在可用GPU硬件
已安装包列表
Package Version ----------------------- --------------- absl-py 1.3.0 addict 2.4.0 antlr4-python3-runtime 4.9.3 basicsr 1.4.2 beautifulsoup4 4.11.1 cachetools 5.2.0 certifi 2022.9.24 charset-normalizer 2.1.1 clip 1.0 colorama 0.4.6 contourpy 1.0.6 cycler 0.11.0 einops 0.4.1 facexlib 0.2.5 ffmpy 0.3.0 filelock 3.8.0 filterpy 1.4.5 font-roboto 0.0.1 fonts 0.0.3 fonttools 4.38.0 ftfy 6.1.1 future 0.18.2 gdown 4.5.3 gfpgan 1.3.5 google-auth 2.14.0 google-auth-oauthlib 0.4.6 grpcio 1.50.0 idna 3.4 imageio 2.22.3 kiwisolver 1.4.4 lark 1.1.2 llvmlite 0.39.1 lmdb 1.3.0 lpips 0.1.4 Markdown 3.4.1 MarkupSafe 2.1.1 matplotlib 3.6.2 networkx 2.8.8 numba 0.56.3 numpy 1.23.3 oauthlib 3.2.2 omegaconf 2.2.3 opencv-python 4.6.0.66 orjson 3.8.1 packaging 21.3 piexif 1.1.3 Pillow 9.2.0 pip 22.2.2 protobuf 3.19.6 pyasn1 0.4.8 pyasn1-modules 0.2.8 pycparser 2.21 pycryptodome 3.15.0 pydantic 1.10.2 pyDeprecate 0.3.2 pydub 0.25.1 pyparsing 3.0.9 pyrsistent 0.19.2 PySocks 1.7.1 python-dateutil 2.8.2 python-multipart 0.0.4 pytz 2022.6 PyWavelets 1.4.1 PyYAML 6.0 regex 2022.10.31 requests 2.28.1 requests-oauthlib 1.3.1 resize-right 0.0.2 rfc3986 1.5.0 rsa 4.9 scikit-image 0.19.3 scipy 1.9.3 setuptools 63.2.0 six 1.16.0 sniffio 1.3.0 soupsieve 2.3.2.post1 tb-nightly 2.11.0a20221103 tensorboard-data-server 0.6.1 tensorboard-plugin-wit 1.8.1 tifffile 2022.10.10 tokenizers 0.12.1 torch 1.12.1+cu113 torchvision 0.13.1+cu113 tqdm 4.64.1 typing_extensions 4.4.0 uc-micro-py 1.0.1 urllib3 1.26.12 wcwidth 0.2.5 websockets 10.4 Werkzeug 2.2.2 wheel 0.37.1 yapf 0.32.0 zipp 3.10.0
问题
- 该问题的成因是什么?我了解该错误的C++含义,但不清楚为何在Python中出现。
- 有什么办法可以解决这个问题?
成因分析
invalid stoi argument本质是C++层尝试将非数字字符串转为整数时失败。在PyTorch CUDA场景下,通常是以下原因:
- CUDA环境变量异常:PyTorch读取CUDA相关环境变量(比如
CUDA_VISIBLE_DEVICES)时,变量值不是合法的设备索引数字,而是空字符串或非数字内容,导致底层调用stoi转换失败。 - PyTorch与CUDA版本不匹配:虽然安装的是
1.12.1+cu113,但系统中可能存在其他版本的CUDA runtime,导致PyTorch读取设备信息时出现解析错误。 - GPU设备索引配置错误:部分工具(如stable_diffusion_webui)会通过配置文件设置GPU设备索引,如果配置值非法,会触发该异常。
解决方法
检查并修复CUDA环境变量
- 打开系统环境变量设置,查找
CUDA_VISIBLE_DEVICES变量,若存在且值为空或非数字(比如字母、特殊字符),直接删除该变量,或设置为合法的设备索引(比如0,对应第一块GPU)。 - 重启终端或IDE,重新运行代码测试。
- 打开系统环境变量设置,查找
重新安装匹配的PyTorch与CUDA
- 先卸载当前PyTorch:
pip uninstall torch torchvision - 确认系统安装的CUDA Toolkit版本(建议使用cu113,与原版本匹配),然后重新安装对应版本的PyTorch:
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113 - 安装完成后,再次验证
torch.cuda.current_device()是否正常。
- 先卸载当前PyTorch:
检查GPU配置文件
若使用stable_diffusion_webui,查看其配置文件(比如webui-user.bat或config.json)中关于GPU设备的设置,确保--gpu-id参数值为合法数字(比如0),而非空或其他非法值。验证GPU设备状态
通过命令nvidia-smi查看GPU设备是否正常识别,确认设备索引是否正确,若设备显示异常,更新NVIDIA显卡驱动到最新版本。
内容的提问来源于stack exchange,提问作者Jamminroot
相关产品推荐
相关产品推荐

