我正在尝试通过3个Tensorflow会话(使用3个线程)实现多线程推理,如下所示: 我计时了每个线程的持续时间,结果如下: 线程0的持续时间:0.478595900000073 线程1持续时间:0.4760909999999967 线程2持续时间:0.47291089999998803 3个线程的总持续时间:0.4847196000000622 然后我将其与只是依次运行推理(以下时间)进行比较: 迭代0持续时间:0.1481448999998065 迭代1持续时间:0.1493705999996564 迭代2持续时间:0.14735560000008263 迭代总持续时间:0.44588549999980387 在我看来,我的多线程推理实际上并未并行运行推理。似乎它只是在完成大部分推论,然后等到所有其他推论都完成之后,才一个接一个地完成它们。我了解在大多数情况下,对于Python,这是因为并非每个线程都释放GIL,但我读过Tensorflow session.run()确实释放了GIL(因此可以并行运行)。 有人能让我知道我对此的解释吗?我实际上缺少使线程并行运行的条件(假设它们不是)? 答案 0 :(得分:0) 此问题很可能是由于创建线程并等待它们完成所产生的开销。为了测试这一点,我建议增加操作中放入的数据量,以增加每个线程的持续时间,以查看对于足够大的数据集,并行运行是否开始比顺序运行快。 请注意,将数据分组在一起并通过单个会话运行它可能会更快,因为图形操作已经在Tensorflow内部并行化了。以我使用线程和Tensorflow的经验,无法获得预期的性能。const aside = document.querySelector('aside')
const hr = document.querySelector('hr')
const options = {
root: null,
}
const obs = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
aside.classList.toggle('scrolled', !entry.isIntersecting)
})
})
obs.observe(hr);
1 个答案: