AI开发平台MODELARTS-精度对齐:loss曲线对比
loss曲线对比
训练结束后,在output_dir参数指定目录下会输出trainer_state.json文件,该文件保存了训练过程loss以及learning_rate的log信息。
将GPU设备训练输出的trainer_state.json文件重命名为trainer_state_gpu.json,并复制到NPU节点的容器内,将NPU设备训练输出的trainer_state.json文件重命名为trainer_state_npu.json。
对其进行解析就可以获取loss信息,这里可以使用如下脚本进行loss曲线的绘制。
# compare_metric.py import json import os from typing import List, Dict import matplotlib.pyplot as plt import numpy as np ## 解析 json 文件 def load_trainer_status(file_path): with open(file_path, "r") as f: trainer_status = json.load(f) return trainer_status.get("log_history") def plot_curve(data_source: List[Dict], tags: List[str]): fig, ax = plt.subplots() for tag in tags: # print(data_source[0], len(data_source[0])) # assert all([tag in status.keys() for status in data_source]), f"Tag {tag} is missing for data source." for index, source in enumerate(data_source): y = [] x = [] for log in source: x.append(log.get("step")) y.append(log.get(tag)) ax.plot(x, y, label=f"{tag}_{index}") ax.legend() plt.savefig("loss.png") if __name__ == "__main__": state_npu_path = os.path.join("trainer_state_npu.json") state_gpu_path = os.path.join("trainer_state_gpu.json") state_npu = load_trainer_status(state_npu_path) state_gpu = load_trainer_status(state_gpu_path) plot_curve([state_npu, state_gpu], ["loss"])
对比单卡模式下NPU和GPU训练曲线,发现loss曲线下降趋势不一致。这说明迁移的模型存在精度偏差。
图中蓝色loss_0是NPU迭代曲线,黄色loss_1是GPU的迭代曲线。