当前位置: 首页 > 知识库问答 >
问题:

ubuntu - 相同环境下,两个脚本中 torch 的 gpu显示不同?

小牛23057
2024-07-26

大家好 情况是这样的,我有一个A.py的脚本,里边打印以下代码是true:
print(1, torch.cuda.is_available(), torch.__version__)
然后在A.py 里执行命令 os.system('python B.py')
然而在B.py import torch 后 依然打印这句话,但返回确实false:
print(1, torch.cuda.is_available(), torch.__version__),在这个过程中,没有执行过任何程序。然后有个警告:UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 101: invalid device ordinal (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.)

请问什么原因,该如何解决。 版本是:2.4.0+cu121 系统是ubuntu24.04

不知道什么原因,从网上没有找到方案

共有1个答案

唐弘和
2024-07-26

这个问题通常是由于CUDA环境配置不当或者多个CUDA环境冲突导致的。在描述的情况下,A.py能够正常访问GPU,但B.py在由A.py通过os.system调用时无法访问,并提示了一个CUDA相关的错误。

以下是一些可能的解决方案:

  1. 检查CUDA环境变量
    确保你的环境变量(如CUDA_VISIBLE_DEVICESPATHLD_LIBRARY_PATH)在A.py和B.py中都是一致的。特别是CUDA_VISIBLE_DEVICES,它可能限制了CUDA设备的使用。
  2. 避免使用os.system
    os.system会启动一个新的shell环境,这可能会导致环境变量的不一致。如果可能,尝试使用Python的subprocess模块来启动B.py,这样你可以更好地控制环境变量。
  3. 检查CUDA驱动和PyTorch版本
    确保你的CUDA驱动和PyTorch版本是兼容的。在你的情况下,PyTorch版本是2.4.0+cu121,它应该与CUDA 12.1兼容。检查你的CUDA驱动版本是否也是CUDA 12.1。
  4. 检查GPU状态
    在A.py执行后,使用nvidia-smi命令来检查GPU的状态。可能有其他进程正在使用GPU,导致B.py无法访问。
  5. 清理CUDA错误
    在某些情况下,CUDA错误可能需要显式清理。尽管Python的PyTorch接口通常会自动处理这些错误,但在某些情况下,你可能需要调用CUDA API来清理错误状态。这通常不是推荐的做法,除非你非常确定这是问题的根源。
  6. 使用虚拟环境
    考虑使用Python的虚拟环境(如conda或venv)来隔离A.py和B.py的依赖。这有助于确保每个脚本都有其自己的依赖集,不会相互干扰。
  7. 调试日志
    增加日志记录,以便在A.py和B.py中捕获更多关于环境设置和GPU初始化的信息。这有助于识别潜在的问题所在。

如果以上解决方案都不能解决问题,你可能需要更深入地检查你的系统配置和PyTorch/CUDA的安装。在某些情况下,重新安装PyTorch或更新CUDA驱动可能会解决问题。

 类似资料:
  • 这是使用两个不同文本查找元素的正确方法吗?因为该元素在两个不同的环境中有两个不同的文本。 .find()。withText()

  • 译者:keyianpai 创建 Torch 脚本代码 将追踪和脚本化结合起来 Torch 脚本语言参考 类型 表达式 语句 变量解析 python值的使用 调试 内置函数 Torch脚本是一种从PyTorch代码创建可序列化和可优化模型的方法。用Torch脚本编写的代码可以从Python进程中保存,并在没有Python依赖的进程中加载。 我们提供了一些工具帮助我们将模型从纯Python程序逐步转换

  • 变量 self.project_name self.project 有关当前项目的信息 self.response self.task 关于脚本 名称Handler并不重要,但您至少需要继承一个类BaseHandler 可以设置第三个参数来获取任务对象: def callback(self, response, task) 默认情况下,非200响应不会提交回调。使用@catch_status_co

  • 我面临以下异常:中,当我试图显示一个时,该表单包含以前初始化(并显示)的 谢谢

  • 问题内容: 为什么以下语句返回? 我也尝试过在字符串周围使用单引号。我唯一可以评估的方法是使用运算符,而不是 我的猜测是PHP将它视为某种方程式,但似乎有些奇怪。 有人可以详细说明吗? 问题答案: 是float数字格式,因此它们在比较时将转换为数字。 并且都将是因为它们太小。 对于在php中, 如果将数字与字符串进行比较,或者比较涉及 数字字符串 ,则每个字符串将转换为 数字 ,然后以数字方式进行

  • 本文向大家介绍ubuntu环境下python虚拟环境的安装过程,包括了ubuntu环境下python虚拟环境的安装过程的使用技巧和注意事项,需要的朋友参考一下 一. 虚拟环境搭建 在开发中安装模块的方法: pip install 模块名称 之前我们安装模块都是直接在物理环境下安装,这种安装方法,后面一次安装的会覆盖掉前面一次安装的。那如果一台机器上面开发多个项目使用到不同版本的模块呢?怎么样做才能