使用Paramiko建立SSH连接执行TensorFlow脚本无法识别GPU如何解决
核心原因
Paramiko调用exec_command执行命令时,默认启动的是非登录、非交互式shell,不会加载用户目录下的环境变量配置文件(如.bashrc、.bash_profile、.profile)。你的服务器CUDA路径配置(PATH、LD_LIBRARY_PATH)通常是写在上述用户级配置文件中的,所以Paramiko执行的进程无法找到CUDA动态库,自然识别不到GPU。
而PuTTY建立的是交互登录shell,会完整加载所有用户环境变量,因此可以正常调用GPU。
可行解决方案
- 方案1:执行命令时主动触发登录shell或加载环境配置
修改你的命令拼接逻辑,执行时先加载用户配置,示例代码如下:# 写法1:先加载.bashrc再执行脚本 cmd_to_execute = f"source ~/.bashrc && ./{shFileName}.sh" # 写法2:显式用登录式bash执行命令 cmd_to_execute = f"bash -l -c './{shFileName}.sh'" - 方案2:在待执行的.sh脚本头部添加环境变量配置
直接在你要执行的.sh文件开头写入CUDA路径或者环境加载逻辑,避免依赖shell类型:# 方式A:加载用户环境配置 source ~/.bashrc # 方式B:直接写死CUDA路径(替换为你服务器实际的CUDA安装路径即可) export PATH=/usr/local/cuda-11.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH - 方案3:将CUDA配置写入系统级环境文件
如果你有服务器root权限,可以把CUDA相关的环境变量配置写入/etc/profile、/etc/bash.bashrc这类全局配置文件,所有类型的shell都能读取到配置,无需额外适配。
内容的提问来源于stack exchange,提问作者Bobbick
相关产品推荐
相关产品推荐

