DeepRec icon indicating copy to clipboard operation
DeepRec copied to clipboard

kafkadataset 多partition下会产生非常多线程

Open victory1210 opened this issue 6 months ago • 1 comments

你好, 调试中遇到一个问题, 有些疑问, 如果方便, 辛苦帮忙解答. 感谢

我在测试kafkadataset的时候, 会产生非常多线程. 但有利用率的占比不高. 随着partition数的增多, 线程数成比例增加.

(1) 单机情况下, 200个partition, 可以产生超过15000个线程. (dataset设置的并行度是3, inter_op, intra_op都默认, 在128core, 64core, 32core机器测试结果都一样线程数一样多). (2) 分布式情况下, 2个worker, 各assign 100个partition, 单worker线程数减半(7-8k个), 总数不变 同理, 扩展到4个, 8个, 随着单worker partition减少, 对应线程也是成比例减少. 根据我的模型看, 一个partition稳定对应70+个线程.

线程名为tf_data_iterato. 疑似通过unboundThreadpool创建得来, 但我发现这个线程池在过程中大小一直是2, 队列最大是2. 所以不太明白为什么会产生这么多线程.且都留存.

基于以上提出疑问 1、为什么会产生这么多逻辑线程, 且不退出, 又从哪儿创建的. 如果是unboundThreadpool创建的, 线程池大小过程中打印都很小, 为什么会有这么多线程一直不退出. 2、一个partition 稳定对应数十个线程(不全有利用率, 200个partition 有15000线程, 有利用率大概400/15000) . 对一个模型或者任务而言, 这个数实测根dataset parallel数没关系, 跟inter_op, intra_op数也没有关系. 可能跟什么有关(dataset/iterator 还是 kafka)

以上问题如能解惑, 非常感谢!

victory1210 avatar Jul 30 '24 08:07 victory1210