Pytorch Pytork中的JIT整理功能

Pytorch Pytork中的JIT整理功能,pytorch,numba,pytorch-dataloader,Pytorch,Numba,Pytorch Dataloader,我需要创建一个数据加载器,其中collator函数需要进行非平凡的计算,实际上是一个双层循环,这大大降低了训练过程的速度。例如,考虑这个玩具代码,我尝试使用NUMBA来JIT函数: import torch import torch.utils.data import numba as nb class Dataset(torch.utils.data.Dataset): def __init__(self): self.A = np.zeros((100000,

我需要创建一个数据加载器,其中collator函数需要进行非平凡的计算,实际上是一个双层循环,这大大降低了训练过程的速度。例如,考虑这个玩具代码,我尝试使用NUMBA来JIT函数:

import torch
import torch.utils.data

import numba as nb


class Dataset(torch.utils.data.Dataset):
    def __init__(self):
        self.A = np.zeros((100000, 300))
        self.B = np.ones((100000, 300))
    
    def __getitem__(self, index):
        return self.A[index], self.B[index]
    
    def __len__(self):
        return self.A.shape[0]

@nb.njit(cache=True)
def _collate_fn(batch):
    batch_data = np.zeros((len(batch), 300))
    for i in range(len(batch)):
        batch_data[i] = batch[i][0] + batch[i][1]

    return batch_data
然后我创建数据加载器,如下所示:

train_dataset = Dataset()

train_loader = torch.utils.data.DataLoader(
    train_dataset,
    batch_size=256,
    num_workers=6,
    collate_fn=_collate_fn,
    shuffle=True)
但是,如果我删除
\u collate\u fn
的JITing,这会被卡住,但效果很好。我无法理解这里发生了什么。我不必拘泥于numba,可以使用任何有助于克服Python中循环效率低下的东西。蒂亚和快乐12021