Single-Operator Board Test Framework Generation

Specify the ST case definition file (.json) and implementation file kernel_name.cpp of the Ascend C operator to automatically generate the board test framework for calling the kernel function, test and verify the operator, and view the output result to check whether the operator function is correct.

  • This function supports only and Atlas Training Series Product, but not .
  • The addr and tiling attributes cannot be specified for any parameter.
  • The #ifndef __CCE_KT_TEST__ can be used to encapsulate kernel function calls.
  1. Prepare the following input files:
  2. Generate the test code to call the kernel function. For details about the parameters, see Table 3.
    msopst ascendc_test -i xx/OpType_case.json -kernel xx/add_custom.cpp -out ./output_data
  3. View the execution result.
    After the command is executed, the message "Process finished!" is displayed. A timestamp directory is generated in the directory specified by -out. In the timestamp directory, a folder named after OpType of the operator is generated for storing test cases and test results. The directory structure is as follows:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
     {time_stamp}
       ├── OpType
          ├── CMakeLists.txt     // Compilation script
          ├── data    
             └── xx.bin        
             └── xx.bin
          ├── data_utils.h
          ├── main.cpp        // Test framework
          └── run.sh      // Script file for invoking the test framework
       └── st_report.json        // Execution report
    

    After the command is executed successfully, an st_report.json report is automatically generated. The report records the detailed test information and the runtime states in each phase, which facilitates troubleshooting and test result comparison.

    The st_report.json file is saved in The st_report saved in.
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    2024-01-17 08:40:55 (3271037) - [INFO] Create 1 sub test cases for Test_AddCustom_001.
    2024-01-17 08:40:55 (3271037) - [INFO] [STEP2] [data_generator.py] Generate data for testcase.
    2024-01-17 08:40:55 (3271037) - [INFO] Start to generate the input data for Test_AddCustom_001_case_001_ND_float.
    2024-01-17 08:40:55 (3271037) - [INFO] Generate data for testcase in $HOME/AddCustom/output/20240117084055/AddCustom/data.
    2024-01-17 08:40:55 (3271037) - [INFO] [STEP3] [gen_ascendc_test.py] Generate test code of calling of kernel function for AscendC operator.
    2024-01-17 08:40:55 (3271037) - [INFO] Content appended to $HOME/AddCustom/output/20240117084055/AddCustom/main.cpp successfully.
    2024-01-17 08:40:55 (3271037) - [INFO] AscendC operator test code files for kernel implement have been successfully generated.
    2024-01-17 08:40:55 (3271037) - [INFO] If you want to execute kernel function in Ascend aihost or cpu, please execute commands: cd $HOME/AddCustom/output/20240117084055/AddCustom && bash run.sh [KERNEL_NAME](add_custom) [SOC_VERSION](ascendxxxyy) [CORE_TYPE](AiCore/VectorCore) [RUN_MODE](cpu/npu). For example: cd $HOME/AddCustom/output/20240117084055/AddCustom && bash run.sh add_custom ascendxxxyy AiCore npu
    2024-01-17 08:40:55 (3271037) - [INFO] Process finished!
    2024-01-17 08:40:55 (3271037) - [INFO] The st report saved in: $HOME/AddCustom/output/20240117084055/st_report.json.
    
    Table 1 st_report.json description

    Field

    Description

    run_cmd

    -

    -

    Command

    report_list

    -

    -

    List of reports of test cases.

    trace_detail

    -

    Execution details.

    st_case_info

    Test information, including the following:

    • expect_data_path: path of the expected result
    • case_name: test case name
    • input_data_path: path of input data
    • planned_output_data_paths: path of the actual result
    • op_params: operator parameter information

    stage_result

    Result information in each runtime phase, including the following:

    • status: running status of the phase, either success or failure
    • result: output result
    • stage_name: stage name
    • cmd: command

    case_name

    -

    Test name

    status

    -

    Actual test result, either success or failure

    expect

    -

    Expected test result, either success or failure

    summary

    -

    -

    Summary of comparison of the actual test result and the expected test result.

    test case count

    -

    Number of test cases

    success count

    -

    Number of test cases whose result is the same as the expected result

    failed count

    -

    Number of test cases whose result differs from the expected result

  4. Modify ASCEND_HOME_DIR in the run.sh file.
    ASCEND_HOME_DIR indicates the installation path of the CANN package. Change it based on the actual situation.
    1
    2
    3
    4
    5
    # Point to the installation address of the Ascend software package and export environment variables.
    if [ ! $ASCEND_HOME_DIR ]; then
        export ASCEND_HOME_DIR=${INSTALL_DIR}     
    fi
    source $ASCEND_HOME_DIR/bin/setenv.bash
    
  5. Go to the directory where the script file for executing the test framework is located and run the following command to verify the test framework code on the board:
    bash run.sh <kernel_name> <soc_version> <core_type> <run_mode>
    Table 2 Script parameters

    Parameter

    Description

    Value

    <kernel_name>

    Name of the Ascend C operator implementation file

    For example, if the implementation file of the Add operator is add_custom.cpp, pass add_custom.

    <soc_version>

    Model of the AI processor where the operator runs.

    For the Atlas Training Series Product and , set ascendxxxyy based on the actual model.

    NOTE:
    • Run the npu-smi info command on the server where the Ascend AI Processor is installed to obtain the Chip Name information. The actual value is AscendChip Name. For example, if Chip Name is xxxyy, the actual value is Ascendxxxyy. If Ascendxxxyy is the code sample path, you need to set ascendxxxyy.

    <core_type>

    AI Core or Vector Core on which the operator runs

    AiCore or VectorCore

    <run_mode>

    The operator runs in CPU or NPU mode.

    cpu or npu

    After the script is executed, information similar to the following is displayed. If "succeed" is displayed, the board verification is complete.
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    INFO: compile op on npu succeed!
    [INFO] Succeeded to exec acl api aclrtCreateContext(&context, deviceId)
    [INFO] Succeeded to exec acl api aclrtCreateStream(&stream)
    [INFO] Succeeded to exec acl api aclrtMallocHost((void**)(&xHost), xByteSize)
    [INFO] Succeeded to exec acl api aclrtMalloc((void**)&xDevice, xByteSize, ACL_MEM_MALLOC_HUGE_FIRST)
    [INFO] Succeeded to exec acl api aclrtMemcpy(xDevice, xByteSize, xHost, xByteSize, ACL_MEMCPY_HOST_TO_DEVICE)
    [INFO] Succeeded to exec acl api aclrtMallocHost((void**)(&yHost), yByteSize)
    [INFO] Succeeded to exec acl api aclrtMalloc((void**)&yDevice, yByteSize, ACL_MEM_MALLOC_HUGE_FIRST)
    [INFO] Succeeded to exec acl api aclrtMemcpy(yDevice, yByteSize, yHost, yByteSize, ACL_MEMCPY_HOST_TO_DEVICE)
    [INFO] Succeeded to exec acl api aclrtMallocHost((void**)(&zHost), zByteSize)
    [INFO] Succeeded to exec acl api aclrtMalloc((void**)&zDevice, zByteSize, ACL_MEM_MALLOC_HUGE_FIRST)
    [INFO] Succeeded to exec acl api aclrtSynchronizeStream(stream)
    [INFO] Succeeded to exec acl api aclrtMemcpy(zHost, zByteSize, zDevice, zByteSize, ACL_MEMCPY_DEVICE_TO_HOST)
    [INFO] aclrtDestroyStream successfully.
    INFO: execute op on npu succeed!