{"record":{"id":"f4be5fc22365b7b2","repo":"rohitg00/ai-engineering-from-scratch","slug":"num-shards-must-be-1","errorCode":null,"errorMessage":"num_shards must be >= 1","messagePattern":"num_shards must be >= 1","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"phases/19-capstone-projects/47-checkpoint-save-resume/code/main.py","lineNumber":223,"sourceCode":"    restore_rng_state(payload[\"rng\"])\n    s = payload[\"state\"]\n    return TrainState(\n        step=int(s[\"step\"]),\n        epoch=int(s[\"epoch\"]),\n        batch_in_epoch=int(s[\"batch_in_epoch\"]),\n        losses=list(s[\"losses\"]),\n    )\n\n\ndef shard_keys_by_prefix(state_dict: Dict[str, torch.Tensor], num_shards: int) -> Dict[int, List[str]]:\n    \"\"\"Round-robin allocate parameter keys across shards.\n\n    Production sharding usually goes by parameter group or by layer. The\n    round robin keeps the shards roughly the same size for the demo and\n    keeps the index easy to read.\n    \"\"\"\n    if num_shards < 1:\n        raise ValueError(\"num_shards must be >= 1\")\n    keys = sorted(state_dict.keys())\n    shards: Dict[int, List[str]] = {i: [] for i in range(num_shards)}\n    for i, k in enumerate(keys):\n        shards[i % num_shards].append(k)\n    return shards\n\n\ndef save_sharded_checkpoint(\n    model: nn.Module,\n    optimizer: torch.optim.Optimizer,\n    scheduler: torch.optim.lr_scheduler._LRScheduler,\n    state: TrainState,\n    out_dir: Path,\n    *,\n    num_shards: int,\n    extras: Optional[Dict[str, Any]] = None,\n) -> Dict[str, Any]:\n    out_dir.mkdir(parents=True, exist_ok=True)","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/rohitg00/ai-engineering-from-scratch/blob/39ea8a1c6d0b61f071226eff7ede4d4105fed820/phases/19-capstone-projects/47-checkpoint-save-resume/code/main.py#L205-L241","documentation":"Error \"num_shards must be >= 1\" thrown in rohitg00/ai-engineering-from-scratch.","triggerScenarios":"Thrown at phases/19-capstone-projects/47-checkpoint-save-resume/code/main.py:223 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"39ea8a1c6d0b61f071226eff7ede4d4105fed820","analyzedAt":"2026-08-26T03:13:46.626Z","schemaVersion":2},"datasetVersion":"2026-08-26T07:17:17.940Z"}