深度学习模型部署问题

2019-12-18 10:58:19 +08:00
 shicheng1993

1.当我使用多进程并行启动模型的时候( pytorch 或者 tf 或者 keras ),显存或者内存的占用都是翻倍的,这种并行能够理解.
2.当我在主进程启动模型并使用多线程去同时 fit 或者 predict 时,这时会发生什么呢?

( 1 )有一种锁的机制,哪个线程拿到锁就进行推理,之后进行下一个线程的推理,实际上的串行。
( 2 )模型内部类似于函数调用,虽然有 GIL 但是每个线程的推理是实际上的并行,推理速度变慢,但都在慢慢进行。
另外当这个模型是使用 GPU 进行运算的时候,上面的情形下的处理逻辑是一样的吗? 请大佬指点

4870 次点击
所在节点    Python
5 条回复
Latin
2019-12-18 11:18:11 +08:00
用 gpu 只会加快算法处理速度,不会加快线程运行
lonelygo
2019-12-18 11:22:33 +08:00
shicheng1993
2019-12-18 12:02:38 +08:00
谢谢两位
@Latin 额,我问的不是这个。是模型与进程线程并发之间的关系,不是运算速度。
@lonelygo tf 的 serving 这个会用,但是 rpc 调用时,传输预处理后的数据,相对于运算量开销太大,没有使用。他这个是黑箱,不能解决我上面手动部署中的疑问。
yangyaofei
2019-12-18 13:04:04 +08:00
GPU 内部已经把处理都拆成无数个线程了,感觉多线程意义不大...
如果是多线程的话,我觉得是计算的时候 python block,然后后端是并行的,所以看起来应该是并行的样子,但是 GPU 资源有限,最终没啥区别.用 tf serving 还是最理想的办法....不用处理 batching,优先级等等的问题
tedeyang
2019-12-21 23:39:38 +08:00
CPU 主进程加载模型,其他线程调用,这种情况下推理计算是串行的。就是传统的并发问题,你可以用 openvino/opencl 来做并行编程。
GPU 任何时间点基本只做一个模型的 predict,但模型内调用的 cuda 是有上万个 core 并行计算。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/630068

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX