# Bert-Large-NPU-Inference **Repository Path**: wwfu/bert-large-npu-inference ## Basic Information - **Project Name**: Bert-Large-NPU-Inference - **Description**: Bert-Large模型在NPU上的推理适配。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-06-14 - **Last Updated**: 2023-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: Bert-Large, 离线推理, 昇腾 ## README ## 环境准备 本项目在NPU芯片(Atlas 300I Pro)上进行开发试验,除了与硬件对应的CANN6.3.RC1外,还需配置以下的环境: 1. PyTorch基础环境 2. ONNX改图工具 3. ONNX量化工具 4. 推理工具 执行以下命令即可快速完成环境配置: ```bash # 配置CANN的环境变量,请改为您的CANN包实际安装路径 source /usr/local/Ascend/ascend-toolkit/set_env.sh # 创建Python虚拟环境 env_name=bert-large bash scripts/create_env.sh ${env_name} conda activate ${env_name} ``` ## 数据处理 该模型使用SQuADv1.1数据集来评估模型的精度,执行以下命令,完成原始数据的下载以及预处理: ```bash bash scripts/generate_data.sh ``` 执行结束后,数据的存放目录结构如下: ``` ├── data/ ├── bert_bin/ # 预处理后的数据 │ ├── input_ids/ │ │ ├── Bert_0.bin │ │ ├── ... │ │ └── Bert_10832.bin │ ├── input_mask/ │ │ ├── input_mask_0.bin │ │ ├── ... │ │ └── input_mask_10832.bin │ └── segment_ids/ │ ├── segment_ids_0.bin │ ├── ... │ └── segment_ids_10832.bin └── dev-v1.1.json # 原始数据 ``` ## 模型转换 使用MLCommons官方提供的[ONNX模型](https://zenodo.org/record/3733910)进行OM模型的转换。执行以下命令即可完成原始ONNX模型的下载、优化以及OM模型的生成。执行的时间取决于您的网络速度和内存,若执行过程意外中断,请不必担心,重新运行命令,程序便会加载之前的缓存,在中断处继续执行。 ```bash batch_size=4 # 设置模型的batch_size bash scripts/generate_om.sh ${batch_size} ``` 执行结束后,`./model_cache`目录下则会生成根据batch_size命名的OM模型:`bert_large_bs${batch_size}.om` ## 模型推理 生成OM模后,即可使用[ais_bench](https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_bench)对预处理后的数据进行推理: ```bash bash scripts/inference.sh model_cache/bert_large_bs${batch_size}.om ${batch_size} ``` 执行结束后,推理结果存放于`./results/bs${batch_size}`目录下。 ## 模型评测 根据推理结果计算模型的精度指标: ```bash bash scripts/evaluate.sh results/bs${batch_size} ``` 精度指标如下: ``` {"exact_match": 83.74645222327341, "f1": 90.9116394412283} ```