文档
注册

数据dump比对场景

通常情况下,用户可以优先选择整网dump数据比对,常见现象为loss不收敛。注意在dump CPU或GPU、NPU数据时,使用的torch版本要保持一致。

单卡场景

  1. 参考工具安装,完成ptdbg_ascend组件包安装。dump整网数据。
    分别dump CPU或GPU以及NPU数据,在PyTorch训练脚本插入dump接口,示例代码如下(下面以NPU为例,CPU或GPU dump基本相同):
    from ptdbg_ascend import register_hook, overflow_check, seed_all, set_dump_path, set_dump_switch, acc_cmp_dump
    # 在main函数开始前固定随机数
    seed_all() 
    
    # 配置dump数据的路径
    set_dump_path("./data/dump", dump_tag='all') 
    
    # 注册dump回调函数
    register_hook(model, acc_cmp_dump) 
    
    ... 
    
    # 在第一个迭代开始的位置开启dump和堆栈模式,同时为保证数据完整性开启dump bool和整型的tensor以及浮点、bool和整型的标量。
    set_dump_switch("ON", mode="api_stack", filter_switch="OFF") 
    ... 
    # 在第一个迭代结束的位置关闭dump
    set_dump_switch("OFF")

    dump文件目录结构如下,dump文件目录结构说明可参考dump文件目录结构

    all_v1.0
    └── rank1
        ├── api_stack_dump
        │   ├── Functional_conv2d_0_forward_input.0.npy
        │   ├── Functional_conv2d_0_forward_output.npy
        │     .....
        │   ├── Torch_relu__9_forward_input.0.npy
        │   └── Torch_relu__9_forward_output.npy
        └── api_stack_dump.pkl
  2. 比对整网数据。
    参考比对脚本compare.py配置示例创建并配置精度比对脚本,以创建compare.py为例,示例代码如下:
    from ptdbg_ascend import compare
    dump_result_param={
        "npu_pkl_path": "./npu/ptdbg_dump_v2.0/rank0/dump.pkl",
        "bench_pkl_path": "./cpu/ptdbg_dump_v2.0/rank0/dump.pkl",
        "npu_dump_data_dir": "./npu/ptdbg_dump_v2.0/rank0/dump",  
        "bench_dump_data_dir": "./cpu/ptdbg_dump_v2.0/rank0/dump",
        "is_print_compare_log": True 
    }
    compare(dump_result_param, "./output", stack_mode=True)
    执行比对:
    python3 compare.py

    脚本中设置了“is_print_compare_log”为True,则部分回显如下所示:

    start comapre: Functional_conv2d_0_forward_input.0
    start comapre: Functional_conv2d_0_forward_input.1
    start comapre: Functional_conv2d_0_forward_output
    start comapre: Functional_batch_norm_0_forward_input.0
    start comapre: Functional_batch_norm_0_forward_input.1
    [Functional_conv2d_0_forward_input.1] Compare result: cosine 0.000649, max_abs_err 0.134957,
    start comapre: Functional_batch_norm_7_forward_input.0
    start comapre: Functional_batch_norm_0_forward_input.2
    start comapre: Functional_batch_norm_0_forward_input.3
    [Functional_conv2d_0_forward_input.0] Compare result: cosine 1.0, max_abs_err 0.000000,
    start comapre: Functional_conv2d_7_forward_output
    start comapre: Functional_batch_norm_0_forward_input.4
    [Functional_batch_norm_0_forward_input.3] Compare result: cosine 1.0, max_abs_err 0.000000,
    start comapre: Functional_batch_norm_7_forward_output
    [Functional_batch_norm_0_forward_input.1] Compare result: cosine 1.0, max_abs_err 0.000000,
    start comapre: Functional_batch_norm_7_forward_input.3
    start comapre: Functional_batch_norm_0_forward_output
    [Functional_batch_norm_0_forward_input.2] Compare result: cosine 1.0, max_abs_err 0.000000,
    start comapre: Functional_batch_norm_7_forward_input.4
    ...

    比对完成后会在指定的输出目录中生成对比结果文件“compare_result_timestamp.csv”,示例文件如下所示。

    图1 示例文件
    图2 比对结果展示
  3. 查看比对结果文件,找出存在问题的API。

    例如在比对结果的csv文件中,通过对比dump出的数值,计算两者的余弦相似度、均方根误差和最大绝对误差,定位和排查NPU算子存在的计算精度问题。筛选出余弦相似度(Cosine)小于0.99,最大绝对值误差(MaxAbsError)大于0.001的第一个API,针对该API执行后续比对操作,分析该API存在的精度问题。

多卡场景

  • 多卡一般为多进程,须保证每个进程都正确调用set_dump_path,或把set_dump_path插入到import语句后,如:
    from ptdbg_ascend import *
    seed_all()
    set_dump_path('./data/dump')

    如此可保证set_dump_path在每个进程都被调用。

  • register_hook需要在set_dump_path之后调用,也需要在每个进程上被调用,建议在搬运模型数据到卡之后调用。识别方法如下:
    • 找到训练代码中遍历epoch的for循环或遍历数据集的for循环,把register_hook放到循环开始前即可。
    • 找到训练代码中调用DDP或者DistributedDataParallel的代码行,把register_hook放到该代码行所在的代码块之后。
    • 若代码中均无以上两种情况,需要保证register_hook在模型定义之后插入,并配置rank参数,示例如下:
      register_hook(model, acc_cmp_dump, rank=rank_id)
  • 两次运行须用相同数量的卡,传入compare_distributed的两个文件夹下须有相同个数的rank文件夹,且不包含其他无关文件,否则将无法比对。

精度工具多卡场景下的精度比对步骤与单卡场景基本一致。不同的是精度比对时需要使用compare_distributed函数进行比对:

多机多卡场景需要每个设备单独执行比对操作。

  1. 参考工具安装,完成ptdbg_ascend组件包安装。创建比对脚本,例如compare_distributed.py。
    from ptdbg_ascend import *
    compare_distributed('npu_dump/dump_conv2d_v1.0', 'gpu_dump/dump_conv2d_v1.0', './output')
  2. 执行比对。
    python3 compare_distributed.py

    完成比对后会生成比对结果文件。

    图3 生成文件
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词