训练性能监控
更新时间:2024-09-03
百舸平台提供了训练过程中的吞吐、训练分阶段耗时以及训练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
A800 : registry.baidubce.com/aihc-aiak/aiak-megatron:ubuntu20.04-cu11.8-torch1.14.0-py38_v1.2.7.3_release
H800 : 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实例的详情页面。
- 单击 采集配置,进入采集任务配置页面。
- 点击 创建采集任务,采集任务的详情如下,点击 确认 即完成创建。
job_name: "ftagent"
scheme: http
scrape_interval: 15s
honor_timestamps: true
metrics_path: /metrics
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_label_training_kubeflow_org_operator_name]
action: keep
regex: "pytorchjob-controller"
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
action: replace
target_label: metrics_path
regex: (.+)
- source_labels: [__meta_kubernetes_pod_host_ip]
action: replace
target_label: host_ip
regex: (.+)
- source_labels: [__meta_kubernetes_pod_node_name]
action: replace
target_label: node_name
regex: (.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: namespace
- source_labels:
[__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
2.创建训练任务
您需要在百舸控制台,使用符合要求的AIAK训练镜像创建训练任务。参照创建任务。
3.查看性能监控
- 登录百舸异构计算平台AIHC控制台。
- 左侧菜单栏单击 训练任务,进入训练任务列表页面。
- 选择需要查询的训练任务,单击 监控 > 性能监控,即可查询该任务的性能监控大盘。