本文将在 tutorial02 的基础上扩展功能:动态 batching 测试 QPS 提升。
resnet 的 dump 需要支持多 batch 输入,样例 dump_resnet.py
新的 classify.py 改成这样:
$ cat flow-python/examples/simple_det_classify/classify.py
...
def exec(self):
# batching
(envelopes, _) = self.inp.batch_recv(self.batch_size, self.timeout)
if len(envelopes) == 0:
return
...
这里 batch_recv
的参数列表
类型 | 名称 | 含义 |
---|---|---|
输入 | batch_size | 最多攒多少 batch |
输入 | timeout | 多少毫秒内返回 |
输出 | list of Any | 一组消息,0 <= len(list) <= batch_size |
输出 | bool | 标识该端口是否已经关闭,当其值为 True 时,语义等同于 recv 接口返回的None |
然后在 Python 层合并 data,调 inference_batch
data = np.concatenate(crops)
types = self._model.inference_batch(data)
MegFlow 支持直接输入图片集/视频列表做测试,不需要 http 服务。使用方自行实现 Validation 结点,集成进 CI 做正确性/性能测试。
以 simple_classification image_test 为例
...
[[graphs.nodes]]
name = "source"
ty = "ImageInput"
urls = ["/mnt/data/user/image/","/home/test_data_dir/"]
...
pipeline 建图等不变,新增了一种 source 叫做 ImageInput
,调用方填 urls
做图片目录列表。
运行方法不变
$ megflow_run -c simple_classification/image_test.toml -p simple_classification
以 simple_det_classify video_test 为例:
...
[[graphs.nodes]]
name = "source"
ty = "VideoInput"
repeat = 1
urls = ["rtsp://127.0.0.1:8554/test.ts", "/mnt/data/file.mp4"]
...
建图同样不变,新增了 VideoInput
结点,参数列表
参数 | 含义 |
---|---|
urls | 视频 url 列表,流地址、本地文件皆可 |
repeat | 每个 url 并行创建多少路。注意如果是网络流,需要调用方考量带宽压力 |
使用方法不变
$ megflow_run -c simple_det_classify/video_test.toml -p simple_det_classify