in optimum/graphcore/trainer.py [0:0]
def get_eval_dataloader(self, eval_dataset: Optional[Dataset] = None) -> poptorch.DataLoader:
"""
Returns the evaluation `poptorch.DataLoader`.
Subclass and override this method if you want to inject some custom behavior.
Args:
eval_dataset (`torch.utils.data.Dataset`, *optional*):
If provided, will override `self.eval_dataset`. If it is a [`~datasets.Dataset`] dataset, the columns not accepted
by the `model.forward()` method are automatically removed. It must implement `__len__`.
"""
poptorch_specific_kwargs = {
"auto_distributed_partitioning": not isinstance(eval_dataset, torch.utils.data.IterableDataset),
"mode": DataLoaderMode.Sync,
"worker_init_fn": _WorkerInit(123),
}
if eval_dataset is None and self.eval_dataset is None:
raise ValueError("Trainer: evaluation requires an eval_dataset.")
eval_dataset = eval_dataset if eval_dataset is not None else self.eval_dataset
data_collator = self.eval_data_collator
if is_datasets_available() and isinstance(eval_dataset, datasets.Dataset):
eval_dataset = self._remove_unused_columns(eval_dataset, description="evaluation")
else:
data_collator = self._get_collator_with_removed_columns(data_collator, description="evaluation")
if isinstance(eval_dataset, torch.utils.data.IterableDataset):
return poptorch.DataLoader(
self.eval_opts,
eval_dataset,
batch_size=self.args.per_device_eval_batch_size,
collate_fn=data_collator,
num_workers=self.args.dataloader_num_workers,
pin_memory=self.args.dataloader_pin_memory,
**poptorch_specific_kwargs,
)
eval_sampler = self._get_eval_sampler(eval_dataset)
self._check_dataset_can_fill_batch(eval_dataset, for_inference=True)
return poptorch.DataLoader(
self.eval_opts,
eval_dataset,
sampler=eval_sampler,
batch_size=self.args.per_device_eval_batch_size,
collate_fn=data_collator,
drop_last=self.args.dataloader_drop_last,
num_workers=self.args.dataloader_num_workers,
pin_memory=self.args.dataloader_pin_memory,
**poptorch_specific_kwargs,
)