查看训练作业日志
训练日志定义
训练日志用于记录训练作业运行过程和异常信息,为快速定位作业运行中出现的问题提供详细信息。用户代码中的标准输出、标准错误信息会在训练日志中呈现。在ModelArts中训练作业遇到问题时,可首先查看日志,多数场景下的问题可以通过日志报错信息直接定位。
训练日志包括普通训练日志和Ascend相关日志。
- 普通日志说明:当使用Ascend之外的资源训练时仅产生普通训练日志,普通日志中包含训练进程日志、pip-requirement.txt安装日志和ModelArts平台日志。
- Ascend场景日志说明:使用Ascend资源训练时会产生device日志、plog日志、proc log单卡训练日志、MindSpore日志、普通日志。
只有MindSpore+Ascend训练场景下会产生单独的MindSpore日志。其他AI引擎的日志都包含在普通日志中,无法区分。
训练日志的时效性
从日志产生的时效性上可以分为以下3种情况:
- 实时日志:训练作业实时运行时产生,在ModelArts训练作业详情页面上可以查看。
- 历史日志:训练作业结束后,可以在ModelArts训练作业详情页面上查看历史日志,ModelArts系统自动保存30天。
- 永久日志:转存到OBS桶中的训练日志,在创建训练作业时,打开永久保存日志开关设置作业日志路径即可将日志转存至OBS路径。
图2 开启永久保存日志开关
实时日志和历史日志都是标准日志输出,内容上没有区别。Ascend训练场景下,永久日志中会包含Ascend日志,这部分日志内容在ModelArts界面上看不到。
普通日志说明
普通日志中包含训练进程日志、pip-requirement.txt安装日志和ModelArts Standard平台日志。
日志类型 |
说明 |
---|---|
训练进程日志 |
用户训练代码的标准输出。 |
pip-requirement.txt安装日志 |
如果用户有定义pip-requirement.txt文件,会产生pip包安装日志。 |
ModelArts平台日志 |
ModelArts平台产生的系统日志,主要用于运维人员定位平台问题。 |
普通日志的文件格式如下,其中task id为训练作业中的节点id。
统一日志格式:modelarts-job-[job id]-[task id].log 样例:log/modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-worker-0.log
- 单机训练作业只会生成一个日志文件,单机作业的task id默认为worker-0。
- 分布式场景下有多个节点日志文件并存,通过task id区分不同节点,例如:worker-0,worker-1等。
训练进程日志、“pip-requirement.txt”安装日志和ModelArts平台日志都包含在普通日志文件“modelarts-job-[job id]-[task id].log”中。
ModelArts平台日志可以通过关键字在训练的普通日志文件“modelarts-job-[job id]-[task id].log”中筛查,筛查关键字有:“[ModelArts Service Log]”或“Platform=ModelArts-Service”。
- 类型一:[ModelArts Service Log] xxx
[ModelArts Service Log][init] download code_url: s3://dgg-test-user/snt9-test-cases/mindspore/lenet/
- 类型二:time=“xxx” level=“xxx” msg=“xxx” file=“xxx” Command=xxx Component=xxx Platform=xxx
time="2021-07-26T19:24:11+08:00" level=info msg="start the periodic upload task, upload period = 5 seconds " file="upload.go:46" Command=obs/upload Component=ma-training-toolkit Platform=ModelArts-Service
Ascend场景日志说明
使用Ascend资源运行训练作业时,会产生Ascend相关日志。Ascend训练场景下会生成device日志、plog日志、proc log单卡训练日志、MindSpore日志、普通日志。
其中,Ascend训练场景下的普通日志包括训练进程日志、pip-requirement.txt安装日志、ModelArts平台日志、ma-pre-start日志和davincirun日志。
obs://dgg-test-user/snt9-test-cases/log-out/ # 作业日志路径 ├──modelarts-job-9ccf15f2-6610-42f9-ab99-059ba049a41e ├── ascend ├── process_log ├── rank_0 ├── plog # plog日志 ... ├── device-0 # device日志 ... ├── mindspore # MindSpore日志 ├──modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-worker-0.log # 普通日志 ├──modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-proc-rank-0-device-0.txt # proc log单卡训练日志
日志类型 |
日志说明 |
日志文件名 |
---|---|---|
device日志 |
HOST侧用户进程,在DEVICE侧产生的AICPU、HCCP的日志,回传到HOST侧(训练容器)。 如果出现如下情况,则device日志会获取不到。
在训练进程结束后,该日志会生成到训练容器中。其中,使用MindSpore预置框架训练的device日志会自动上传到OBS,使用其他预置框架和自定义镜像训练的device日志如果需要自动上传到OBS,则需要在代码中配置ASCEND_PROCESS_LOG_PATH,具体请参考如下示例。 # set npu plog env ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'` task_name="worker-${VC_TASK_INDEX}" task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name} mkdir -p ${task_plog_path} export ASCEND_PROCESS_LOG_PATH=${task_plog_path} |
“~/ascend/log/device-{device-id}/device-{pid}_{timestamp}.log” 其中,pid是HOST侧用户进程号。 样例: device-166_20220718191853764.log |
plog日志 |
HOST侧用户进程,在HOST侧产生的日志(例如:ACL /GE)。 plog日志会生成到训练容器中。其中,使用MindSpore预置框架训练的plog日志会自动上传到OBS,使用自定义镜像训练的plog日志如果需要自动上传到OBS,则需要在代码中配置ASCEND_PROCESS_LOG_PATH,具体请参考如下示例。 # set npu plog env ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'` task_name="worker-${VC_TASK_INDEX}" task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name} mkdir -p ${task_plog_path} export ASCEND_PROCESS_LOG_PATH=${task_plog_path} |
“~/ascend/log/plog/plog-{pid}_{timestamp}.log” 其中,pid是HOST侧用户进程号。 样例:plog-166_20220718191843620.log |
proc log |
proc log是单卡训练日志重定向文件,方便用户快速定位对应计算节点的日志。使用自定义镜像训练的作业不涉及proc log;使用预置框架训练的proc log日志会生成到训练容器中,且自动保存到OBS。 |
“[modelarts-job-uuid]-proc-rank-[rank id]-device-[device logic id].txt”
样例: modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-proc-rank-0-device-0.txt |
MindSpore日志 |
使用MindSpore+Ascend训练时会产生单独的MindSpore日志。 MindSpore日志会生成到训练容器中。其中,使用MindSpore预置框架训练的plog日志会自动上传到OBS,使用自定义镜像训练的plog日志如果需要自动上传到OBS,则需要在代码中配置ASCEND_PROCESS_LOG_PATH,具体请参考如下示例。 # set npu plog env ma_vj_name=`echo ${MA_VJ_NAME} | sed 's:ma-job:modelarts-job:g'` task_name="worker-${VC_TASK_INDEX}" task_plog_path=${MA_LOG_DIR}/${ma_vj_name}/${task_name} mkdir -p ${task_plog_path} export ASCEND_PROCESS_LOG_PATH=${task_plog_path} |
MindSpore的日志介绍请参见MindSpore官网。 |
普通训练日志 |
普通训练日志会生成到训练容器的“/home/ma-user/modelarts/log”目录中,且自动上传到OBS。普通训练日志的类型如下所示。
|
合并输出在日志文件modelarts-job-[job id]-[task id].log中。 task id表示实例ID,单节点时取值为worker-0,多节点时取值为worker-0、worker-1、...worker-{n-1},n为实例数。 样例: modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-worker-0.log |
Ascend训练场景下,当训练进程退出后,ModelArts会上传训练容器中的日志文件至“作业日志路径” 参数设置的OBS目录中。在作业详情页可以获取“作业日志路径”,单击OBS地址可以直接跳转到OBS控制台查看日志。
您可以通过ma-pre-start脚本修改默认环境变量配置。
ASCEND_GLOBAL_LOG_LEVEL=3 # 设置日志级别 debug级别为0;info级别为1;warning级别为2;error级别为3。 ASCEND_SLOG_PRINT_TO_STDOUT=1 # 设置plog日志是否在屏幕上显示,1表示默认设置在屏幕上显示日志。 ASCEND_GLOBAL_EVENT_ENABLE=1 # 设置事件级别 不开启Event日志级别为0;开启Event日志级别为1。
ma-pre-start脚本在与训练启动文件同级的目录下放置,命名为ma-pre-start.sh or ma-pre-start.py脚本。
在训练启动文件被执行前,系统会在 /home/work/user-job-dir/ 目录下执行上述ma-pre-start脚本,使用该机制可以更新容器镜像内安装的Ascend RUN包,或者设置一些训练运行时额外需要的全局环境变量。
如何查看训练作业日志
在训练作业详情页,训练日志窗口提供日志预览、日志下载、日志中搜索关键字、系统日志过滤能力。
- 预览
系统日志窗口提供训练日志预览功能,如果训练作业有多个节点,则支持查看不同计算节点的日志,通过右侧下拉框可以选择目标节点预览。
图4 查看不同计算节日志
当日志文件过大时,系统日志窗口仅加载最新的部分日志,并在日志窗口上方提供全量日志访问链接。打开该链接可在新页面查看全部日志。
图5 查看全量日志
- 如果全部日志超过500M,可能会引起浏览页面卡顿,建议您直接下载日志查看。
- 预览链接在生成后的一小时内,支持任何人打开并查看。您可以分享链接至他人。
- 请注意日志中不能包含隐私内容,否则会造成信息泄露。
- 下载
训练日志仅保留30天,超过30天会被清理。如果用户需要永久保存日志,请单击系统日志窗口右上角下载按钮下载日志至本地保存,支持批量下载多节点日志。用户也可以在创建训练作业时打开永久保存日志按钮,保存训练日志至指定OBS路径。
针对使用Ascend规格创建的训练作业,部分系统日志暂不支持直接在训练日志窗口下载,请在创建训练作业时指定OBS路径用于保存训练日志。
图6 下载日志
- 搜索关键字
用户可以在系统日志右上角的搜索框搜索关键字,如图7所示。
系统支持高亮关键字并实现搜索结果间的跳转。搜索功能仅支持搜索当前页面加载的日志,如果日志加载不全(请关注页面提示)则需要下载或者通过打开全量日志访问链接进行搜索。全量日志访问链接打开的新页面可以通过Ctrl+F进行搜索。
- 系统日志过滤
图8 系统日志复选框
如果勾选了系统日志复选框,则日志中呈现系统日志和用户日志。如果去勾选,则只显示用户日志。