{"record":{"id":"b5612b6d7e4cc665","repo":"hiyouga/LlamaFactory","slug":"trainer-training-requires-a-train-dataset","errorCode":null,"errorMessage":"Trainer: training requires a train_dataset.","messagePattern":"Trainer: training requires a train_dataset\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/llamafactory/train/hyper_parallel/trainer.py","lineNumber":311,"sourceCode":"        }\n        if self.args.dataloader_num_workers > 0:\n            dataloader_params[\"prefetch_factor\"] = self.args.dataloader_prefetch_factor\n\n        from transformers.trainer import seed_worker  # pylint: disable=C0415\n\n        dataloader_params[\"worker_init_fn\"] = partial(\n            seed_worker,\n            num_workers=self.args.dataloader_num_workers,\n            rank=self.args.process_index,\n        )\n\n        dataloader = self.accelerator.prepare(torch.utils.data.DataLoader(dataset, **dataloader_params))\n        return _CPDataLoaderLengthProxy(dataloader, logical_length)\n\n    def get_train_dataloader(self):\n        \"\"\"Keep the no-CP logical batch stream, then repeat each whole batch across CP peers.\"\"\"\n        if self.train_dataset is None:\n            raise ValueError(\"Trainer: training requires a train_dataset.\")\n        if self._cp_size <= 1:\n            return super().get_train_dataloader()\n\n        shuffle = not getattr(self.finetuning_args, \"disable_shuffling\", False)\n        return self._get_cp_dataloader(\n            dataset=self.train_dataset,\n            batch_size=self._train_batch_size,\n            shuffle=shuffle,\n        )\n\n    def _move_model_to_device(self, model: nn.Module, device: Optional[torch.device] = None):\n        \"\"\"Skip redundant device moves for HSDP-wrapped models.\"\"\"\n        if isinstance(model, HSDPModule):\n            return model\n        if device is None:\n            return model\n        return model.to(device)\n","sourceCodeStart":293,"sourceCodeEnd":329,"githubUrl":"https://github.com/hiyouga/LlamaFactory/blob/f28afaf6355af515454dfb16c97d728307c93897/src/llamafactory/train/hyper_parallel/trainer.py#L293-L329","documentation":"Error \"Trainer: training requires a train_dataset.\" thrown in hiyouga/LlamaFactory.","triggerScenarios":"Thrown at src/llamafactory/train/hyper_parallel/trainer.py:311 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide a training dataset via the `dataset` argument (and ensure it is not empty) before starting training."],"exampleFix":"dataset: identity,alpaca_en_demo","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f28afaf6355af515454dfb16c97d728307c93897","analyzedAt":"2026-08-14T21:57:28.298Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}