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