环境配置¶
安装对应的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¶
download ILSVRC2012_img_val.tar from https://image-net.org/challenges/LSVRC/2012/ (you need register)
extract
mkdir val tar -xvf ILSVRC2012_img_val.tar -C val/
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
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
generate val_map.txt
python3 convert_imagenet.py val/ imagenet_2012_validation_synset_labels.txt imagenet_lsvrc_2015_synsets.txt val/val_map.txt
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¶
打开 bert squad dev_data, 复制到本地dev-v1.1.json
打开 evaluate-v1.1.py, 复制到本地evaluate-v1.1.py
下载 [BERT-Base, Uncased] (https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-12_H-768_A-12.zip),复制vocab.txt文件到对应目录
所有文件保存到对应的目录后,目录结构如下:
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¶
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 数据集准备指南¶
步骤¶
下载 COCO 2017。把它放到一个文件夹下面。
运行下面的命令
pip3 install -r requirements.txt
python3 convert_coco2017.py --input_path=<你刚创建的文件夹> --output_path=<目标路径>
处理完成的数据结构¶
data/COCO/
├── annotations
├── test2017
├── train2017
└── val2017