训练性能监控
更新时间:2025-04-23
百舸平台提供了训练过程中的吞吐、训练分阶段耗时以及训练Loss指标,帮助客户实时掌控训练的性能状态,快速发现性能异常,为性能异常排查场景提效
训练性能监控说明
目前针对于性能可观测提供了以下指标:
训练吞吐
训练过程中单位时间内模型能够处理的数据量,它是衡量训练性能的关键指标之一。
监控项 | 说明 |
---|---|
训练吞吐(tokens/卡/秒) | 每张GPU卡每秒能够处理的tokens数量 |
训练吞吐(B tokens/台/天) | 每台服务器每天能够处理的tokens数量(Billion) |
训练分阶段耗时
提供训练过程中每次迭代中不同操作(计算时间/IO时间/通信时间等)的耗时统计(最小值以及最大值),便于对比分析,定位异常。
面板组 | 监控项 | 描述 |
---|---|---|
TP+前向/反向耗时 | forward-backward-time | 完成一次前向传播和反向传播所需的总时间 |
forward-compute-time | 模型进行前向传播,即从输入到输出计算预测结果所需的时间 | |
backward-compute-time | 模型进行反向传播计算预测结果所需的时间 | |
DP通信耗时 | grads-reduce-scatter-time | 在分布式训练中,将梯度规约并分散到不同的计算节点上的时间(通信) |
params-all-gather-time | 在分布式训练中,将不同计算节点上的参数收集起来的时间(通信) | |
layernorm-grads-all-reduce-time | 在分布式训练中,对层归一化(Layer Normalization)操作的梯度进行全规约(all-reduce)操作的时间 | |
embedding-grads-all-reduce-time | 在分布式训练中,对嵌入层(Embedding Layer)的梯度进行全规约操作的时间 | |
PP通信耗时 | forward-recv-time | 在分布式训练或者模型并行中,接收前向计算所需数据的时间(通信 |
forward-send-time | 在分布式训练或者模型并行中,发送前向计算结果数据的时间(通信) | |
backward-recv-time | 在分布式训练或者模型并行中,接收用于反向传播计算的梯度数据的时间(通信) | |
backward-send-time | 在分布式训练或者模型并行中,发送梯度数据以进行下一步计算的时间(通信) | |
forward-send-backward-recv-time | 在模型并行中,同时进行前向传播的发送操作和反向传播的接收操作所需的时间(通信) | |
backward-send-forward-recv-time | 在模型并行中,同时进行反向传播的发送操作和前向传播的接收操作所需的时间(通信) | |
优化器耗时时 | optimizer-time | 优化器在训练过程中执行更新步骤所需的时间 |
optimizer-copy-to-main-grad-time | 梯度数据从辅助存储复制到主存储所用时间 | |
optimizer-unscale-and-check-inf-time | 梯度进行缩放,并检查梯度是否包含无穷大值或NaN值所用时间 | |
optimizer-count-zeros-time | 统计梯度中的零值数量时间 | |
optimizer-inner-step-time | 实际的参数更新步骤所用时间 | |
optimizer-copy-main-to-model-params-time | 主存储中的参数复制回模型参数存储所用时间 | |
其他操作耗时 | batch-generator-time | 从数据集中生成一个批次数据所需的时间,可能包括数据读取、预处理等 |
训练Loss
提供训练过程中的 lm loss 的监控。
监控项 | 说明 |
---|---|
lm loss | “lm loss” 一般指的是 “Language Model Loss”。lm loss 是用来衡量模型生成的文本与实际文本之间的差异程度。在机器学习中,我们通常希望最小化这个损失函数,以便模型能更好地学习数据的分布。 |
使用前提
- 使用新版本的AIAK训练加速镜像,要求镜像版本>=v1.2.7.3
Plain Text
1A800 : registry.baidubce.com/aihc-aiak/aiak-megatron:ubuntu20.04-cu11.8-torch1.14.0-py38_v1.2.7.3_release
2H800 : registry.baidubce.com/aihc-aiak/aiak-megatron:ubuntu22.04-cu12.2-torch2.1.0-py310_v1.2.7.3_release
2.资源池内 CCE Deep Learning Frameworks Operator 组件版本>=1.6.18。查询组件版本或者升级组件版本,可以通过 百舸资源池详情 > 计算资源集群(CCE) > 组件管理 中操作。
- 资源池已经接入百度云Prometheus监控服务。请参考资源池接入Prometheus监控实例。
操作步骤
1.在Cprom中实例中配置采集任务
与训练集合通信带宽监控的采集任务配置一致,如已经配置,则此步骤忽略
在资源池关联的Cprom监控实例中,配置采集任务。
- 登录百舸异构计算平台AIHC控制台。
- 点击 全托管资源池或自运维资源池,找到想要任务所在的资源池名称,点击进入资源池的详情页面。
- 在 资源详情 中,点击 关联监控实例(CPROM) 的实例ID,进入Cprom实例的详情页面。
- 单击 采集配置,进入采集任务配置页面。
- 点击 创建采集任务,采集任务的详情如下,点击 确认 即完成创建。
Plain Text
1job_name: "ftagent"
2scheme: http
3scrape_interval: 15s
4honor_timestamps: true
5metrics_path: /metrics
6kubernetes_sd_configs:
7 - role: pod
8relabel_configs:
9 - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
10 action: keep
11 regex: true
12 - source_labels: [__meta_kubernetes_pod_label_training_kubeflow_org_operator_name]
13 action: keep
14 regex: "pytorchjob-controller"
15 - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
16 action: replace
17 target_label: metrics_path
18 regex: (.+)
19 - source_labels: [__meta_kubernetes_pod_host_ip]
20 action: replace
21 target_label: host_ip
22 regex: (.+)
23 - source_labels: [__meta_kubernetes_pod_node_name]
24 action: replace
25 target_label: node_name
26 regex: (.+)
27 - source_labels: [__meta_kubernetes_namespace]
28 action: replace
29 target_label: namespace
30 - source_labels:
31 [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
32 action: replace
33 regex: ([^:]+)(?::\d+)?;(\d+)
34 replacement: $1:$2
35 target_label: __address__
36 - action: labelmap
37 regex: __meta_kubernetes_pod_label_(.+)
2.创建训练任务
您需要在百舸控制台,使用符合要求的AIAK训练镜像创建训练任务。参照创建任务。
3.查看性能监控
- 登录百舸异构计算平台AIHC控制台。
- 左侧菜单栏单击 分布式训练,进入训练任务列表页面。
- 选择需要查询的训练任务,单击 监控 > 性能监控,即可查询该任务的性能监控大盘。