docs/en/Intel-CCAI-Development-Manual/Testcases.md

778 lines
20 KiB
Markdown
Raw Normal View History

2021-11-09 17:02:57 +08:00
---
title: 11.Test cases and package installation
description:
published: true
2022-05-17 15:19:34 +08:00
date: 2022-05-17T07:17:27.949Z
2021-11-09 17:02:57 +08:00
tags: ccai
editor: markdown
2022-05-17 15:19:34 +08:00
dateCreated: 2022-03-11T03:18:28.557Z
2021-11-09 17:02:57 +08:00
---
# Enabled services for testing
For making the deliverables unified but still easy to validate basic functions of CCAI framework, we disabled all sample services by default from version 1.0-210201 due to, on the current stage, no landed user cases from customers. For testing purpose, to enable services, use these steps:
```
#Create a folder on the host side under /opt/intel/service_runtime.
```
```
$>sudo mkdir -p /opt/intel/service_runtime/rootfs/d/etc/runit/runsvdir/default
$>sudo chown www-data.www-data /opt/intel/service_runtime/rootfs/d/etc/runit/runsvdir/default
```
```
#Create the health monitor configuration file.
```
```
$>sudo mkdir -p /opt/intel/service_runtime/rootfs/f/opt/health_monitor
$>sudo bash -c 'cat > /opt/intel/service_runtime/rootfs/f/opt/health_monitor/config.yml << "EOF"
daemon_targets:
- lighttpd
- policy_daemon
grpc_targets:
fcgi_targets:
- fcgi_ocr.py
- fcgi_ocr
EOF'
$>sudo chown -R www-data.www-data /opt/intel/service_runtime/rootfs/f/opt/health_monitor
replace/add/remove services in above “fcgi_targets:” section will replace/enable/disable related services from health_monitor list. For version 1.0-210201, now you can use 3 services as:
- fcgi_ocr.py
- fcgi_ocr
- fcgi_tts.py //(Please noted, there is no fcgi_tts)
- fcgi_speech //(Please noted, there is no fcgi_speech.py)
```
```
#Restart container, and enable the services.
```
```
$>sudo systemctl restart service-runtime
$>docker exec -it service_runtime_container /bin/bash -c 'cd /etc/runit/runsvdir/default; for s in /etc/sv/*; do ln -sf $s; done'
```
```
#Remove those created folders under /opt/intel/service_runtime and restart the container, there would make any enabled services disabled again.
```
```
$>sudo rm -R /opt/intel/service_runtime/rootfs
```
# High Level APIs test cases
Exposed high level APIs test cases which were provided in individual test script way, the usage of each case can be found in the following pages and the cases list are:
**(Most test cases have default input which are the preinstalled files under specific folders with the deb package installation. From the WW4520 release, if you want to use your own input files like images (-i), text (-s), wav (-a), you now can pass input parameters to each test case.)**
## For testing all provided API in a bunch
You can test all python implementations with existing test case `set - test-script`/`run_test_script.sh`
Usage:
```
cd /opt/intel/service_runtime/test-script/
sudo ./run_test_script.sh
```
## For testing python implementation of related REST APIs.
`test-script/test-demo/post_local_asr_py.py` (the default input audio file(“-a”):
`how_are_you_doing.wav`; the default inference device(“-d”): GNA_AUTO)
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_asr_py.py -a “AUDIO_FILE” -d “DEVICE”
```
Result:
```
{
"ret": 0,
"msg": "ok",
"data": {
"text": "HOW ARE YOU DOING\n"
},
"time": 0.777
}
processing time is: 0.7873961925506592
```
`test-script/test-demo/post_local_classfication_py.py` (default input file is classfication.jpg if without input parameter )
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_classfication_py.py -i “IMAGE_FILE”
```
Result:
```
{
"ret": 0,
"msg": "ok",
"data": {
"tag_list": [
{
"tag_name": "sandal",
"tag_confidence": 0.7865033745765686
}
]
},
"time": 0.332
}
processing time is: 0.33770060539245605
```
`test-script/test-demo/post_local_face_detection_py.py` (default input file if without input parameter: face-detection-adas-0001.png)
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_face_detection_py.py -i “IMAGE_FILE”
```
Result:
```
{
"ret": 0,
"msg": "ok",
"data": {
"face_list": [
{
"x1": 611,
"y1": 106,
"x2": 827,
"y2": 322
},
{
"x1": 37,
"y1": 128,
"x2": 298,
"y2": 389
}
]
},
"time": 0.303
}
processing time is: 0.3306546211242676
```
`test-script/test-demo/post_local_facial_landmark_py.py` (default input file if without input parameter: face-detection-adas-0001.png)
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_facial_landmark_py.py -i “IMAGE_FILE”
```
Result:
```
{
"ret": 0,
"msg": "ok",
"data": {
"image_width": 916,
"image_height": 502,
"face_shape_list": [
{
"x": 684.5769672393799,
"y": 198.69771003723145
},
{
"x": 664.4035325050354,
"y": 195.72683095932007
},
……
{
"x": 243.1659236550331,
"y": 211.56765642762184
}
]
},
"time": 0.644
}
processing time is: 0.6765329837799072
```
`test-script/test-demo/post_local_ocr_py.py` (default input file if without input parameter: intel.jpg )
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_ocr_py.py -i “IMAGE_FILE”
```
Result:
```
{
"ret": 0,
"msg": "ok",
"data": {
"item_list": [
{
"item": "",
"itemcoord": [
{
"x": 159,
"y": 91,
"width": 144,
"height": 83
}
],
"itemstring": "intel",
"word": [
{
"character": "i",
"confidence": 0.9997048449817794
},
{
"character": "n",
"confidence": 7342.882333942596
},
{
"character": "t",
"confidence": 0.03543140404695105
},
{
"character": "e",
"confidence": 2068.173618863451
},
{
"character": "l",
"confidence": 0.006070811107476452
}
]
},
{
"item": "",
"itemcoord": [
{
"x": 203,
"y": 152,
"width": 176,
"height": 78
}
],
"itemstring": "inside",
"word": [
{
"character": "i",
"confidence": 0.9999999989186683
},
{
"character": "n",
"confidence": 4.0572939432830824e-08
},
{
"character": "s",
"confidence": 0.0015244375426548887
},
{
"character": "i",
"confidence": 3807.4854890027605
},
{
"character": "d",
"confidence": 0.42974367345764747
},
{
"character": "e",
"confidence": 0.008770792351958176
}
]
}
]
},
"time": 5.69
}
processing time is: 5.702326774597168
```
`test-script/test-demo/post_local_policy_py.py `
**The default accelerator will be CPU if no change, once you set another accelerator with policy setting API, it will always take effect before you explicitly change it.**
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_policy_py.py -d CPU -l 1
```
Result:
```
successfully set the policy daemon
processing time is: 0.004211902618408203
```
`test-script/test-demo/post_local_tts_py.py` (default input file if without input parameter: test_sentence.txt)
**(So far, for easy testing of the pipeline, we had some rules on TTS input: the input must be an English string and be saved in test_sentence.txt.)**
Usage:
```
cd /opt/intel/service_runtime/test-script/
sudo python3 ./test-demo/post_local_tts_py.py -s “SENTENCE_FILE”
```
Result:
```
{
"ret": 0,
"msg": "ok",
"data": {
"format": 2,
"speech": "UklGRjL4Aw..."
"md5sum": "3bae7bf99ad32bc2880ef1938ba19590"
},
"time": 7.283
}
processing time is: 7.824979066848755
```
## For testing C++ implementation of related REST APIs
`test-script/test-demo/post_local_asr_c.py` (the default input audio file(“-a”): how_are_you_doing.wav; the default inference device(“-d”): GNA_AUTO)
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_asr_c.py -a “AUDIO_FILE” -d “DEVICE”
```
Result:
```
{
"ret":0,
"msg":"ok",
"data":{
"text":HOW ARE YOU DOING
},
"time":0.695
}
processing time is: 0.6860318183898926
```
`test-script/test-demo/post_local_classfication_c.py` (default input file if without input parameter: classfication.jpg)
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_classfication_c.py -i “IMAGE_FILE”
```
Result:
```
{
"ret":0,
"msg":"ok",
"data":{
"tag_list":[
{"tag_name":'sandal',"tag_confidence":0.786503}
]
},
"time":0.380
}
processing time is: 0.36538004875183105
```
`test-script/test-demo/post_local_face_detection_c.py` (default input file if without input parameter: face-detection-adas-0001.xml)
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_face_detection_c.py -i “IMAGE_FILE”
```
Result:
```
{
"ret":0,
"msg":"ok",
"data":{
"face_list":[
{
"x1":655,
"y1":124,
"x2":783,
"y2":304
},
{
"x1":68,
"y1":149,
"x2":267,
"y2":367
} ]
},
"time":0.305
}
processing time is: 0.3104386329650879
```
`test-script/test-demo/post_local_facial_landmark_c.py` (default input file if without input parameter: face-detection-adas-0001.xml)
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_facial_landmark_c.py -i “IMAGE_FILE”
```
Result:
```
{
"ret":0,
"msg":"ok",
"data":{
"image_width":916.000000,
"image_height":502.000000,
"face_shape_list":[
{"x":684.691284,
"y":198.765793},
{"x":664.316528,
"y":195.681824},
……
{"x":241.314194,
"y":211.847031} ]
},
"time":0.623
}
processing time is: 0.6292879581451416
```
`test-script/test-demo/post_local_ocr_c.py` (default input file if without input parameter: intel.jpg)
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_ocr_c.py -i “IMAGE_FILE”
```
Result:
```
{
"ret":0,
"msg":"ok",
"data":{
"item_list":[
{
"itemcoord":[
{
"x":161.903748,
"y":91.755684,
"width":141.737503,
"height":81.645004
}
],
"words":[
{
"character":i,
"confidence":0.999999
},
{
"character":n,
"confidence":0.999998
},
{
"character":t,
"confidence":0.621934
},
{
"character":e,
"confidence":0.999999
},
{
"character":l,
"confidence":0.999995
} ],
"itemstring":intel
},
{
"itemcoord":[
{
"x":205.378326,
"y":153.429291,
"width":175.314835,
"height":77.421722
}
],
"words":[
{
"character":i,
"confidence":1.000000
},
{
"character":n,
"confidence":1.000000
},
{
"character":s,
"confidence":1.000000
},
{
"character":i,
"confidence":0.776524
},
{
"character":d,
"confidence":1.000000
},
{
"character":e,
"confidence":1.000000
} ],
"itemstring":inside
} ]
},
"time":1.986
}
processing time is: 1.975726842880249
```
`test-script/test-demo/post_local_speech_c.py` (default input file if without input parameter: dev93_1_8.ark)
**This case is used to verify GNA accelerators. The default setting is GNA_AUTO. If GNA HW is ready, the inference will run on GNA HW. Otherwise, it will run on GNA_SW mode to simulate GNA HW.**
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_speech_c.py
```
Result:
```
{
"ret":0,
"msg":"ok",
"data":{
"input information(name:dimension)":{
"Parameter":[8,440]
},
"output information(name:dimension)":{
"affinetransform14/Fused_Add_":[8,3425]
}
},
"time":0.344222
}
{
"ret":0,
"msg":"ok",
"data":{
"result":"success!"
},
"time":0.484783
}
fcgi inference time: 0.009104
processing time is: 0.0262906551361084
```
`test-script/test-demo/post_local_policy_c.py`
**The default accelerator will be CPU if no change, once you set another accelerator with policy setting API, it will always take effect before you explicitly change it.**
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-demo/post_local_policy_c.py -d CPU -l 1
```
Result:
```
successfully set the policy daemon
processing time is: 0.0035839080810546875
```
## For testing C++ implementation of related gRPC APIs
`grpc_inference_service_test.py`
Usage:
```
cd /opt/intel/service_runtime/test-script/
python3 ./test-grpc/grpc_inference_service_test.py
```
Result:
```
HealthCheck resp: 0
ASR result:
{"text":"HOW ARE YOU DOING"}
Classification result:
[{"tag_name":"sandal","tag_confidence":0.743236}]
FaceDetection result:
{"x1":611,"y1":106,"x2":827,"y2":322},{"x1":37,"y1":128,"x2":298,"y2":389}
FacialLandmark result:
{"x":684,"y":198},{"x":664,"y":195}, …
OCR result:
[{"itemcoord":{"x":162,"y":91,"width": …
```
# Health-monitor mechanism test case
## Test case
This test case will take about two minutes, please wait.
`test-script/test-health-monitor/test_health_monitor.sh`
Usage:
```
cd /opt/intel/service_runtime/test-script/
./test-health-monitor/test_health_monitor.sh
```
Result:
```
*******************************
test fcgi and grpc daemon:
[sudo] password for lisa:
fcgi can automatic restart
grpc can automatic restart
*******************************
test container:
f64fed060cf1 fe50c5747d46 "/start.sh" 2 minutes ago Up 2 minutes (unhealthy) 0.0.0.0:8080-8081->8080-8081/tcp service_runtime_container
service_runtime_container
restart container...
7f20255d36a9 fe50c5747d46 "/start.sh" About a minute ago Up About a minute (health: starting) 0.0.0.0:8080-8081->8080-8081/tcp service_runtime_container
container can automatic restart
```
## How it work (in brief)
The health monitor mechanism consisted of 2 parts: health-monitor daemon installed in the host system, and its agent installed inside the container.
The agent will check all background running services, daemons and API gateways in a 60 seconds (it is the default value, can be customized via parameter to start command) interval and report the healthy status to the host health-monitor. Meanwhile, under situations where daemon or services fail to respond, according to specific cases, the agent may try to restart those failed processes and then confirm those processes work normally, or rely on API gateways to restart related services and then confirm those services work normally. Whichever cases, the agent will report those information to health-monitor as record and the preconditions of taking additional actions if needed. If the agent itself or API gateways cannot make the processes work again, then that information will also be reported to the host health-monitor and then the health-monitor will decide how to restart the docker instance according to some predefined rules.
In the test case above, it will try to kill these services and container instance respectively and then re-check the status to make sure the health monitor mechanism works as expected. The output log xxxxxx restart is meaning related services/components were killed and then restarted successfully.
For health monitor related log, you can find them by:
`$> sudo journalctl -f -u service-runtime-health-monitor.service `
# simulation lib test case
1) `/opt/intel/service_runtime/simlib/ie_sample is compiled with OpenVINO.`
Usage:
```
cd /opt/intel/service_runtime/simlib/
source /opt/intel/intel/openvino_2021/bin/setupvars.sh
./ie_sample ../models/wsj_dnn5b.xml ../test-script/input_data/dev93_1_8.ark
```
Result:
```
InferenceEngine: 0x7fc88ffbc020
Loading model to the device
numUtterances: 1
numFrames: 8
minput->byteSize(): 1760
minputHolder.as<void*>(): 0x55b0b18425b0
moutput->byteSize(): 13700
outputBuffer: 30.6944,17.725,20.8903,6.05325,9.35285,10.5059
```
2) `/opt/intel/service_runtime/simlib/simlib_sample is compiled with simulation lib.`
Usage:
```
cd /opt/intel/service_runtime/simlib/
LD_LIBRARY_PATH=`pwd` ./simlib_sample models/wsj_dnn5b.xml \
../test-script/input_data/dev93_1_8.ark
```
Result:
```
InferenceEngine: 0x7f8363399490
Loading model to the device
input[Parameter] size: 440
output[affinetransform14/Fused_Add_] size: 3425
numUtterances: 1
numFrames: 8
minput->byteSize(): 1760
minputHolder.as<void*>(): 0x55f105138fc0
moutput->byteSize(): 13700
outputBuffer: 30.6944,17.725,20.8903,6.05325,9.35285,10.5059
```
# Deb package for host installed application/service (if not install yet)
**Note: If not for testing the OTA process, then please uninstall existing packages before installing the new ones to avoid “possible” conflicts with OTA logic.**
`service-runtime_1.0-210201_all.deb`
`service-runtime-simlib-test_1.0-210201_amd64.deb`
`service-runtime-test_1.0-210201_all.deb`
Installation instructions:
`dpkg -i *.deb`
# Deb package for host installed neural network models (if not install yet)
**Note: If not for testing the OTA process, then please uninstall existing packages before install the new ones to avoid “possible” conflicts with OTA logic.**
`service-runtime-models-classification_1.0-210201_all.deb`
`service-runtime-models-deeplab_1.0-210201_all.deb`
`service-runtime-models-face-detection_1.0-210201_all.deb`
`service-runtime-models-facial-landmarks_1.0-210201_all.deb`
`service-runtime-models-lspeech-s5-ext_1.0-210201_all.deb`
`service-runtime-models-ocr_1.0-210201_all.deb`
`service-runtime-models-tts_1.0-210201_all.deb`
`service-runtime-models-wsj-dnn5b_1.0-210201_all.deb`
`service-runtime-models-cl-cache_1.0-210201_all.deb`
Installation instructions:
`dpkg -i *.deb`