Skip to content

Latest commit

 

History

History

accuracy_test

算子精度测试

算子精度测试是进行不同软硬件环境下算子计算结果验证的工具。

本工具以Pytorch算子Python API为接口进行测试。

算子精度测试的流程分为:

  1. 基准值生成
  2. 在待测芯片上精度验证

基准值生成这一步骤已在英伟达A100 GPU上完成,其生成的数据在 ./a100_data 目录。

算子精度验证参考 cuda算子验证 部分。

Notice: 不同版本的Pytorch、不同的算子库实现、不同的硬件型号均会造成计算结果的不同,本仓库提供的代码和数据仅供参考,不作为最终评测的标准

基准值生成

根据 op_config.py 的算子和参数,运行 cuda_ground_truth_gen.py ,生成算子的基准值数据。包括算子的输入、输出、参数和反向计算得到的梯度。

基准值生成会尝试运行float32float16两种数据类型的计算,并保存在 fp16,fp32两个路径下。

运行命令:

python cuda_ground_truth_gen.py your/output/path

基准值数据将保存在 your/output/path 目录下。

若生成单个算子的测例, 运行命令:

python cuda_ground_truth_gen.py your/output/path op_name(e.g. conv)

若生成conv算子的全部测例, 运行命令:

python cuda_ground_truth_gen.py your/output/path CONV

fp16 不支持的算子:

部分算子/数据类型是当前版本(pytorch1.8)CUDA不支持的,例如:

  • ctc_loss
    • "ctc_loss_cuda" not implemented for 'Half'
  • det
    • "lu_cuda" not implemented for 'Half'
  • eig
    • "eig_cuda" not implemented for 'Half'
  • svd
    • "svd_cuda_gesvdj" not implemented for 'Half'
  • inverse
    • "inverse_cuda" not implemented for 'Half'

cuda算子验证

根据op_config.py 的算子和参数,以及生成的基准测试数据,反向验证芯片上算子的精度,使用方法:

CUBLAS_WORKSPACE_CONFIG=:4096:8 python cuda_op_validate.py path/to/data path/to/output

精度验证的结果为 your/output/path/cuda_val_result.csv

若验证单个算子的测例, 运行命令:

python cuda_op_validate.py path/to/data your/output/path op_name(e.g. conv)

此时不会生成csv文件

若验证conv算子的全部测例, 运行命令:

python cuda_op_validate.py path/to/data your/output/path CONV

logger环境变量

默认logging等级为warning, 通过环境变量 PYLOGLEVEL 可以指定logging等级; 例如 export PYLOGLEVEL=INFO 设置为logger等级为info