草庐IT

带你掌握如何查看并读懂昇腾平台的应用日志

华为云开发者社区 2023-03-28 原文
摘要:本文介绍了昇腾平台日志分类、日志级别设置、日志内容格式,以及如何获取日志文件的方法。

本文分享自华为云社区《如何查看并读懂昇腾平台的应用日志》,作者:昇腾CANN。

当您完成训练/推理工程开发后,将工程放到昇腾平台运行,以调试工程是否正常运行,此时,可能会出现各种各样、五花八门的异常状况。

当问题发生时,我们的第一反应是不是查看日志,看看哪里报错了。昇腾平台有哪些日志呢?日志文件又在哪呢?本期带您了解如何使用昇腾平台的日志功能。

01 了解日志分类

根据工程运行过程中日志产生的场景不同,日志通常被分为以下4类:

  • 调试日志(debug):记录调试级别的相关信息,一般用于跟踪运行路径,如记录函数的进入和退出等,大部分为代码级的信息输出,调试日志用于开发人员定位复杂问题。
  • 操作日志(operation):记录设备操作维护人员下发或通过设置相关的自动化任务下发的操作和操作结果。
  • 安全日志(security):记录系统用户登录、注销和鉴权,增加、删除用户,用户的锁定和解锁,角色权限变更,系统相关安全配置(如安全日志内容配置)变更等活动。
  • 运行日志(run):记录系统的运行状况或执行流程中的一些关键信息,包括异常的状态、动作,关键的事件等。

02 如何获取日志文件

我们现在知道了昇腾AI处理器有4类日志,那我们需要到哪里查看这些日志呢?本节来揭秘。

昇腾AI处理器具有EP和RC两种形态,针对不同的硬件形态,日志文件存放位置不同,需根据实际硬件形态获取。

EP场景日志获取

  • 应用类日志

用户应用进程在Host侧和Device侧产生的日志。例如,一个推理/训练任务下发后,通常与本次推理/训练直接相关的日志都存放在应用类日志中。

这类日志默认存放在“$HOME/ascend/log”路径下,格式如下:

├── debug
│   ├── device-0
│   │   └── device-pid_*.log    //Device侧产生的日志
│   └── plog
│       └── plog-pid_*.log     //Host侧产生的日志
├── operation
│   ├── device-0
│   │   └── device-pid_*.log
│   └── plog
│       └── plog-pid_*.log
├── run
│   ├── device-0
│   │   └── device-pid_*.log
│   └── plog
│       └── plog-pid_*.log
└── security
     ├── device-0
     │   └── device-pid_*.log
     └── plog
          └── plog-pid_*.log
  • 系统类日志

非用户应用进程在Device侧产生的日志,即Device侧常驻进程运行产生的日志通常都在存放在系统类日志中。

这类日志生成时默认存放在Device侧/var/log/npu/slog路径下,需要在Host侧通过msnpureport工具将其导出到Host侧再进行查看。

命令举例:

$Driver_HOME/driver/tools/msnpureport -a

通过msnpureport工具导出到Host侧后,系统类日志按Device侧文件夹存放,格式如下:

├── debug
│   ├── device-os
│       └── device-os_*.log
├── operation
│   ├── device-os
│       └── device-os_*.log
├── run
│   ├── device-os
│       └── device-os_*.log
├──security
│   ├── device-os
│       └── device-os_*.log
└── slog
          └── slogdlog

RC形态日志获取

RC形态日志获取比较简单,不管是应用类日志还是系统类日志,均存放在/var/log/npu/slog路径下。存放格式与EP场景类似:

├── debug
│   ├── device-app-pid
│   │   └── device-app-pid_*.log
│   └── device-os
│       └── device-os_*.log
├── operation
│   ├── device-app-pid
│   │   └── device-app-pid_*.log
│   └── device-os
│       └── device-os_*.log
├── run
│   ├── device-app-pid
│   │   └── device-app-pid_*.log
│   └── device-os
│       └── device-os_*.log
├── security
│   ├── device-app-pid
│   │   └── device-app-pid_*.log
│   └── device-os
│       └── device-os_*.log
└── device-id
          └──device-id_*.log

03 如何读懂日志内容

日志内容严格按照日志规范打印,每条日志格式一致、字段含义明确,便于阅读。日志格式、字段含义如下:

日志内容可以通过cat、grep等命令查看。

04 如何设置日志级别

日志级别定义

不同日志级别打印的日志内容详细程度不同,因此,问题定位时可以使用最详细日志(DEBUG)打印,而验证性能时使用最简日志(ERROR)打印即可。日志功能提供了5种级别供大家选择使用:

说明:各级别日志详细程度:DEBUG > INFO > WARNING > ERROR

设置日志级别

通过上面日志级别介绍,我们了解到可以根据自己需求设置不同的日志级别、打印不同详细程度的日志。那应该如何设置呢?

  • 应用类日志级别设置,通过在Host侧设置ASCEND_GLOBAL_LOG_LEVEL环境变量实现,例如设置INFO级别:
export ASCEND_GLOBAL_LOG_LEVEL=1
  • 系统类日志级别设置,针对EP和RC形态提供了不同的方法。

RC形态通过修改/var/log/npu/conf/slog/slog.conf配置文件、重启日志进程生效。

#note, 0:debug, 1:info, 2:warning, 3:error, 4:null(no output log), default(1)
global_level=1
# Event Type Log Flag, 0:disable, 1:enable, default(1)
enableEvent=1
# note, 0:debug, 1:info, 2:warning, 3:error, 4:null(no output log), 5:invalid(follow global_level)
SLOG=5                                     # Slog
IDEDD=5                                    # ascend debug device agent
DVPP=5                                     # DVPP
CCE=5                                      # CCE

EP形态通过msnpureport工具设置系统类日志级别。例如:

$Driver_HOME/driver/tools/msnpureport –g info

05 更多介绍

关于昇腾平台日志更多介绍,请登录昇腾文档中心查阅。

 

点击关注,第一时间了解华为云新鲜技术~

有关带你掌握如何查看并读懂昇腾平台的应用日志的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  7. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  8. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  9. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  10. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

随机推荐