环境配置

安装对应的Application包

用户根据自己的需求,安装对应的Application包,里面内置了关于模型推理需要的代码以及依赖项说明。

执行推理

相关代码在安装后,默认放置在/usr/local/topsrider/S60_Application/Model/目录下, 其中 /usr/local/topsrider/S60_Application/Model/General_Model/放置了resnet50, bert等模型的推理代码文件。

!!!特别说明1

  • 1、在执行/usr/local/topsrider/S60_Application/Model/General_Model/目录下模型时,需要在提前安装该目录下的requirements.txt中whl包, 安装方法:pip install -r requirements.txt

  • 2、如单独模型代码目录下存在requirements.txt文件,请按照requirements.txt中所示下载相应的依赖库。

!!!特别说明2 topsexec是安装topsinference之后就有的一个可执行程序,可以测性能,dump vpd和hlir。注意topsexec不测模型精度,精度测试需要执行相关代码文件

具体参数说明
--fp16:跑fp16混精;
--warmup=30:跑模型热身的次数,不记入性能。会出现在vpd中;
--iterations=1000:跑模型的次数,最后会取平均。会出现在vpd中;
--cluster=0,1:跑双die并行,每个die上各跑一个模型;如果只想跑单die,改为--cluster=0;
--inputShape:输入形状。注意包含了batch size,例如--inputShape=16,3,224,224说明是bs16,此为单die上的bs。如果--inputShape=16,3,224,224 --cluster=0,1说明是双die并行,每个die上各跑一个bs16,合计的性能对标GPU上的bs32;

以fwfm为例

topsexec --onnx=fwfm-fuxictr-felv-op13-fp32-N.onnx  --input=input,fp32 --inputShape=1024,15     --fp16 --warmup=30 --iterations=1000 --cluster=0,1

ResNet50

准备数据集和预训练模型

  • 模型数据集准备详见附录 imagenet

  • 处理后的数据集应放置在./data/

  • 预训练模型共5个, 应放置在./model,如缺少模型文件,可联系销售工程师获取

    • resnet50_v1.5-torchvision-op13-fp32-N.onnx

    • resnet50_v1.5-torchvision-op13-int8-gemm-perchannel-N.onnx

执行精度验证脚本

每一个模型我们都提供了精度验证脚本,帮助用户确认精度和CPU对齐。在确认依赖全部安装完成,数据集和预训练模型下载并存放在期望位置后,可以使用以下命令执行模型

python3 main.py --frame onnx --model resnet-tv --model_path ./model/resnet50_v1.5-torchvision-op13-fp32-N.onnx --data_path ./data/val/ --input_width 224 --input_height 224 --batch_size 16 --resize_size 256 --device gcu

python3 main.py --frame onnx --model resnet-tv  --model_path ./model/resnet50_v1.5-torchvision-op13-int8-gemm-perchannel-N.onnx --data_path ./data/val/ --batch_size 1 --device gcu

可配置的参数包括:

--model_path
--data_path
--input_width
--input_height
--batch_size
--resize_size
--device

可以使用

python3 main.py --frame onnx --model resnet-tv -h

获取相应的参考信息

模型文件与精度标准

  • 该模型的评价指标包括以下:

model device acc1 acc5
resnet50_v1.5-torchvision-op13-fp32-N.onnx CPU 0.7613 0.92862
resnet18_v1.5-torchvision-op13-fp32-N.onnx CPU 0.69758 0.89078
resnet34_v1.5-torchvision-op13-fp32-N.onnx CPU 0.73314 0.9142
resnet50_v1.5-torchvision-op13-int8-gemm-perchannel-N.onnx GCU 0.75932 0.92828
resnet18_v1.5-torchvision-op13-int8-N.onnx GCU 0.69588 0.88982

性能测试

执行如下命令,进行性能测试

topsexec --onnx=resnet50_v1.5-torchvision-op13-int8-gemm-perchannel-N.onnx    --input=input  --inputShape=16,3,224,224    --warmup=30 --iterations=1000 --cluster=0,1

topsexec --onnx=resnet50_v1.5-torchvision-op13-fp32-N.onnx    --input=input  --inputShape=16,3,224,224     --fp16 --warmup=30 --iterations=1000 --cluster=0,1

最终结果输出:sample Throughput (sample/s): xxx,即为性能指标

Bert

准备数据集和预训练模型

  • 模型在bert问答任务SQUAD v1.1测试数据集上进行,数据集准备详见附录

  • 处理后的数据集应放置在./data/bert_qa/

  • 预训练模型共4个, 应放置在./model,如缺少模型文件,可联系销售工程师获取

    • bert-base-squad-google-op13-int8-N-sy_19.onnx

    • bert_large-squad-mlperf-op13-int8-N.onnx

执行精度验证脚本

每一个模型我们都提供了精度验证脚本,帮助用户确认精度和CPU对齐。在确认依赖全部安装完成,数据集和预训练模型下载并存放在期望位置后,可以使用以下命令执行模型

  • google int8

export ORT_TOPSINFERENCE_FP16_ENABLE=0
python3 main.py --frame onnx --model bert-qa --model_path ./model/bert-base-squad-google-op13-int8-N-sy_19.onnx  --predict_file ./data/bert_qa/dev-v1.1.json --batch_size 8 --device gcu --model_ver google --vocab_file ./data/bert_qa/vocab.txt --eval_script ./data/bert_qa/evaluate-v1.py --compiled_batchsize 4
  • mlperf int8

 python3 main.py --frame onnx --model bert-qa --model_path  ./model/bert_large-squad-mlperf-op13-int8-N.onnx --predict_file ./data/bert_qa/dev-v1.1.json --batch_size 8 --compiled_batchsize 4 --device gcu --model_ver mlperf --vocab_file ./data/bert_qa/vocab.txt --eval_script ./data/bert_qa/evaluate-v1.py

可配置的参数包

--model_path
--predict_file
--batch_size
--device
--max_seq_len

可以使用

python main.py --frame onnx --model bert-qa -h

获取相应的参考信息

模型文件与精度标准

  • google int8模型的评价指标包括以下,

exact_match >= 79.975686
f1 >=87.537819
  • mlperf int8模型的评价指标包括以下,

exact_match >=83.48562
f1 >=90.57277

性能测试

执行如下命令,进行性能测试

topsexec --onnx=bert-base-squad-google-op13-int8-N-sy_19.onnx    --input=segment_ids_2:0  --inputShape=4,384   --input=input_mask_2:0  --inputShape=4,384   --input=input_ids_2:0  --inputShape=4,384      --warmup=30 --iterations=1000 --cluster=0,1

最终结果输出:sample Throughput (sample/s): xxx,即为性能指标

VIT

准备数据集和预训练模型

  • 模型数据集准备详见附录

  • 处理后的数据集应放置在./data/

  • 预训练模型共5个, 应放置在./model,如缺少模型文件,可联系销售工程师获取

    • vit_b_16-torchvision-op13-fp32-N.onnx

    • vit_l_16-torchvision-op13-fp32-N.onnx

    • vit_b_16-torchvision-op13-int8-N.onnx

    • vit_b_32-torchvision-op13-int8-N.onnx

    • vit_l_16-torchvision-op13-int8-N.onnx

    • vit_l_32-torchvision-op13-int8-N.onnx

执行精度验证脚本

每一个模型我们都提供了精度验证脚本,帮助用户确认精度和CPU对齐。在确认依赖全部安装完成,数据集和预训练模型下载并存放在期望位置后,可以使用以下命令执行模型

# vit_b_16-torchvision-op13-fp32-N.onnx
python3 main.py --frame onnx --model vit-tv --model_path ./model/vit_b_16-torchvision-op13-fp32-N.onnx --data_path ./data/val/ --input_width 224 
--input_height 224 --batch_size 16 --resize_size 256 --device gcu
# vit_l_16-torchvision-op13-fp32-N.onnx
python3 main.py --frame onnx --model vit-tv --model_path ./model/vit_l_16-torchvision-op13-fp32-N.onnx --data_path ./data/val/ --input_width 224 --input_height 224 --batch_size 16 --resize_size 256 --device gcu
# vit_b_16-torchvision-op13-int8-N.onnx
python3 main.py --frame onnx --model vit-tv --model_path ./model/vit_b_16-torchvision-op13-int8-N.onnx --data_path ./data/val/ --input_width 224 --input_height 224 --batch_size 16 --resize_size 256 --device gcu
# vit_b_32-torchvision-op13-int8-N.onnx
python3 main.py --frame onnx --model vit-tv --model_path ./model/vit_b_32-torchvision-op13-int8-N.onnx --data_path ./data/val/ --input_width 224 --input_height 224 --batch_size 16 --resize_size 256 --device gcu
# vit_l_16-torchvision-op13-int8-N.onnx
python3 main.py --frame onnx --model vit-tv --model_path ./model/vit_l_16-torchvision-op13-int8-N.onnx --data_path ./data/val/ --input_width 224 --input_height 224 --batch_size 16 --resize_size 256 --device gcu
# vit_l_32-torchvision-op13-int8-N.onnx
python3 main.py --frame onnx --model vit-tv --model_path ./model/vit_l_32-torchvision-op13-int8-N.onnx --data_path ./data/val/ --input_width 224 --input_height 224 --batch_size 16 --resize_size 256 --device gcu

可配置的参数包括:

--model_path
--data_path
--input_width
--input_height
--batch_size
--resize_size
--device

可以使用

python3 main.py --frame onnx --model vit-tv -h

获取相应的参考信息

模型文件与精度标准

  • 该模型的评价指标包括以下:

model device acc1 acc5
vit_b_32-torchvision-op13-fp32-N.onnx GCU 0.7592 0.9247
vit_l_16-torchvision-op13-fp32-N.onnx GCU 0.7968 0.9455
vit_b_16-torchvision-op13-int8-N.onnx GCU 0.8081 0.9525
vit_b_32-torchvision-op13-int8-N.onnx GCU 0.7547 0.9215
vit_l_16-torchvision-op13-int8-N.onnx GCU 0.7946 0.9450
vit_l_32-torchvision-op13-int8-N.onnx GCU 0.7688 0.9303

facenet

准备数据集和预训练模型

  • 模型数据集准备详见附录:数据准备-lfw

  • 处理后的数据集应放置在 ./data/lfw/

  • 预训练模型共3个, 应放置在./model,如缺少模型文件,可联系销售工程师获取

    • facenet-inceptionv1-op13-fp32-N.onnx

    • facenet-inceptionv1-op13-int8-N.onnx

执行精度验证脚本

每一个模型我们都提供了精度验证脚本,帮助用户确认精度和CPU对齐。在确认依赖全部安装完成,数据集和预训练模型下载并存放在期望位置后,可以使用以下命令执行模型

python3 main.py --frame onnx --model facenet --model_path ./model/facenet-inceptionv1-op13-fp32-N.onnx --data_path ./data/lfw --batch_size 128 --device cpu

python3 main.py --frame onnx --model facenet --model_path ./model/facenet-inceptionv1-op13-int8-N.onnx --data_path ./data/lfw --batch_size 128 --device cpu

可配置的参数包括:

--model_path
--data_path
--batch_size
--device

可以使用

python main.py --frame onnx --model facenet -h

获取相应的参考信息

模型文件与精度标准

  • 该模型的评价指标包括以下:

facenet-inceptionv1-op13-fp32-N.onnx

acc: 0.990

facenet-inceptionv1-op13-int8-N.onnx

acc: 0.990

retinanet

准备数据集和预训练模型

  • 模型数据集准备详见附录:数据准备-coco2017

  • 处理后的数据集应放置在./data/COCO

  • 预训练模型共10个, 应放置在./model,如缺少模型文件,可联系销售工程师获取

    • retinanet-r50-mmdet-pt-op13-int8.onnx

执行精度验证脚本

每一个模型我们都提供了精度验证脚本,帮助用户确认精度和CPU对齐。在确认依赖全部安装完成,数据集和预训练模型下载并存放在期望位置后,可以使用以下命令执行模型

python3 main.py --frame onnx --model retinanet --model_path ./model/retinanet-r50-mmdet-pt-op13-int8.onnx --data_path ./data/COCO --batch_size 1 --conf_thres 0.04 --version mmdet --device gcu

可配置的参数包括:

--model_path
--data_path
--batch_size
--conf_thres
--version
--device

可以使用

python3 main.py --frame onnx --model retinanet -h

获取相应的参考信息

模型文件与精度标准

  • 该模型的评价指标包括以下:

model device precision conf thres mAP
retinanet-r50-mmdet-pt-op13-int8.onnx GCU int8 0.04 35.1%

FasterRCNN

准备数据集和预训练模型

  • 模型数据集准备详见附录:数据准备-coco2017

  • 处理后的数据集应放置在./data/COCO

  • 预训练模型共1个, 应放置在./model,如缺少模型文件,可联系销售工程师获取 fasterrcnn-resnet50_fpn_2x_pytorch-mmdetection-op13-fp32-N-topk_static.onnx fasterrcnn-resnet50_fpn_2x_pytorch-mmdetection-op13-fp32-N-topk_static.json

执行精度验证脚本

每一个模型我们都提供了精度验证脚本,帮助用户确认精度和CPU对齐。在确认依赖全部安装完成,数据集和预训练模型下载并存放在期望位置后,可以使用以下命令执行模型

# fasterrcnn-resnet50_fpn_2x_pytorch-mmdetection-op13-fp32-N-topk_static.onnx
python3 -u main.py --frame topsinference --model faster_rcnn-mmd --model_path ./model/fasterrcnn-resnet50_fpn_2x_pytorch-mmdetection-op13-fp32-N-topk_static.onnx --fp32_op_path ./model/fasterrcnn-resnet50_fpn_2x_pytorch-mmdetection-op13-fp32-N-topk_static.json --data_path ./data/COCO --prec fp16_mix --scale 800 1216 --to_rgb --post_rescale

可配置的参数包括:

--model_path
--fp32_op_path
--data_path
--prec
--scale
--to_rgb
--mean
--std
--keep_ratio
--post_rescale

可以使用

python3 main.py --frame topsinference --model faster_rcnn-mmd -h

获取相应的参考信息

模型文件与精度标准

  • 该模型的评价指标包括以下:

model device precision dynamic_input mAP_bbox
fasterrcnn-resnet50_fpn_2x_pytorch-mmdetection-op13-fp32-N-topk_static.onnx GCU fp16_mix True 0.3591

MaskRCNN

准备数据集和预训练模型

  • 模型数据集准备详见附录:数据准备-coco2017

  • 处理后的数据集应放置在./data/COCO

  • 预训练模型共1个, 应放置在./model,如缺少模型文件,可联系销售工程师获取 maskrcnn-resnet50_fpn_3x_pytorch-mmdetection-op13-fp32-N-unexport_mask.onnx maskrcnn-resnet50_fpn_3x_pytorch-mmdetection-op13-fp32-N-unexport_mask.json

执行精度验证脚本

每一个模型我们都提供了精度验证脚本,帮助用户确认精度和CPU对齐。在确认依赖全部安装完成,数据集和预训练模型下载并存放在期望位置后,可以使用以下命令执行模型

# maskrcnn-resnet50_fpn_3x_pytorch-mmdetection-op13-fp32-N-unexport_mask.onnx
python3 main.py --frame topsinference --model mask_rcnn-mmd --model_path ./model/maskrcnn-resnet50_fpn_3x_pytorch-mmdetection-op13-fp32-N-unexport_mask.onnx --fp32_op_path ./model/maskrcnn-resnet50_fpn_3x_pytorch-mmdetection-op13-fp32-N-unexport_mask.json --data_path ./data/COCO --prec fp16_mix --scale 800 1216 --to_rgb --post_mask --post_rescale

可配置的参数包括:

--model_path
--fp32_op_path
--data_path
--prec
--scale
--to_rgb
--post_mask
--post_rescale

可以使用

python3 main.py --frame topsinference --model mask_rcnn-mmd -h

获取相应的参考信息

模型文件与精度标准

  • 该模型的评价指标包括以下:

model device dynamic_input precision mAP_bbox mAP_segm
maskrcnn-resnet50_fpn_3x_pytorch-mmdetection-op13-fp32-N-unexport_mask.onnx GCU False fp16_mix 0.381 0.335

附录数据集

Imagenet

Step

  1. download ILSVRC2012_img_val.tar from https://image-net.org/challenges/LSVRC/2012/ (you need register)

  2. extract

    mkdir val
    tar -xvf ILSVRC2012_img_val.tar -C val/
    
  3. download labels

    wget https://raw.githubusercontent.com/tensorflow/models/master/research/slim/datasets/imagenet_2012_validation_synset_labels.txt
    wget https://raw.githubusercontent.com/tensorflow/models/master/research/slim/datasets/imagenet_lsvrc_2015_synsets.txt
    
  4. put images into category folders (if a flatten dir structure is needed, skip)

    python3 preprocess_imagenet_validation_data.py val/ imagenet_2012_validation_synset_labels.txt imagenet_lsvrc_2015_synsets.txt
    cp imagenet_2012_validation_synset_labels.txt val/synset_labels.txt
    
  5. generate val_map.txt

    python3 convert_imagenet.py val/ imagenet_2012_validation_synset_labels.txt imagenet_lsvrc_2015_synsets.txt val/val_map.txt
    
  6. rename

    mv val data/
    

Processed Dataset Structure

data/val/
      ├── n01440764
      │   ├── ILSVRC2012_val_00000293.JPEG
      │   ├── ILSVRC2012_val_00002138.JPEG
      |   └── ……
      ……
      └── val_map.txt

val_map.txt contains image path and label relationship likes:

./n01751748/ILSVRC2012_val_00000001.JPEG 65
./n09193705/ILSVRC2012_val_00000002.JPEG 970
./n02105855/ILSVRC2012_val_00000003.JPEG 230
./n04263257/ILSVRC2012_val_00000004.JPEG 809
……

SQUADv1.1

  1. 打开 bert squad dev_data, 复制到本地dev-v1.1.json

  2. 打开 evaluate-v1.1.py, 复制到本地evaluate-v1.1.py

  3. 下载 [BERT-Base, Uncased] (https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-12_H-768_A-12.zip),复制vocab.txt文件到对应目录

  4. 所有文件保存到对应的目录后,目录结构如下:

     data
       └──bert_qa
            |── vocab.txt
            |── evaluate-v1.1.py
            └── dev-v1.1.json
    

Tiny_h5

Step

clone repo

  • git clone https://github.com/reczoo/FuxiCTR.git

  • cd FuxiCTR

  • git checkout 617f382

copy data

cd FuxiCTR
cp -r ./data/tiny_h5 ../

Processed Dataset Structure

tiny_h5/
  ├── feature_map.json
  ├── test.h5
  ├── train.h5
  └── valid.h5

LFW Dataset Preparation Guide

Step

  1. download code base here

  2. download lfw, pair list and uncompress it.

  3. Run commands below

cd <path/to/facenet>
pip3 install -r requirements.txt

for N in {1..4}
do
PYTHONPATH=src python3 src/align/align_dataset_mtcnn.py <path/to/uncompressed/lfw/directory> <path/to/output/directory> --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25
done

mkdir data/lfw
cp -r <path/to/output/directory> data/lfw/lfw
cp <path/to/pairs.txt> data/lfw

Processed Dataset Structure

data/lfw/
        ├── lfw
        └── pairs.txt

README_CN.md 503 bytes

COCO 2017 数据集准备指南

步骤

  1. 下载 COCO 2017。把它放到一个文件夹下面。

  2. 运行下面的命令

pip3 install -r requirements.txt
python3 convert_coco2017.py --input_path=<你刚创建的文件夹> --output_path=<目标路径>

处理完成的数据结构

data/COCO/
        ├── annotations
        ├── test2017
        ├── train2017
        └── val2017