[TOC]
evoke passes by mrt_entry.py
- for debugging purpose:
mrt_prepare
,mrt_calibrate
,mrt_quantize
- for evaluation purpose:
mrt_evaluate
- for compilation purpose:
mrt_compile
- for the whole process, the configuration module will combine the afore mentioned processes.
Currently supported configuration format by MRT: yaml
, argparse
, ini
(not integrated into mrt_entry.py yet)
# launch http server
cd /path/to/cvm-runtime/python/mrt/web
python manage.py runserver
# open in browser
http://127.0.0.1:8000/test
Config alexnet.yaml
as follows.
COMMON:
MODEL_NAME: alexnet
VERBOSITY: debug
START_AFTER: calibrate
RUN_EVALUATE: True
CALIBRATE:
BATCH: 16
NUM_CALIB: 1
LAMBD: 16
DATASET_NAME: imagenet
DEVICE_TYPE: gpu
DEVICE_IDS: [2]
QUANTIZE:
INPUT_PRECISION: 8
OUTPUT_PRECISION: 8
DEVICE_TYPE: gpu
DEVICE_IDS: [2]
EVALUATE:
BATCH: 160
DEVICE_TYPE: gpu
DEVICE_IDS: [0]
ITER_NUM: 10
run command
python main2.py ~/mrt_yaml_root/alexnet.yaml \
--calibrate.device_type cpu \
--calibrate.device_ids [0] \
--common.pass_name calibrate
or run either of the following commands for each pass.
# preparation
python main2.py ~/mrt_yaml_root/alexnet.yaml --entry-name prepare
# calibration
python main2.py ~/mrt_yaml_root/alexnet.yaml --entry-name calibrate
# quantization
python main2.py ~/mrt_yaml_root/alexnet.yaml --entry-name quantize
# evaluation
python main2.py ~/mrt_yaml_root/alexnet.yaml --entry-name evaluate
# compilation
python main2.py ~/mrt_yaml_root/alexnet.yaml --entry-name compile
COMMON:
MODEL_NAME: ssd_512_resnet50_v1_voc
VERBOSITY: info
RUN_EVALUATE: True
PREPARE:
INPUT_SHAPE: [-1, 3, 512, 512]
SPLIT_KEYS: [
"ssd0_multiperclassdecoder0_zeros_like0",
"ssd0_multiperclassdecoder0_slice_axis0",
"ssd0_normalizedboxcenterdecoder0_concat0"
]
CALIBRATE:
NUM_CALIB: 1
LAMBD: 16
DATASET_NAME: voc
DEVICE_TYPE: gpu
DEVICE_IDS: [2]
QUANTIZE:
OUTPUT_PRECISION: 30
DEVICE_TYPE: gpu
DEVICE_IDS: [2]
THRESHOLDS: [
["data", 2.64],
["ssd0_multiperclassdecoder0_slice_axis0", 1],
]
ATTRIBUTE_DEPS: [
[
"_greater_scalar",
[
["scalar", "ssd0_multiperclassdecoder0_slice_axis0"],
]
],
[
"_contrib_box_nms",
[
["valid_thresh", "ssd0_multiperclassdecoder0_slice_axis0"],
]
],
]
OSCALE_MAPS: [
["ssd0_slice_axis41", "ssd0_multiperclassdecoder0_zeros_like0"],
["ssd0_slice_axis42", "ssd0_multiperclassdecoder0_slice_axis0"],
["ssd0_slice_axis43", "ssd0_normalizedboxcenterdecoder0_concat0"],
]
EVALUATE:
BATCH: 15
DEVICE_TYPE: gpu
DEVICE_IDS: [0, 1, 2]
ITER_NUM: 10
run command
python main2.py ~/mrt_yaml_root/ssd.yaml
python main.py cmd alexnet
python main.py prepare alexnet
python main.py calibrate alexnet \
--batch-calibrate 16 \
--lambd 16 \
--calibrate-num 1 \
--dataset-name imagenet \
--device-type-calibrate gpu \
--device-ids-calibrate 2
python main.py quantize alexnet \
--input-precision 8 \
--output-precision 8 \
--device-type-quantize gpu \
--device-ids-quantize 2
python main.py evaluate alexnet \
--batch-evaluate 160 \
--device-type-evaluate gpu \
--device-ids-evaluate 0 \
--iter-num 10
python main.py compile alexnet
python main.py cmd alexnet \
--batch-calibrate 16 \
--lambd 16 \
--calibrate-num 1 \
--dataset-name imagenet \
--device-type-calibrate gpu \
--device-ids-calibrate 2 \
--input-precision 8 \
--output-precision 8 \
--device-type-quantize gpu \
--device-ids-quantize 2 \
--batch-evaluate 160 \
--device-type-evaluate gpu \
--device-ids-evaluate 0 \
--iter-num 10 \
--run-evaluate \
--run-compile
python main.py prepare ssd_512_resnet50_v1_voc \
--verbosity info \
--split-keys \
ssd0_multiperclassdecoder0_zeros_like0 \
ssd0_multiperclassdecoder0_slice_axis0 \
ssd0_normalizedboxcenterdecoder0_concat0 \
--input-shape -1 3 512 512
python main.py calibrate ssd_512_resnet50_v1_voc \
--verbosity info \
--dataset-name voc \
--device-type-calibrate gpu \
--device-ids-calibrate 2
python main.py quantize ssd_512_resnet50_v1_voc \
--verbosity info \
--thresholds \
"{ \
\"data\": 2.64, \
\"ssd0_multiperclassdecoder0_slice_axis0\": 1 \
}" \
--output-precision 30 \
--attribute-deps \
"{ \
\"_greater_scalar\": { \
\"scalar\": \"ssd0_multiperclassdecoder0_slice_axis0\" \
}, \
\"_contrib_box_nms\": { \
\"valid_thresh\": \"ssd0_multiperclassdecoder0_slice_axis0\" \
} \
}" \
--oscale-maps \
"{ \
\"ssd0_slice_axis41\": \"ssd0_multiperclassdecoder0_zeros_like0\", \
\"ssd0_slice_axis42\": \"ssd0_multiperclassdecoder0_slice_axis0\", \
\"ssd0_slice_axis43\": \"ssd0_normalizedboxcenterdecoder0_concat0\" \
}"
python main.py evaluate ssd_512_resnet50_v1_voc \
--verbosity info \
--batch-evaluate 14 \
--device-type-evaluate gpu \
--device-ids-evaluate 0 1 2 3 \
--iter-num 100
python main.py compile ssd_512_resnet50_v1_voc