CTranslate2 Asynchronous execution: High latency when retrieving results

oprakyz7  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(53)

大家好,感谢大家的辛勤工作!
我尝试按照文档示例执行异步执行以加速生成推理时间:

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)的速度,以恢复第一次运行的处理速度?

rqenqsqc

rqenqsqc1#

如何获取前1000个样本的结果时间?通常情况下,当100,000个样本通过for-loop 1时,必须完成前1000个样本的处理才能清空队列。

相关问题