{"record":{"id":"c4a162c823acc914","repo":"tracel-ai/burn","slug":"a-minimum-of-one-device","errorCode":null,"errorMessage":"A minimum of one device.","messagePattern":"A minimum of one device\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/burn-train/src/learner/supervised/strategies/multi/epoch.rs","lineNumber":89,"sourceCode":"            \"Executing training step for epoch {} on devices {:?}\",\n            epoch,\n            devices\n        );\n\n        let mut iterators = self\n            .dataloaders\n            .iter()\n            .map(|d| d.iter())\n            .collect::<Vec<_>>();\n        let mut iteration = 0;\n        let mut accumulator = GradientsAccumulator::new();\n        let mut accumulation_current = 0;\n\n        let accumulation = self.grad_accumulation.unwrap_or(1);\n        let step = MultiDevicesTrainStep::<M>::new(&devices);\n\n        // The main device is always the first in the list.\n        let device_main = devices.first().expect(\"A minimum of one device.\").clone();\n\n        loop {\n            let (items, progress) = match step.step(iterators.as_mut_slice(), &learner.model()) {\n                Ok(result) => result,\n                Err(err) => {\n                    interrupter.stop(Some(&format!(\"dataset error during training step: {err}\")));\n                    break;\n                }\n            };\n            if items.is_empty() {\n                break;\n            }\n\n            learner.lr_step();\n\n            let mut progress_items = Vec::with_capacity(items.len());\n            for item in items.into_iter() {\n                let grads = item.output.grads.to_device(&device_main, &learner.model());","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/tracel-ai/burn/blob/d16f7ba2ed0d41408189384044cc886fb4c8f957/crates/burn-train/src/learner/supervised/strategies/multi/epoch.rs#L71-L107","documentation":"Configuration guard in the multi-device training strategy's `run_optim_main`: the devices list used for distributed training is empty, so no work can be distributed and execution panics; at least one device (the main device) is required.","triggerScenarios":"Thrown at crates/burn-train/src/learner/supervised/strategies/multi/epoch.rs:89 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass at least one device to the multi-device learner configuration","Verify device enumeration returned a non-empty list","Fall back to the single-device strategy if only CPU/one device is available"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d16f7ba2ed0d41408189384044cc886fb4c8f957","analyzedAt":"2026-09-05T13:19:14.260Z","contentChangedAt":"2026-09-05T13:19:14.260Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}