Nvidia Smi JSON 输出

7
我想在我的系统中添加有关可用GPU和实时监控状态的机器信息。 我正在使用XML输出GPU信息。
$ nvidia-smi -x -q

这个命令将打印出当前GPU状态的输出(例如使用情况、温度等),以格式化的XML(带有定义的DTD)形式。 我的XML输出在这里
目前没有直接从nvidia-smi输出JSON的选项,因此我认为目前唯一的选择是从Node.js将XML转换为JSON。
问题在于我需要将其转换为JSON格式,因此我正在尝试在我的Node应用程序中进行转换。我已经依次使用了几个npm可用的模块,如xml2json、node-xml2js等,但是每个模块都有不同的错误(null、undefined等)。 在浏览器中使用简单的DOMParser(window.DOMParser)将起作用。 似乎这个XML存在错误,因为当我有一个GPU输出像here时,JSON会像在这个gist中展示的那样被正确转换。 我正在使用node spawn调用nvdia-smi命令,然后解析输出,如下所示:
(function() {

var XMLParser = require('./xml2json');

function gpuInfo() {
    var _data='';
    var curl = require('child_process').spawn('nvidia-smi', ['-x','-q']);
    curl.stdout.on('data', function(data) { 
        _data+= new Buffer(data,'utf-8').toString();
     });
    curl.stdout.on('end', function(data) {
        var x2js = new XMLParser();
        var json = x2js.xml_str2json( _data );
        console.log(JSON.stringify( json,null,2));
    });
    curl.on('exit', function(code) {
        if (code != 0) {
            console.log('Failed: ' + code);
        }
    });

}
module.exports = {
    gpuInfo:gpuInfo    
}

在这种情况下,我使用了 修改后的 xml2json 浏览器客户端模块结合 xmldom 模块,但似乎不是一个稳定的解决方案,因此我的解析在这里完成,如下所示:
this.parseXmlString = function(xmlDocStr) {
            if (xmlDocStr === undefined) {
                return null;
            }
            var xmlDoc;
            var DOMParser = require('xmldom').DOMParser;        
            var parsererrorNS = null;
            try {
                xmlDoc = new DOMParser().parseFromString( xmlDocStr, "text/xml" );
                if( parsererrorNS!= null && xmlDoc.getElementsByTagNameNS(parsererrorNS, "parsererror").length > 0) {
                    xmlDoc = null;
                }
            }
            catch(err) {
                xmlDoc = null;
            }
            return xmlDoc;
        };

离开这里了

  1. 还有其他方法可以以JSON格式获取这些信息吗?
  2. 通过一些强大的XML / JSON解析器模块来实现更高效的解决方案?
2个回答

4

尝试使用 https://github.com/Cheedoong/xml2json 进行转换。 它的速度更快,可以像 jq 一样作为二进制工具使用。 您可以运行以下命令:

nvidia-smi -x -q | xml2json | jq

结果将会是这样的:

{
  "nvidia_smi_log": {
    "timestamp": "Thu Aug 29 13:45:26 2019",
    "driver_version": "387.34",
    "attached_gpus": "9",
    "gpu": [
      {
        "@id": "00000000:03:00.0",
        "product_name": "P106-090",
        "product_brand": "GeForce",
        "display_mode": "Disabled",
        "display_active": "Disabled",
        "persistence_mode": "Enabled",
        "accounting_mode": "Disabled",
        "accounting_mode_buffer_size": "1920",
        "driver_model": {
          "current_dm": "N/A",
          "pending_dm": "N/A"
        },
        "serial": "N/A",
        ...

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接