【问题标题】:Nvidia Smi JSON Output英伟达 Smi JSON 输出
【发布时间】:2017-08-03 19:17:33
【问题描述】:

我想输入有关机器可用 GPU 和状态的系统信息以进行实时监控。 我正在使用XML 输出 GPU 信息

$ nvidia-smi -x -q

此命令将打印输出当前 GPU 状态(如使用情况、温度等)以及格式化的 XML(带有定义的 DTD)。 我的 XML 输出是 here

没有直接从nvidia-smi输出到json的选项,所以这时候我看到的唯一选择就是将XML从Node.js转换成JSON。

问题是我需要它作为 JSON,所以我试图在我的 Node 应用程序中转换为 JSON。我依次使用了几个 npm 可用模块,如 xml2json、node-xml2js 等,但每个模块都有不同的错误(null、undefined 等)。 在浏览器中使用简单的 DOMParser (window.DOMParser) 可以代替。 这个 XML 似乎是一个错误,因为当我有一个像 here 这样的 GPU 输出时,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    
}

在这种情况下,我使用的是 modified 版本的 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 解析器模块获得更有效的解决方案?

【问题讨论】:

    标签: json node.js xml nvidia


    【解决方案1】:

    尝试使用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",
            ...
    

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多