亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java獲取nvidia顯卡信息的實(shí)現(xiàn)示例

 更新時(shí)間:2024年02月26日 10:25:08   作者:天使手兒  
現(xiàn)在的需求是要獲取nvidia顯卡的使用情況,本文主要介紹了java獲取nvidia顯卡信息的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下

前言

AI開(kāi)發(fā)通常使用到GPU,但通常使用的是python、c++等語(yǔ)言,java用的則非常少。這也導(dǎo)致了java在gpu相關(guān)的庫(kù)比較少?,F(xiàn)在的需求是要獲取nvidia顯卡的使用情況,如剩余顯存。這里給出兩種較簡(jiǎn)單的解決方案。

基于nivdia-smi工具

顯卡是硬件,當(dāng)然需要操作系統(tǒng)支持相關(guān)的驅(qū)動(dòng)程序。首先要確保的正確安裝了nvidia的相關(guān)驅(qū)動(dòng)程序。輸入命令nvidis-smi后有類似下面的輸出,即證明當(dāng)前機(jī)器已安裝好了驅(qū)動(dòng)程序。我們這個(gè)方案也是基于nvidia-smi這個(gè)命令來(lái)做的。

在這里插入圖片描述

我們可以看到上圖的輸出,表面了當(dāng)前的驅(qū)動(dòng)版本、CUDA版本、顯卡數(shù)量、顯存、顯卡利用率,當(dāng)前使用進(jìn)程等信息。但是明顯是給人來(lái)看的,我們想放到程序中則需要進(jìn)行解析。好在該工具提供了xml格式輸出:

在這里插入圖片描述

于是有了思路:

  • 通過(guò)進(jìn)程調(diào)用nvidia-smi,并獲取xml輸出結(jié)果
  • 解析xml格式,獲取需要的內(nèi)容
  • 將需要的內(nèi)容轉(zhuǎn)為java bean以供使用

具體的xml格式使用"nvidia-smi -q -x"一看便知,我在這里也就不贅述如何解析了。這里給出一個(gè)簡(jiǎn)單的庫(kù),目前只包含了顯存信息的解析,其余內(nèi)容沒(méi)有實(shí)現(xiàn):https://gitee.com/angelhand/vel-koz

基于nvml綁定庫(kù)

上面提到的nvidia-smi工具實(shí)際上是英偉達(dá)基于工具nvml實(shí)現(xiàn)的,這里有對(duì)該工具的一些介紹:https://developer.nvidia.com/nvidia-management-library-nvml。

該工具是一個(gè)c編寫的管理工具,上面文檔有介紹具體的API。工具可以通過(guò)GPU Deployment Kit一并安裝,GPU Deployment Kit又是CUDA Toolkit的一部分。不過(guò)CUDA8.0之后,GPU Deployment Kit不再單獨(dú)提供,而是合并到了CUDA Toolkit里了。什么意思呢,就是CUDA8.0之后,要使用nvml,只需要安裝CUDA Toolkit:https://developer.nvidia.com/cuda-downloads。使用這個(gè)方案是一定要安裝的哦。不過(guò)Windows11環(huán)境下,使用系統(tǒng)更新自動(dòng)安裝好的驅(qū)動(dòng)就可以了,不需要額外下載(40系顯卡31版本驅(qū)動(dòng),舊版本不保證)。

環(huán)境安裝好之后使用https://github.com/henkelmax/nvmlj這個(gè)綁定庫(kù)。這里有同學(xué)要問(wèn)綁定庫(kù)是什么意思,簡(jiǎn)單解釋一下。前面提到的nvml工具是c寫的,提供了一個(gè)nvml.h的頭文件,其他語(yǔ)言要使用就需要對(duì)這些功能做一個(gè)映射(綁定)。這個(gè)頭文件就類似于java中的接口。java對(duì)c的映射可以使用JNI技術(shù),另外還有比較簡(jiǎn)單的JNA。我們這個(gè)庫(kù)就是基于JNA實(shí)現(xiàn)的。下面來(lái)展示如何使用。

首先修改一下源:

<repository>
  <id>henkelmax.public</id>
  <url>https://maven.maxhenkel.de/repository/public</url>
</repository>

然后使用進(jìn)行依賴引入:

<dependency>
  <groupId>de.bommel24.nvmlj</groupId>
  <artifactId>nvmlj</artifactId>
  <version>1.0.2</version>
</dependency>

使用起來(lái)也很簡(jiǎn)單:

public class Main {
    public static void main(String[] args) throws NVMLJException {
        // The path to the nvml library (Defaults to C:/Program Files/NVIDIA Corporation/NVSMI/nvml.dll)
        // windows系統(tǒng)需要這樣設(shè)置
        System.setProperty("nvml.path", "C:\\Windows\\System32\\nvml.dll");
        // 這是我的wsl找到的,實(shí)體機(jī)可以whereis一下
        System.setProperty("nvml.path", "/usr/lib/wsl/lib/libnvidia-ml.so.1");
        NVMLJ.nvmlInit();
        System.out.println(NVMLJ.nvmlDeviceGetCount());
        // 不要忘記關(guān)閉資源
        NVMLJ.nvmlShutdown();
    }
}

這里有個(gè)點(diǎn)需要注意一下,就是代碼里那行System.setProperty()。set的內(nèi)容實(shí)際上就是nvml的動(dòng)態(tài)鏈接庫(kù)。Windows較新版本的目錄就是上面提到的目錄,可以找一下是否存在。Linux下,我使用的是wsl ubuntu22.04系統(tǒng),在上面那個(gè)目錄里。如果你使用的是其他版本的系統(tǒng),可以whereis libnvidia-mi.so.1來(lái)查找一下庫(kù)的具體位置。你可能會(huì)查出來(lái)多個(gè)位置,或者沒(méi)有。那么再查一下libnvidia-ml.so(后面沒(méi)有.1)。具體哪個(gè)管用試試就知道了,不過(guò)通常是會(huì)出現(xiàn)再usrlib/lib32/lib64的子目錄或者子子(子…)目錄下了。

到此這篇關(guān)于java獲取nvidia顯卡信息的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)java獲取nvidia顯卡信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Zookeeper開(kāi)源客戶端框架Curator

    淺談Zookeeper開(kāi)源客戶端框架Curator

    這篇文章主要介紹了淺談Zookeeper開(kāi)源客戶端框架Curator的相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Java?Runnable和Thread實(shí)現(xiàn)多線程哪個(gè)更好你知道嗎

    Java?Runnable和Thread實(shí)現(xiàn)多線程哪個(gè)更好你知道嗎

    這篇文章主要為大家詳細(xì)介紹了Java?Runnable和Thread實(shí)現(xiàn)多線程哪個(gè)更好,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助<BR>
    2022-03-03
  • 總結(jié)Java對(duì)象被序列化的兩種方法

    總結(jié)Java對(duì)象被序列化的兩種方法

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java對(duì)象被序列化的兩種方法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java使用線程池執(zhí)行定時(shí)任務(wù)

    Java使用線程池執(zhí)行定時(shí)任務(wù)

    本文介紹了Java使用線程池執(zhí)行定時(shí)任務(wù),其中ScheduledThreadPool和SingleThreadScheduledExecutor都是可以執(zhí)行定時(shí)任務(wù)的,但是具體怎么執(zhí)行,下面我們一起進(jìn)入文章了解具體詳情吧
    2022-05-05
  • java多線程編程之使用Synchronized塊同步方法

    java多線程編程之使用Synchronized塊同步方法

    synchronized塊來(lái)同步一個(gè)對(duì)象變量,也可以使用synchronized塊來(lái)同步類中的靜態(tài)方法和非靜態(tài)方法,下面使用Synchronized塊同步方法
    2014-01-01
  • Java CAS原子操作詳解

    Java CAS原子操作詳解

    在synchronized的優(yōu)化過(guò)程中我們看到大量使用了CAS操作,CAS全稱Compare And Set(或Compare And Swap),簡(jiǎn)單來(lái)說(shuō)CAS操作就是一個(gè)虛擬機(jī)實(shí)現(xiàn)的原子操作
    2023-02-02
  • Spring Security 強(qiáng)制退出指定用戶的方法

    Spring Security 強(qiáng)制退出指定用戶的方法

    本篇文章主要介紹了Spring Security 強(qiáng)制退出指定用戶的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 詳解Windows?配置Java環(huán)境變量的方法

    詳解Windows?配置Java環(huán)境變量的方法

    這篇文章主要介紹了Windows?配置Java環(huán)境變量,通過(guò)配置JAVA_HOME環(huán)境變量,配置Path環(huán)境變量的過(guò)程解析,給大家詳細(xì)介紹了java環(huán)境變量的配置過(guò)程,需要的朋友可以參考下
    2022-04-04
  • 詳解如何在Java中實(shí)現(xiàn)堆排序算法

    詳解如何在Java中實(shí)現(xiàn)堆排序算法

    這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)堆排序算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java中的"找不到符號(hào)"錯(cuò)誤解決辦法

    Java中的"找不到符號(hào)"錯(cuò)誤解決辦法

    開(kāi)發(fā)中遇到一個(gè)問(wèn)題,當(dāng)我用idea開(kāi)發(fā)工具將新的項(xiàng)目代碼從GitLab上面拉取下來(lái),所有的Maven依賴也導(dǎo)入成功,然后啟動(dòng)項(xiàng)目,結(jié)果報(bào)錯(cuò):java:找不到符號(hào),這篇文章主要給大家介紹了關(guān)于Java中"找不到符號(hào)"錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2023-10-10

最新評(píng)論