大家好,感谢大家的辛勤工作!
我尝试按照文档示例执行异步执行以加速生成推理时间:
async_results = []
for batch in batch_generator(): # For-loop 1
async_results.extend(generator.generate_batch(batch, asynchronous=True))
for async_result in async_results: # For-loop 2
print(async_result.result()) # This method blocks until the result is available.
首先,我尝试在具有1_000个样本的数据集上运行generator.generate_batch(batch, asynchronous=True)
,批量大小为128,并使用4个Nvidia Tesla T4运行device_index=[0, 1, 2, 3]
。for-loop 1
完成得很快,而for-loop 2
几乎立即完成(约3秒)。然而,当我尝试在具有100_000个样本的数据集上运行相同的代码时,for-loop 1
也很快完成(约20毫秒,对我来说是可以接受的),但for-loop 2
仅花费约5分钟来检索第一批1_000个样本的结果(与第一次运行相同)。
我认为这种性能差异(3秒与async_result.result()
在相同的1_000个样本上花费的5分钟)可能与文档中提到的有限队列大小有关。有没有办法加快异步结果检索(for-loop 2
)的速度,以恢复第一次运行的处理速度?
1条答案
按热度按时间rqenqsqc1#
如何获取前1000个样本的结果时间?通常情况下,当100,000个样本通过
for-loop 1
时,必须完成前1000个样本的处理才能清空队列。