
# 查看训练作业日志
#### 场景描述
训练日志记录了训练作业的运行过程和异常信息，帮助用户快速定位作业运行中出现的问题。用户代码中的标准输出和标准错误信息都会在训练日志中显示。
当在ModelArts中遇到训练作业问题时，用户可以首先查看日志，大多数情况下，问题可以通过日志中的报错信息直接定位。
训练日志包括普通训练日志和Ascend相关日志。
- [普通日志]：当使用Ascend之外的资源训练时仅产生普通训练日志，普通日志中包含训练进程日志、pip-requirement.txt安装日志和ModelArts平台日志。
- [Ascend场景日志]：使用Ascend资源训练时会产生device日志、plog日志、proc log单卡训练日志、MindSpore日志、普通日志。
图1ModelArts训练日志   
![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000002010106029.png "点击放大")
![](https://support.huaweicloud.com/develop-modelarts/public_sys-resources/note_3.0-zh-cn.png)
只有MindSpore+Ascend训练场景下会产生单独的MindSpore日志。其他AI引擎的日志都包含在普通日志中，无法区分。
#### 训练日志的时效性
从日志产生的时效性上可以分为以下3种情况：
- 实时日志：训练作业实时运行时产生，在ModelArts训练作业详情页面上可以查看。
- 历史日志：训练作业结束后，可以在ModelArts训练作业详情页面上查看历史日志，ModelArts系统自动保存30天。
- 永久日志：转存到OBS桶中的训练日志，在创建训练作业时，打开永久保存日志开关设置作业日志路径即可将日志转存至OBS路径。
  图2开启永久保存日志开关   
  ![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000002533307791.png "点击放大")
  
  
实时日志和历史日志都是标准日志输出，内容上没有区别。Ascend训练场景下，永久日志中会包含Ascend日志，这部分日志内容在ModelArts界面上看不到。
 #### 普通日志
普通日志中包含训练进程日志、pip-requirement.txt安装日志和ModelArts平台日志。
表1普通日志类型 
| 日志类型                    | 说明                                        |
|:---|:---|
| 训练进程日志                  | 用户训练代码的标准输出。                              |
| 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日志。
Ascend日志结构举例说明如下：
```
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单卡训练日志
```
表2Ascend场景下日志说明 
| 日志类型        | 日志说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 日志文件名                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|
| device日志    | HOST侧用户进程，在DEVICE侧产生的AICPU、HCCP的日志，回传到HOST侧（训练容器）。 如果出现如下情况，则device日志会获取不到。 - 节点异常重启  - 被主动停止的节点   在训练进程结束后，该日志会生成到训练容器中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | "\~/ascend/log/device-{device-id}/device-{pid}_{timestamp}.log" 其中，pid是HOST侧用户进程号。 样例： device-166_20220718191853764.log                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| plog日志      | HOST侧用户进程，在HOST侧产生的日志（例如:ACL /GE）。 plog日志会生成到训练容器中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | "\~/ascend/log/plog/plog-{pid}_{timestamp}.log" 其中，pid是HOST侧用户进程号。 样例：plog-166_20220718191843620.log                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| proc log    | proc log是单卡训练日志重定向文件，方便用户快速定位对应计算节点的日志。使用MindSpore预置框架，RankTable启动的训练的proc log日志会生成到训练容器中，且自动保存到OBS。 使用MindSpore自定义镜像或其他框架镜像训练的作业不涉及proc log。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | "\[modelarts-job-uuid\]-proc-rank-\[rank id\]-device-\[device logic id\].txt" - device id为本次训练作业的NPU卡编号，取值单卡为0，8卡为0\~7。 例如：Ascend规格为 8\*Snt9时，device id取值为0\~7；Ascend规格为 1\*Snt9时，device id取值为0。   - rank id为本次训练作业的全局NPU卡编号，取值为0\~实例数\*卡数-1，单个实例下，rank id与device id取值相同。   样例： modelarts-job-95f661bd-1527-41b8-971c-eca55e513254-proc-rank-0-device-0.txt |
| MindSpore日志 | 使用MindSpore+Ascend训练时会产生单独的MindSpore日志。 MindSpore日志会生成到训练容器中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | MindSpore的日志介绍请参见[MindSpore官网](https://www.mindspore.cn/docs/zh-CN/r2.0/index.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| 普通训练日志      | 普通训练日志会生成到训练容器的"/home/ma-user/modelarts/log"目录中，且自动上传到OBS。普通训练日志的类型如下所示。 - ma-pre-start日志（Ascend场景特有）：如果用户有定义ma-pre-start脚本，会产生该脚本执行日志。  - davincirun日志（Ascend场景特有）：Ascend训练进程通过davincirun.py文件启动，该启动文件产生的日志。  - 训练进程日志：用户训练代码的标准输出。  - pip-requirement.txt安装日志：如果用户有定义pip-requirement.txt文件，会产生pip包安装日志。  - ModelArts平台日志：ModelArts平台产生的系统日志，主要用于运维人员定位平台问题。   | 合并输出在日志文件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控制台查看日志。
图3日志存放路径   
![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000002435280128.png)
您可以通过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包，或者设置一些训练运行时额外需要的全局环境变量。
#### 查看训练作业日志
在训练作业详情页，训练日志窗口提供日志预览、日志下载、日志中搜索关键字、系统日志过滤能力。
- 预览 界面默认显示"用户日志"，可以根据需要选择"系统日志"和"全量日志"查看日志详情。
  1. 用户日志：用户训练代码的标准输出。
  
  2. 系统日志：ModelArts平台产生的系统日志，主要用于运维人员定位平台问题。
  
  3. 全量日志：包括用户日志和系统日志。当选择全量日志时，会显示当前全量日志文件大小。
  
  
  系统日志窗口提供训练日志预览功能，如果训练作业有多个计算节点，则支持查看不同计算节点的日志，通过右侧下拉框可以选择目标节点预览。
  当日志文件过大时，日志窗口仅加载最新的部分日志，并在日志窗口上方提供全量日志访问链接。打开该链接可在新页面查看全部日志。
  图4日志预览   
  ![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000002526498015.png "点击放大")
  
  ![](https://support.huaweicloud.com/develop-modelarts/public_sys-resources/note_3.0-zh-cn.png)
  - 如果全部日志超过500M，可能会引起浏览页面卡顿，建议您直接下载日志查看。
  
  - 预览链接在生成后的一小时内，支持任何人打开并查看。您可以分享链接至他人。
  
  - **请注意日志中不能包含隐私内容，否则会造成信息泄露。**
    
- 下载 训练日志仅保留30天，超过30天将被清理。如果用户需要永久保存日志，请单击日志窗口右上角"下载"按钮下载日志至本地保存，支持批量下载多节点日志。用户也可以在创建训练作业时打开永久保存日志按钮，保存训练日志至指定OBS路径。
  下载日志时默认下载全量日志。
  针对使用Ascend规格创建的训练作业，部分系统日志暂不支持直接在训练日志窗口下载，请在创建训练作业时指定OBS路径用于保存训练日志。
  
- 搜索关键字 用户可以在日志搜索框搜索关键字，查询指定日志内容。
  系统支持高亮关键字并实现搜索结果间的跳转。搜索功能仅支持搜索当前页面加载的日志，如果日志加载不全（请关注页面提示）则需要下载或者通过打开全量日志访问链接搜索。全量日志访问链接打开的新页面可以通过Ctrl+F搜索。
  
- 查看动态路由加速日志 当训练作业的实例数大于或等于3，环境变量配置了"ROUTE_PLAN=true"，且使用的是Ascend资源时，则可以根据Rank-ID查看动态路由加速的日志，还可以查看训练作业是否启用了动态路由加速。
  图5查看动态路由加速日志   
  ![](https://support.huaweicloud.com/develop-modelarts/figure/zh-cn_image_0000002229127400.png "点击放大") 
 
