pytorch 第一次推理的GPU内存消耗和推理时间较高

pgccezyw  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(282)

注意到第一次推理的gpu内存消耗和推理时间比后续推理高得多。我设置了batch size = 1。例如,对9个样本执行推理就是给出这个推理时间和内存消耗。对于内存消耗,我在每次迭代dataloader时重置峰值内存统计,并使用推理后分配的最大内存来获得每次推理的gpu内存消耗。对于推理时间,我简单地使用时间库并获得开始和结束时间的差异。
下面是代码片段:

with torch.no_grad():
        for shape_index, (file_path) in enumerate(tqdm(dataset.file_paths, desc='eval', ncols=0)):

            torch.cuda.empty_cache()
            torch.cuda.reset_peak_memory_stats()

            data = np.loadtxt(file_path).astype(np.float32)
            start_time = time.time()

            # model inference
            inputs = torch.from_numpy(data).float().to(configs.device)
            vote_confidences = F.softmax(model(inputs), dim=1)

            time_consumption = (time.time() - start_time)
            memory_consumption = (torch.cuda.max_memory_allocated())

下面是推理时间和内存消耗。
内存消耗:[10448984064, 1206454272, 1206454272, 1206454272, 1206454272, 1206454272, 1206454272, 1206454272, 1206454272]
时间消耗:[4.7059266567230225, 0.8842918872833252, 0.9028427600860596, 0.8580131530761719, 0.862271785736084, 0.8550527095794678, 0.8648409843444824, 0.8601820468902588, 0.8670477867126465]
这一观察是否有任何具体原因?
非常感谢

xjreopfe

xjreopfe1#

在第一次推理或前向传递期间,GPU必须为每个级别的每个输出Tensor分配必要的缓冲区内存(这会花费时间)。

相关问题