如何使用bash脚本检查nvidia gpu是否可用?

如何使用bash脚本检查nvidia gpu是否可用?,bash,nvidia,Bash,Nvidia,我想这样做 如果nvidia gpu可用;然后 做点什么 其他的 做点别的 fi 如何使用bash脚本实现这一点?这取决于您的系统和安装的工具。如果,e。g、 ,您可以使用lshw,这可能就足够了: if[[$(lshw-C显示| grep供应商)=~Nvidia];然后 做点什么 其他的 做点别的 fi 说明: lshw列出了您的硬件设备 -C display将其限制为仅显示特征项 grep vendor过滤掉包含供应商规范的行 =~Nvidia检查该行是否与表达式“Nvidia”匹配

我想这样做

如果nvidia gpu可用;然后
做点什么
其他的
做点别的
fi

如何使用bash脚本实现这一点?

这取决于您的系统和安装的工具。如果,e。g、 ,您可以使用
lshw
,这可能就足够了:

if[[$(lshw-C显示| grep供应商)=~Nvidia];然后
做点什么
其他的
做点别的
fi
说明:

  • lshw
    列出了您的硬件设备
  • -C display
    将其限制为仅显示特征项
  • grep vendor
    过滤掉包含供应商规范的行
  • =~Nvidia
    检查该行是否与表达式“Nvidia”匹配
如果不能使用
lshw
,则可以使用
lspci
或从
/proc
文件系统读取值来实现类似的功能


这是可能的,这是工作,您需要有工作的Nvidia驱动程序安装的图形卡。但我认为,没有它们,您的用例就没有意义了。:)

这取决于您的系统和安装的工具。如果,e。g、 ,您可以使用
lshw
,这可能就足够了:

if[[$(lshw-C显示| grep供应商)=~Nvidia];然后
做点什么
其他的
做点别的
fi
说明:

  • lshw
    列出了您的硬件设备
  • -C display
    将其限制为仅显示特征项
  • grep vendor
    过滤掉包含供应商规范的行
  • =~Nvidia
    检查该行是否与表达式“Nvidia”匹配
如果不能使用
lshw
,则可以使用
lspci
或从
/proc
文件系统读取值来实现类似的功能


这是可能的,这是工作,您需要有工作的Nvidia驱动程序安装的图形卡。但我认为,没有它们,您的用例就没有意义了。:)

当它加载
modprobe
insmod
时,您可以执行以下操作

(lsmod | grep -q nameofyourdriver) && echo 'already there' || echo 'load it'

当它加载了
modprobe
insmod
时,您可以执行以下操作

(lsmod | grep -q nameofyourdriver) && echo 'already there' || echo 'load it'

如果
lspci
可用/可接受

#!/usr/bin/env bash

# Some distro requires that the absolute path is given when invoking lspci
# e.g. /sbin/lspci if the user is not root.
gpu=$(lspci | grep -i '.* vga .* nvidia .*')

shopt -s nocasematch

if [[ $gpu == *' nvidia '* ]]; then
  printf 'Nvidia GPU is present:  %s\n' "$gpu"
  echo do_this
else
  printf 'Nvidia GPU is not present: %s\n' "$gpu"
  echo do_that
fi
当处理Optimus之类的双GPU时,事情变得更加复杂

lspci | grep -i vga
输出

01:00.0 VGA compatible controller: NVIDIA Corporation GP107M [GeForce GTX 1050 3 GB Max-Q] (rev a1)
05:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Picasso (rev c2)
2
解决方法之一是计算有多少GPU可用

lspci | grep -ci vga
输出

01:00.0 VGA compatible controller: NVIDIA Corporation GP107M [GeForce GTX 1050 3 GB Max-Q] (rev a1)
05:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Picasso (rev c2)
2
如果有多个VGA输出,只需添加另一个测试

total=$(lspci | grep -ci vga)

if ((total > 1)); then
  echo "$total"
  echo do_this
fi

我正在使用GNU
grep
所以,不确定该标志是否适用于非GNU grep。

如果
lspci
可用/可接受

#!/usr/bin/env bash

# Some distro requires that the absolute path is given when invoking lspci
# e.g. /sbin/lspci if the user is not root.
gpu=$(lspci | grep -i '.* vga .* nvidia .*')

shopt -s nocasematch

if [[ $gpu == *' nvidia '* ]]; then
  printf 'Nvidia GPU is present:  %s\n' "$gpu"
  echo do_this
else
  printf 'Nvidia GPU is not present: %s\n' "$gpu"
  echo do_that
fi
当处理Optimus之类的双GPU时,事情变得更加复杂

lspci | grep -i vga
输出

01:00.0 VGA compatible controller: NVIDIA Corporation GP107M [GeForce GTX 1050 3 GB Max-Q] (rev a1)
05:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Picasso (rev c2)
2
解决方法之一是计算有多少GPU可用

lspci | grep -ci vga
输出

01:00.0 VGA compatible controller: NVIDIA Corporation GP107M [GeForce GTX 1050 3 GB Max-Q] (rev a1)
05:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Picasso (rev c2)
2
如果有多个VGA输出,只需添加另一个测试

total=$(lspci | grep -ci vga)

if ((total > 1)); then
  echo "$total"
  echo do_this
fi

我正在使用GNU
grep
所以,不确定该标志是否适用于非GNU grep。

这是否回答了您的问题@iBug,实际的问题是我应该使用什么命令来验证gpu是否可用?。例如:nvidia smi或nvcc,但如果您是否插入了gpu,这些命令将始终可用,因此我们无法使用。nvidia-smi报告所需信息这是否回答了您的问题@iBug,实际的问题是我应该使用什么命令来验证gpu是否可用?。例如:nvidia smi或nvcc,但如果您是否插入了gpu,这些命令将始终可用,因此我们无法使用。nvidia-smi报告所需信息