Skip to content

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

@victory1210

Description

@victory1210

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

我在测试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)

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions