別詳解)
MXNet Python 日志工具 mxnet.log 完全指南get_logger、輸出格式與日志級(jí)別詳解【免費(fèi)下載鏈接】mxnetLightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more項(xiàng)目地址: https://gitcode.com/gh_mirrors/mxnet1/mxnetmxnet.log是 MXNet Python 包內(nèi)置的日志工具模塊為訓(xùn)練腳本、分布式任務(wù)與內(nèi)部庫提供統(tǒng)一、可辨識(shí)的日志輸出能力。本篇指南將以該模塊的源碼實(shí)現(xiàn)與官方 API 文檔為基準(zhǔn)講解如何通過get_logger創(chuàng)建自定義 Logger、控制日志級(jí)別、將日志寫入文件并深入剖析 MXNet 特有日志格式級(jí)別標(biāo)簽、時(shí)間戳、顏色標(biāo)記的底層實(shí)現(xiàn)幫助你寫出規(guī)范、易排查的訓(xùn)練日志。mxnet.log 模塊是什么mxnet.log模塊位于 python/mxnet/log.py是 MXNet Python 前端中負(fù)責(zé)日志管理的標(biāo)準(zhǔn)入口。它基于 Python 標(biāo)準(zhǔn)庫logging二次封裝主要做了三件事暴露logging模塊的全部日志級(jí)別常量CRITICAL、ERROR、WARNING、INFO、DEBUG、NOTSET保持與標(biāo)準(zhǔn)庫一致提供定制化的_Formatter為每條日志加上單字母級(jí)別標(biāo)簽、月日時(shí)間戳、進(jìn)程號(hào)與源碼位置pathname:funcName:lineno提供get_logger工廠函數(shù)一行代碼即可得到配置完成、可直接使用的 Logger。該模塊在 MXNet Python 包初始化時(shí)即被導(dǎo)入見 python/mxnet/init.py 中的from . import log因此你既可以直接from mxnet.log import get_logger也可以通過mxnet.log訪問其全部接口。其官方 API 文檔入口為 docs/python_docs/python/api/mxnet/log/index.rst??焖偕鲜忠恍写a創(chuàng)建 Logger使用mxnet.log的核心函數(shù)get_logger即可獲得一個(gè)帶 MXNet 專屬格式的 Loggerfrom mxnet.log import get_logger logger get_logger(Test) logger.warn(Hello World) # 輸出示例W0505 00:29:47 3525 stdin:module:1] Hello World如上例所示logger.warn(Hello World)會(huì)打印一條告警日志前綴中依次包含W級(jí)別標(biāo)簽Warning0505 00:29:47月日與時(shí)分秒時(shí)間戳3525進(jìn)程號(hào)PIDstdin:module:1源碼文件、函數(shù)名與行號(hào)。這樣一條日志足以在訓(xùn)練腳本、多進(jìn)程環(huán)境中快速定位問題出處這正是該模塊被設(shè)計(jì)出來的初衷。get_logger 參數(shù)詳解get_logger的完整簽名與默認(rèn)值如下見 python/mxnet/log.pyget_logger(nameNone, filenameNone, filemodeNone, levelWARNING)參數(shù)類型默認(rèn)值說明namestr可選NoneLogger 的名稱傳入后作為logging.getLogger(name)的標(biāo)識(shí)同名 Logger 共享同一個(gè)實(shí)例filenamestr可選None日志輸出文件路徑。提供時(shí)使用logging.FileHandler將日志寫入文件否則輸出到標(biāo)準(zhǔn)流StreamHandlerfilemodestr可選None打開文件的模式僅在提供filename時(shí)生效為None時(shí)默認(rèn)使用追加模式alevelint可選WARNING日志級(jí)別閾值低于該級(jí)別的日志如debug將被過濾可傳入logging.DEBUG等常量控制日志級(jí)別level默認(rèn)值為WARNING意味著默認(rèn)情況下只有WARNING及更嚴(yán)重的日志會(huì)被輸出。如果你需要觀察調(diào)試信息需要顯式調(diào)低級(jí)別import logging from mxnet.log import get_logger # 使用 WARNING 級(jí)別debug 日志被過濾 logger get_logger(Test2, levellogging.WARNING) logger.warn(Hello World) logger.debug(Hello World) # 無輸出因?yàn)榧?jí)別為 logging.WARNING # 使用 DEBUG 級(jí)別debug 日志正常輸出 logger get_logger(Test3, levellogging.DEBUG) logger.debug(Hello World) # D0505 00:31:30 3525 stdin:module:1] Hello Worldlevel參數(shù)直接透傳給標(biāo)準(zhǔn)庫的logger.setLevel(level)見 python/mxnet/log.py因此其語義與 Pythonlogging完全一致CRITICAL ERROR WARNING INFO DEBUG NOTSET。mxnet.log模塊頂部同時(shí)導(dǎo)出了這些級(jí)別常量見 python/mxnet/log.py你可以直接用mxnet.log.DEBUG、mxnet.log.INFO等不必單獨(dú)import logging。初始化邏輯與冪等性從源碼看python/mxnet/log.pyget_logger的執(zhí)行流程為調(diào)用logging.getLogger(name)獲取或創(chuàng)建Logger 實(shí)例僅當(dāng)name非空且該 Logger 尚未標(biāo)記_init_done時(shí)才添加 handler 并設(shè)置級(jí)別通過logger._init_done True打上標(biāo)記保證對(duì)同一名稱重復(fù)調(diào)用不會(huì)重復(fù)添加 handler、重復(fù)打印日志。需要留意當(dāng)name為None時(shí)函數(shù)會(huì)跳過初始化分支直接返回標(biāo)準(zhǔn)庫的 root logger因此建議始終傳入明確的name以便獲得 MXNet 格式的 handler 與級(jí)別設(shè)置。輸出格式與顏色標(biāo)記的實(shí)現(xiàn)剖析MXNet 日志的獨(dú)特觀感來自模塊內(nèi)部的_Formatter類見 python/mxnet/log.py它繼承自logging.Formatter并做了兩項(xiàng)定制。單字母級(jí)別標(biāo)簽_Formatter._get_label將標(biāo)準(zhǔn)庫的數(shù)值級(jí)別映射為單字符標(biāo)簽級(jí)別標(biāo)簽CRITICALCERROREWARNINGWINFOIDEBUGD其他UANSI 顏色與日志模板_Formatter._get_color依據(jù)級(jí)別為整條日志加上 ANSI 顏色轉(zhuǎn)義level WARNING即 WARNING/ERROR/CRITICAL紅色\x1b[31mlevel INFO即 INFO綠色\x1b[32m其余如 DEBUG藍(lán)色\x1b[34m。format方法組合出的最終模板為[顏色標(biāo)簽時(shí)間 進(jìn)程號(hào) pathname:funcName:lineno]顏色復(fù)位 message其中時(shí)間格式為%m%d %H:%M:%S月日 時(shí)分秒與文章開頭的輸出示例一一對(duì)應(yīng)。正因?yàn)樵摳袷絻?nèi)嵌了顏色轉(zhuǎn)義符源碼注釋python/mxnet/log.py明確指出它不適合直接用于文件 handler——文件輸出時(shí)會(huì)保留原始轉(zhuǎn)義序列。這也是默認(rèn)的FileHandler分支不設(shè)置_Formatter的原因。將日志寫入文件訓(xùn)練任務(wù)通常需要把日志持久化到磁盤。get_logger通過filename參數(shù)原生支持文件輸出from mxnet.log import get_logger logger get_logger( nametrain, filenametrain.log, level20, # 等價(jià)于 logging.INFO ) logger.info(Start training...)傳入filename時(shí)模塊內(nèi)部使用logging.FileHandler(filename, mode)創(chuàng)建文件 handler其中mode由filemode參數(shù)決定缺省為a追加寫見 python/mxnet/log.py。若要每次運(yùn)行覆蓋舊日志可顯式傳入filemodewlogger get_logger(train, filenametrain.log, filemodew, levellogging.INFO)從 getLogger 遷移到 get_logger模塊中還保留了一個(gè)駝峰命名的getLogger見 python/mxnet/log.py它是舊版接口如今已被標(biāo)記為deprecatedfrom mxnet.log import getLogger # 不推薦 # 調(diào)用時(shí)會(huì)觸發(fā) DeprecationWarning # getLogger is deprecated, Use get_logger instead.getLogger與get_logger的參數(shù)與行為完全一致內(nèi)部只是轉(zhuǎn)發(fā)調(diào)用并發(fā)出warnings.warn。新代碼請(qǐng)統(tǒng)一使用get_logger避免棄用告警。在訓(xùn)練與回調(diào)場(chǎng)景中的應(yīng)用雖然mxnet.log提供了統(tǒng)一的日志入口MXNet 內(nèi)部各模塊則直接使用 Python 標(biāo)準(zhǔn)庫logging記錄日志兩者共享同一套級(jí)別體系。例如 python/mxnet/callback.py 中的回調(diào)模塊import logging并使用標(biāo)準(zhǔn) Logger 輸出訓(xùn)練進(jìn)度而 python/mxnet/contrib/tensorboard.py、python/mxnet/executor_manager.py 等內(nèi)部模塊同樣如此。這意味著在你的訓(xùn)練腳本中可以用mxnet.log.get_logger(train, levellogging.INFO)創(chuàng)建主日志并用logging.getLogger(train)在子模塊中獲得同一實(shí)例實(shí)現(xiàn)日志統(tǒng)一匯聚與mx.callback.do_checkpoint、mx.callback.Speedometer等回調(diào)配合時(shí)日志級(jí)別、時(shí)間戳與源碼定位信息能讓每個(gè) epoch 的輸出更易閱讀與排查。小結(jié)mxnet.log是 MXNet Python 前端中開箱即用的日志解決方案核心價(jià)值在于統(tǒng)一入口get_logger一行代碼完成 handler 掛載與級(jí)別設(shè)置且重復(fù)調(diào)用安全可辨識(shí)格式單字母級(jí)別標(biāo)簽 月日時(shí)間戳 進(jìn)程號(hào) 源碼定位 顏色標(biāo)記便于終端閱讀與問題溯源文件落盤filename/filemode參數(shù)支持把日志追加或覆蓋寫入文件滿足長時(shí)間訓(xùn)練的需求標(biāo)準(zhǔn)兼容級(jí)別常量與語義完全對(duì)齊 Pythonlogging可與callback、executor_manager等內(nèi)部模塊的日志無縫銜接。實(shí)踐中建議始終為get_logger傳入明確的name訓(xùn)練腳本用levellogging.INFO觀察進(jìn)度、用levellogging.DEBUG排查算子或數(shù)據(jù)問題需要留檔時(shí)配置filename并注意_Formatter的顏色轉(zhuǎn)義僅適用于終端輸出。更多細(xì)節(jié)可閱讀 python/mxnet/log.py 源碼及其官方文檔入口 docs/python_docs/python/api/mxnet/log/index.rst?!久赓M(fèi)下載鏈接】mxnetLightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more項(xiàng)目地址: https://gitcode.com/gh_mirrors/mxnet1/mxnet創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考