[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-nvflare-convert-pytorch":3,"mdc-au4ejr-key":41,"related-repo-nvidia-nvflare-convert-pytorch":732,"related-org-nvidia-nvflare-convert-pytorch":821},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":36,"sourceUrl":39,"mdContent":40},"nvflare-convert-pytorch","convert PyTorch code to NVFLARE","Convert existing PyTorch training code into an NVFLARE federated job using Client API model exchange, local validation, and job export; do not use for other frameworks, deployment, POC\u002Fproduction lifecycle, or experiment workflows.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Data Pipeline","data-pipeline","tag",{"name":17,"slug":18,"type":15},"PyTorch","pytorch",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Engineering","engineering",947,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNVFlare","2026-07-30T05:26:20.645495","Apache-2.0",266,[29,30,31,32,33,34,35],"decentralized","federated-analytics","federated-computing","federated-learning","pet","privacy-protection","python",{"repoUrl":24,"stars":23,"forks":27,"topics":37,"description":38},[29,30,31,32,33,34,35],"NVIDIA Federated Learning Application Runtime Environment","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNVFlare\u002Ftree\u002FHEAD\u002Fskills\u002Fnvflare-convert-pytorch","---\nname: nvflare-convert-pytorch\ndescription: \"Convert existing PyTorch training code into an NVFLARE federated job using Client API model exchange, local validation, and job export; do not use for other frameworks, deployment, POC\u002Fproduction lifecycle, or experiment workflows.\"\nlicense: Apache-2.0\nmetadata:\n  author: \"NVIDIA FLARE Team \u003Cfederatedlearning@nvidia.com>\"\n  min_flare_version: \"2.9.0\"\n  blast_radius: runs_simulator\n  category: Conversion\n  version: \"0.1.0\"\n  tags: \"nvflare, federated-learning, pytorch, conversion\"\n  languages: \"python\"\n  frameworks: \"pytorch, nvflare\"\n  domain: ml\n---\n\n# NVFLARE Convert PyTorch\n\n## Use When\n\nUse when converting an existing plain PyTorch training script, `torch.nn.Module`, manual training loop,\n`state_dict` workflow, data loader, checkpoint, or metric loop into an NVFLARE federated training job. Supports\nhorizontal FL, Client API model exchange with `FLModel`, recipe `aggregator=` hooks, validation, and export.\n\n## Do Not Use When\n\nDo not use for PyTorch Lightning (route to `nvflare-convert-lightning`), Hugging Face Trainer (route to `nvflare-convert-huggingface`), TensorFlow, XGBoost,\nscikit-learn, failed jobs (route to\n`nvflare-diagnose-job`), federated statistics without training (route to\n`nvflare-fed-stats`), or generic PyTorch debugging without FLARE intent. Out of\nscope: production deployment, Kubernetes, POC lifecycle, privacy\u002Fsecurity policy design,\ncontroller\u002Fworkflow rewrites outside recipe or Job APIs, experiment search, and\ndata distribution experiments beyond minimal validation setup. Privacy-protection\nrequests — HE\u002Fencrypted aggregation, differential privacy, and privacy filters — need provisioning\u002Fdeployment\npolicy; route onward rather than substituting an unprotected recipe or adding only a disclaimer.\nIf a request combines federated statistics and model-training conversion,\ntreat it as two independent jobs and workflows: do not merge or automatically\nchain them, do not route the combination to `nvflare-orient`, and ask which\nworkflow to run first before generating or running either job. Recommend\n`nvflare-fed-stats` first only when the user's purpose is to understand data\ndistribution; handle conversion later as a separate request.\n\n## Workflow\n\n1. Load `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md` and apply it for the\n   whole conversion; this SKILL.md states only the framework-specific deltas.\n   Load `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-workflow.md` only for a non-standard\n   case that needs its detailed rerun, data-location, authorization, or\n   missing-semantics guidance.\n2. Inspect before editing with `nvflare agent inspect \u003Cpath> --format json`\n   plus direct reading. Fact extraction is static; do not import or execute\n   user training modules to discover fields. Extract: training entrypoint,\n   model class path and constructor args, checkpoint behavior, train\u002Feval\n   functions, data loading, metric names and denominators, local epochs\u002Fsteps,\n   requested client and round counts, source data split or partition evidence,\n   tracking evidence, DDP evidence, and any custom aggregation intent.\n3. Apply the dependency-install ordering rule in `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md` before\n   any Python command imports user, PyTorch, NVFLARE, or declared dependency\n   modules.\n4. Select the recipe from the requested FL workflow, not from PyTorch alone. For\n   the standard case — the user explicitly requests FedAvg and inspection\n   identifies PyTorch — run `nvflare recipe show fedavg-pt --format json`\n   directly and construct it; do not add per-site recipe config unless sites\n   actually differ. Load\n   `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-selection.md` (discovery,\n   algorithm guide, catalog-based selection, HE-not-supported rule) only for\n   ambiguous or non-FedAvg algorithms, reserving `nvflare recipe list` for those\n   cases. Use the module, class, and parameters returned by `recipe show` for\n   standard `job.py` construction; for `fedavg-pt`, import `FedAvgRecipe` from\n   `nvflare.app_opt.pt.recipes.fedavg`, never from `nvflare.recipe`. After every\n   `recipe show`, load\n   `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-construction.md` and\n   derive the recipe's construction capabilities. Load\n   `references\u002Frecipe-selection.md` only when non-FedAvg or execution-mode\n   details are needed.\n5. Convert training and evaluation as a pair using\n   `references\u002Fpytorch-client-api-conversion.md`: initialize FLARE, receive an\n   `FLModel`, load `params`, evaluate the received global model, train, and\n   send an `FLModel` with updated `params` and `metrics`. Adapt the user's\n   evaluation code into the packaged evaluation template; if evaluation is\n   required but missing, ask or fail closed. Partition site data per the \"Site\n   Data Partitioning\" rule in `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md`.\n6. Add or update `job.py` with explicit model config (never a live model),\n   requested `aggregator=` wiring, and the metric, tensor-transport, server\n   offload, and execution settings derived from the shared PyTorch-family\n   construction profile.\n7. Validate in a ladder per `..\u002Fnvflare-shared\u002Freferences\u002Fvalidation-evidence.md`:\n   compile checks, recipe construction, one final full-run path chosen by the\n   artifact being validated, and export inspection; use\n   `references\u002Fjob-validation.md` for PyTorch-specific failures. Stop at the\n   first failed rung and report the product error. Use the environment and\n   permission mechanisms supplied by the agent host; do not inspect or enforce\n   its security boundary.\n8. Report the recipe, changed files, validation status, metrics, and exact\n   artifact paths. Load\n   `..\u002Fnvflare-shared\u002Freferences\u002Fmetrics-and-artifact-reporting.md` only when\n   normal metric artifacts are absent or inconsistent.\n\n## Requirements\n\n- Must audit model constructor arguments before writing `job.py` by reading the\n  model module's `__init__` and the selected recipe's `model` parameter from\n  `nvflare recipe show \u003Crecipe-name> --format json`, not by reading NVFLARE\n  library source. Emit explicit recipe model config with `class_path` and\n  `args` only when the values are statically clear from literal source,\n  configuration, or supplied metadata; otherwise ask one semantic question when\n  an answer channel exists or fail closed on that missing value.\n- Must follow `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-model-exchange.md` and\n  `references\u002Fpytorch-client-api-conversion.md` for the canonical plain-PyTorch\n  payload and round-loop pattern.\n- Must apply\n  `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-construction.md` after\n  `recipe show`; it is the canonical policy for optional recipe parameters,\n  model selection, tensor transport, server disk offload, and execution mode.\n  Never patch a framework-neutral runtime module or register FOBS handlers in\n  `client.py`.\n- Must convert source evaluation alongside training and return metrics through\n  `FLModel.metrics`; must not synthesize metric semantics without source\n  evidence.\n- Must load checkpoints with `torch.load(..., weights_only=True)`; a\n  checkpoint that needs full unpickling is ask\u002Ffail, per\n  `references\u002Fpytorch-client-api-conversion.md`.\n- Must not make non-PyTorch-family skills load\n  `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-model-exchange.md`; that reference is\n  for plain PyTorch, PyTorch Lightning, and Hugging Face Trainer model\u002Fstate-dict\n  exchange only.\n- Site partitioning, custom aggregation, the Source Of Truth Boundary, and user\n  input\u002Fauthorization follow `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md`.\n\nAlways read this converter SKILL.md together with\n`..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md`. The standard routing,\nrecipe selection, and reporting path is inline, so common FedAvg does not load\nbroad policy or algorithm-selection references. Load the client template,\nmodel-exchange reference, validation reference, and aggregator asset only when\ntheir phase needs them. Load other detailed references only for exceptions:\n\n- `..\u002Fnvflare-shared\u002Freferences\u002Fconversion-workflow.md` for the full conversion\n  contract when a case is non-standard;\n- `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-selection.md` only for\n  ambiguous or non-FedAvg algorithms, and `references\u002Frecipe-selection.md` only\n  for non-FedAvg or execution-mode construction details not supplied by\n  `recipe show`;\n- `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-construction.md` after\n  every `recipe show`;\n- `..\u002Fnvflare-shared\u002Freferences\u002Fdependency-install.md` only when an install is\n  needed;\n- `..\u002Fnvflare-shared\u002Freferences\u002Fruntime-output-guidance.md` only for read-only\n  source roots or user-chosen output destinations;\n- `..\u002Fnvflare-shared\u002Freferences\u002Fmetrics-and-artifact-reporting.md` only when\n  metrics are absent or inconsistent;\n- `..\u002Fnvflare-shared\u002Freferences\u002Fvalidation-evidence.md` before validation, and\n  `..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-model-exchange.md` only for PyTorch-family exchange;\n- `references\u002Fpytorch-client-api-conversion.md` for Client API conversion, and\n  `references\u002Fjob-validation.md` for PyTorch-specific validation failures.\n\nDo not load every reference preemptively, and do not depend on NVFLARE\nrepository examples being present in the user's environment.\n",{"data":42,"body":52},{"name":4,"description":6,"license":26,"metadata":43},{"author":44,"min_flare_version":45,"blast_radius":46,"category":47,"version":48,"tags":49,"languages":35,"frameworks":50,"domain":51},"NVIDIA FLARE Team \u003Cfederatedlearning@nvidia.com>","2.9.0","runs_simulator","Conversion","0.1.0","nvflare, federated-learning, pytorch, conversion","pytorch, nvflare","ml",{"type":53,"children":54},"root",[55,63,70,109,115,167,173,434,440,596,608,727],{"type":56,"tag":57,"props":58,"children":59},"element","h1",{"id":4},[60],{"type":61,"value":62},"text","NVFLARE Convert PyTorch",{"type":56,"tag":64,"props":65,"children":67},"h2",{"id":66},"use-when",[68],{"type":61,"value":69},"Use When",{"type":56,"tag":71,"props":72,"children":73},"p",{},[74,76,83,85,91,93,99,101,107],{"type":61,"value":75},"Use when converting an existing plain PyTorch training script, ",{"type":56,"tag":77,"props":78,"children":80},"code",{"className":79},[],[81],{"type":61,"value":82},"torch.nn.Module",{"type":61,"value":84},", manual training loop,\n",{"type":56,"tag":77,"props":86,"children":88},{"className":87},[],[89],{"type":61,"value":90},"state_dict",{"type":61,"value":92}," workflow, data loader, checkpoint, or metric loop into an NVFLARE federated training job. Supports\nhorizontal FL, Client API model exchange with ",{"type":56,"tag":77,"props":94,"children":96},{"className":95},[],[97],{"type":61,"value":98},"FLModel",{"type":61,"value":100},", recipe ",{"type":56,"tag":77,"props":102,"children":104},{"className":103},[],[105],{"type":61,"value":106},"aggregator=",{"type":61,"value":108}," hooks, validation, and export.",{"type":56,"tag":64,"props":110,"children":112},{"id":111},"do-not-use-when",[113],{"type":61,"value":114},"Do Not Use When",{"type":56,"tag":71,"props":116,"children":117},{},[118,120,126,128,134,136,142,144,150,152,158,160,165],{"type":61,"value":119},"Do not use for PyTorch Lightning (route to ",{"type":56,"tag":77,"props":121,"children":123},{"className":122},[],[124],{"type":61,"value":125},"nvflare-convert-lightning",{"type":61,"value":127},"), Hugging Face Trainer (route to ",{"type":56,"tag":77,"props":129,"children":131},{"className":130},[],[132],{"type":61,"value":133},"nvflare-convert-huggingface",{"type":61,"value":135},"), TensorFlow, XGBoost,\nscikit-learn, failed jobs (route to\n",{"type":56,"tag":77,"props":137,"children":139},{"className":138},[],[140],{"type":61,"value":141},"nvflare-diagnose-job",{"type":61,"value":143},"), federated statistics without training (route to\n",{"type":56,"tag":77,"props":145,"children":147},{"className":146},[],[148],{"type":61,"value":149},"nvflare-fed-stats",{"type":61,"value":151},"), or generic PyTorch debugging without FLARE intent. Out of\nscope: production deployment, Kubernetes, POC lifecycle, privacy\u002Fsecurity policy design,\ncontroller\u002Fworkflow rewrites outside recipe or Job APIs, experiment search, and\ndata distribution experiments beyond minimal validation setup. Privacy-protection\nrequests — HE\u002Fencrypted aggregation, differential privacy, and privacy filters — need provisioning\u002Fdeployment\npolicy; route onward rather than substituting an unprotected recipe or adding only a disclaimer.\nIf a request combines federated statistics and model-training conversion,\ntreat it as two independent jobs and workflows: do not merge or automatically\nchain them, do not route the combination to ",{"type":56,"tag":77,"props":153,"children":155},{"className":154},[],[156],{"type":61,"value":157},"nvflare-orient",{"type":61,"value":159},", and ask which\nworkflow to run first before generating or running either job. Recommend\n",{"type":56,"tag":77,"props":161,"children":163},{"className":162},[],[164],{"type":61,"value":149},{"type":61,"value":166}," first only when the user's purpose is to understand data\ndistribution; handle conversion later as a separate request.",{"type":56,"tag":64,"props":168,"children":170},{"id":169},"workflow",[171],{"type":61,"value":172},"Workflow",{"type":56,"tag":174,"props":175,"children":176},"ol",{},[177,199,212,224,324,381,400,421],{"type":56,"tag":178,"props":179,"children":180},"li",{},[181,183,189,191,197],{"type":61,"value":182},"Load ",{"type":56,"tag":77,"props":184,"children":186},{"className":185},[],[187],{"type":61,"value":188},"..\u002Fnvflare-shared\u002Freferences\u002Fconversion-common.md",{"type":61,"value":190}," and apply it for the\nwhole conversion; this SKILL.md states only the framework-specific deltas.\nLoad ",{"type":56,"tag":77,"props":192,"children":194},{"className":193},[],[195],{"type":61,"value":196},"..\u002Fnvflare-shared\u002Freferences\u002Fconversion-workflow.md",{"type":61,"value":198}," only for a non-standard\ncase that needs its detailed rerun, data-location, authorization, or\nmissing-semantics guidance.",{"type":56,"tag":178,"props":200,"children":201},{},[202,204,210],{"type":61,"value":203},"Inspect before editing with ",{"type":56,"tag":77,"props":205,"children":207},{"className":206},[],[208],{"type":61,"value":209},"nvflare agent inspect \u003Cpath> --format json",{"type":61,"value":211},"\nplus direct reading. Fact extraction is static; do not import or execute\nuser training modules to discover fields. Extract: training entrypoint,\nmodel class path and constructor args, checkpoint behavior, train\u002Feval\nfunctions, data loading, metric names and denominators, local epochs\u002Fsteps,\nrequested client and round counts, source data split or partition evidence,\ntracking evidence, DDP evidence, and any custom aggregation intent.",{"type":56,"tag":178,"props":213,"children":214},{},[215,217,222],{"type":61,"value":216},"Apply the dependency-install ordering rule in ",{"type":56,"tag":77,"props":218,"children":220},{"className":219},[],[221],{"type":61,"value":188},{"type":61,"value":223}," before\nany Python command imports user, PyTorch, NVFLARE, or declared dependency\nmodules.",{"type":56,"tag":178,"props":225,"children":226},{},[227,229,235,237,243,245,251,253,259,261,267,269,275,277,283,285,291,293,299,301,306,308,314,316,322],{"type":61,"value":228},"Select the recipe from the requested FL workflow, not from PyTorch alone. For\nthe standard case — the user explicitly requests FedAvg and inspection\nidentifies PyTorch — run ",{"type":56,"tag":77,"props":230,"children":232},{"className":231},[],[233],{"type":61,"value":234},"nvflare recipe show fedavg-pt --format json",{"type":61,"value":236},"\ndirectly and construct it; do not add per-site recipe config unless sites\nactually differ. Load\n",{"type":56,"tag":77,"props":238,"children":240},{"className":239},[],[241],{"type":61,"value":242},"..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-selection.md",{"type":61,"value":244}," (discovery,\nalgorithm guide, catalog-based selection, HE-not-supported rule) only for\nambiguous or non-FedAvg algorithms, reserving ",{"type":56,"tag":77,"props":246,"children":248},{"className":247},[],[249],{"type":61,"value":250},"nvflare recipe list",{"type":61,"value":252}," for those\ncases. Use the module, class, and parameters returned by ",{"type":56,"tag":77,"props":254,"children":256},{"className":255},[],[257],{"type":61,"value":258},"recipe show",{"type":61,"value":260}," for\nstandard ",{"type":56,"tag":77,"props":262,"children":264},{"className":263},[],[265],{"type":61,"value":266},"job.py",{"type":61,"value":268}," construction; for ",{"type":56,"tag":77,"props":270,"children":272},{"className":271},[],[273],{"type":61,"value":274},"fedavg-pt",{"type":61,"value":276},", import ",{"type":56,"tag":77,"props":278,"children":280},{"className":279},[],[281],{"type":61,"value":282},"FedAvgRecipe",{"type":61,"value":284}," from\n",{"type":56,"tag":77,"props":286,"children":288},{"className":287},[],[289],{"type":61,"value":290},"nvflare.app_opt.pt.recipes.fedavg",{"type":61,"value":292},", never from ",{"type":56,"tag":77,"props":294,"children":296},{"className":295},[],[297],{"type":61,"value":298},"nvflare.recipe",{"type":61,"value":300},". After every\n",{"type":56,"tag":77,"props":302,"children":304},{"className":303},[],[305],{"type":61,"value":258},{"type":61,"value":307},", load\n",{"type":56,"tag":77,"props":309,"children":311},{"className":310},[],[312],{"type":61,"value":313},"..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-family-recipe-construction.md",{"type":61,"value":315}," and\nderive the recipe's construction capabilities. Load\n",{"type":56,"tag":77,"props":317,"children":319},{"className":318},[],[320],{"type":61,"value":321},"references\u002Frecipe-selection.md",{"type":61,"value":323}," only when non-FedAvg or execution-mode\ndetails are needed.",{"type":56,"tag":178,"props":325,"children":326},{},[327,329,335,337,342,344,350,352,357,359,364,366,372,374,379],{"type":61,"value":328},"Convert training and evaluation as a pair using\n",{"type":56,"tag":77,"props":330,"children":332},{"className":331},[],[333],{"type":61,"value":334},"references\u002Fpytorch-client-api-conversion.md",{"type":61,"value":336},": initialize FLARE, receive an\n",{"type":56,"tag":77,"props":338,"children":340},{"className":339},[],[341],{"type":61,"value":98},{"type":61,"value":343},", load ",{"type":56,"tag":77,"props":345,"children":347},{"className":346},[],[348],{"type":61,"value":349},"params",{"type":61,"value":351},", evaluate the received global model, train, and\nsend an ",{"type":56,"tag":77,"props":353,"children":355},{"className":354},[],[356],{"type":61,"value":98},{"type":61,"value":358}," with updated ",{"type":56,"tag":77,"props":360,"children":362},{"className":361},[],[363],{"type":61,"value":349},{"type":61,"value":365}," and ",{"type":56,"tag":77,"props":367,"children":369},{"className":368},[],[370],{"type":61,"value":371},"metrics",{"type":61,"value":373},". Adapt the user's\nevaluation code into the packaged evaluation template; if evaluation is\nrequired but missing, ask or fail closed. Partition site data per the \"Site\nData Partitioning\" rule in ",{"type":56,"tag":77,"props":375,"children":377},{"className":376},[],[378],{"type":61,"value":188},{"type":61,"value":380},".",{"type":56,"tag":178,"props":382,"children":383},{},[384,386,391,393,398],{"type":61,"value":385},"Add or update ",{"type":56,"tag":77,"props":387,"children":389},{"className":388},[],[390],{"type":61,"value":266},{"type":61,"value":392}," with explicit model config (never a live model),\nrequested ",{"type":56,"tag":77,"props":394,"children":396},{"className":395},[],[397],{"type":61,"value":106},{"type":61,"value":399}," wiring, and the metric, tensor-transport, server\noffload, and execution settings derived from the shared PyTorch-family\nconstruction profile.",{"type":56,"tag":178,"props":401,"children":402},{},[403,405,411,413,419],{"type":61,"value":404},"Validate in a ladder per ",{"type":56,"tag":77,"props":406,"children":408},{"className":407},[],[409],{"type":61,"value":410},"..\u002Fnvflare-shared\u002Freferences\u002Fvalidation-evidence.md",{"type":61,"value":412},":\ncompile checks, recipe construction, one final full-run path chosen by the\nartifact being validated, and export inspection; use\n",{"type":56,"tag":77,"props":414,"children":416},{"className":415},[],[417],{"type":61,"value":418},"references\u002Fjob-validation.md",{"type":61,"value":420}," for PyTorch-specific failures. Stop at the\nfirst failed rung and report the product error. Use the environment and\npermission mechanisms supplied by the agent host; do not inspect or enforce\nits security boundary.",{"type":56,"tag":178,"props":422,"children":423},{},[424,426,432],{"type":61,"value":425},"Report the recipe, changed files, validation status, metrics, and exact\nartifact paths. Load\n",{"type":56,"tag":77,"props":427,"children":429},{"className":428},[],[430],{"type":61,"value":431},"..\u002Fnvflare-shared\u002Freferences\u002Fmetrics-and-artifact-reporting.md",{"type":61,"value":433}," only when\nnormal metric artifacts are absent or inconsistent.",{"type":56,"tag":64,"props":435,"children":437},{"id":436},"requirements",[438],{"type":61,"value":439},"Requirements",{"type":56,"tag":441,"props":442,"children":443},"ul",{},[444,496,515,541,554,573,585],{"type":56,"tag":178,"props":445,"children":446},{},[447,449,454,456,462,464,470,472,478,480,486,488,494],{"type":61,"value":448},"Must audit model constructor arguments before writing ",{"type":56,"tag":77,"props":450,"children":452},{"className":451},[],[453],{"type":61,"value":266},{"type":61,"value":455}," by reading the\nmodel module's ",{"type":56,"tag":77,"props":457,"children":459},{"className":458},[],[460],{"type":61,"value":461},"__init__",{"type":61,"value":463}," and the selected recipe's ",{"type":56,"tag":77,"props":465,"children":467},{"className":466},[],[468],{"type":61,"value":469},"model",{"type":61,"value":471}," parameter from\n",{"type":56,"tag":77,"props":473,"children":475},{"className":474},[],[476],{"type":61,"value":477},"nvflare recipe show \u003Crecipe-name> --format json",{"type":61,"value":479},", not by reading NVFLARE\nlibrary source. Emit explicit recipe model config with ",{"type":56,"tag":77,"props":481,"children":483},{"className":482},[],[484],{"type":61,"value":485},"class_path",{"type":61,"value":487}," and\n",{"type":56,"tag":77,"props":489,"children":491},{"className":490},[],[492],{"type":61,"value":493},"args",{"type":61,"value":495}," only when the values are statically clear from literal source,\nconfiguration, or supplied metadata; otherwise ask one semantic question when\nan answer channel exists or fail closed on that missing value.",{"type":56,"tag":178,"props":497,"children":498},{},[499,501,507,508,513],{"type":61,"value":500},"Must follow ",{"type":56,"tag":77,"props":502,"children":504},{"className":503},[],[505],{"type":61,"value":506},"..\u002Fnvflare-shared\u002Freferences\u002Fpytorch-model-exchange.md",{"type":61,"value":487},{"type":56,"tag":77,"props":509,"children":511},{"className":510},[],[512],{"type":61,"value":334},{"type":61,"value":514}," for the canonical plain-PyTorch\npayload and round-loop pattern.",{"type":56,"tag":178,"props":516,"children":517},{},[518,520,525,527,532,534,540],{"type":61,"value":519},"Must apply\n",{"type":56,"tag":77,"props":521,"children":523},{"className":522},[],[524],{"type":61,"value":313},{"type":61,"value":526}," after\n",{"type":56,"tag":77,"props":528,"children":530},{"className":529},[],[531],{"type":61,"value":258},{"type":61,"value":533},"; it is the canonical policy for optional recipe parameters,\nmodel selection, tensor transport, server disk offload, and execution mode.\nNever patch a framework-neutral runtime module or register FOBS handlers in\n",{"type":56,"tag":77,"props":535,"children":537},{"className":536},[],[538],{"type":61,"value":539},"client.py",{"type":61,"value":380},{"type":56,"tag":178,"props":542,"children":543},{},[544,546,552],{"type":61,"value":545},"Must convert source evaluation alongside training and return metrics through\n",{"type":56,"tag":77,"props":547,"children":549},{"className":548},[],[550],{"type":61,"value":551},"FLModel.metrics",{"type":61,"value":553},"; must not synthesize metric semantics without source\nevidence.",{"type":56,"tag":178,"props":555,"children":556},{},[557,559,565,567,572],{"type":61,"value":558},"Must load checkpoints with ",{"type":56,"tag":77,"props":560,"children":562},{"className":561},[],[563],{"type":61,"value":564},"torch.load(..., weights_only=True)",{"type":61,"value":566},"; a\ncheckpoint that needs full unpickling is ask\u002Ffail, per\n",{"type":56,"tag":77,"props":568,"children":570},{"className":569},[],[571],{"type":61,"value":334},{"type":61,"value":380},{"type":56,"tag":178,"props":574,"children":575},{},[576,578,583],{"type":61,"value":577},"Must not make non-PyTorch-family skills load\n",{"type":56,"tag":77,"props":579,"children":581},{"className":580},[],[582],{"type":61,"value":506},{"type":61,"value":584},"; that reference is\nfor plain PyTorch, PyTorch Lightning, and Hugging Face Trainer model\u002Fstate-dict\nexchange only.",{"type":56,"tag":178,"props":586,"children":587},{},[588,590,595],{"type":61,"value":589},"Site partitioning, custom aggregation, the Source Of Truth Boundary, and user\ninput\u002Fauthorization follow ",{"type":56,"tag":77,"props":591,"children":593},{"className":592},[],[594],{"type":61,"value":188},{"type":61,"value":380},{"type":56,"tag":71,"props":597,"children":598},{},[599,601,606],{"type":61,"value":600},"Always read this converter SKILL.md together with\n",{"type":56,"tag":77,"props":602,"children":604},{"className":603},[],[605],{"type":61,"value":188},{"type":61,"value":607},". The standard routing,\nrecipe selection, and reporting path is inline, so common FedAvg does not load\nbroad policy or algorithm-selection references. Load the client template,\nmodel-exchange reference, validation reference, and aggregator asset only when\ntheir phase needs them. Load other detailed references only for exceptions:",{"type":56,"tag":441,"props":609,"children":610},{},[611,621,645,661,672,683,693,710],{"type":56,"tag":178,"props":612,"children":613},{},[614,619],{"type":56,"tag":77,"props":615,"children":617},{"className":616},[],[618],{"type":61,"value":196},{"type":61,"value":620}," for the full conversion\ncontract when a case is non-standard;",{"type":56,"tag":178,"props":622,"children":623},{},[624,629,631,636,638,643],{"type":56,"tag":77,"props":625,"children":627},{"className":626},[],[628],{"type":61,"value":242},{"type":61,"value":630}," only for\nambiguous or non-FedAvg algorithms, and ",{"type":56,"tag":77,"props":632,"children":634},{"className":633},[],[635],{"type":61,"value":321},{"type":61,"value":637}," only\nfor non-FedAvg or execution-mode construction details not supplied by\n",{"type":56,"tag":77,"props":639,"children":641},{"className":640},[],[642],{"type":61,"value":258},{"type":61,"value":644},";",{"type":56,"tag":178,"props":646,"children":647},{},[648,653,655,660],{"type":56,"tag":77,"props":649,"children":651},{"className":650},[],[652],{"type":61,"value":313},{"type":61,"value":654}," after\nevery ",{"type":56,"tag":77,"props":656,"children":658},{"className":657},[],[659],{"type":61,"value":258},{"type":61,"value":644},{"type":56,"tag":178,"props":662,"children":663},{},[664,670],{"type":56,"tag":77,"props":665,"children":667},{"className":666},[],[668],{"type":61,"value":669},"..\u002Fnvflare-shared\u002Freferences\u002Fdependency-install.md",{"type":61,"value":671}," only when an install is\nneeded;",{"type":56,"tag":178,"props":673,"children":674},{},[675,681],{"type":56,"tag":77,"props":676,"children":678},{"className":677},[],[679],{"type":61,"value":680},"..\u002Fnvflare-shared\u002Freferences\u002Fruntime-output-guidance.md",{"type":61,"value":682}," only for read-only\nsource roots or user-chosen output destinations;",{"type":56,"tag":178,"props":684,"children":685},{},[686,691],{"type":56,"tag":77,"props":687,"children":689},{"className":688},[],[690],{"type":61,"value":431},{"type":61,"value":692}," only when\nmetrics are absent or inconsistent;",{"type":56,"tag":178,"props":694,"children":695},{},[696,701,703,708],{"type":56,"tag":77,"props":697,"children":699},{"className":698},[],[700],{"type":61,"value":410},{"type":61,"value":702}," before validation, and\n",{"type":56,"tag":77,"props":704,"children":706},{"className":705},[],[707],{"type":61,"value":506},{"type":61,"value":709}," only for PyTorch-family exchange;",{"type":56,"tag":178,"props":711,"children":712},{},[713,718,720,725],{"type":56,"tag":77,"props":714,"children":716},{"className":715},[],[717],{"type":61,"value":334},{"type":61,"value":719}," for Client API conversion, and\n",{"type":56,"tag":77,"props":721,"children":723},{"className":722},[],[724],{"type":61,"value":418},{"type":61,"value":726}," for PyTorch-specific validation failures.",{"type":56,"tag":71,"props":728,"children":729},{},[730],{"type":61,"value":731},"Do not load every reference preemptively, and do not depend on NVFLARE\nrepository examples being present in the user's environment.",{"items":733,"total":820},[734,749,762,776,789,799,806],{"slug":735,"name":735,"fn":736,"description":737,"org":738,"tags":739,"stars":23,"repoUrl":24,"updatedAt":748},"autofl-nvflare","develop NVFlare Auto-FL experiments","Help coding agents work on an NVFlare-based Auto-FL harness that follows an autoresearch-style loop. Use when the user wants to create, edit, debug, or extend program.md, task folders such as tasks\u002Fcifar10\u002F and tasks\u002Fvlm_med\u002F, task-local job.py, client.py, model.py, shared custom_aggregators.py, mutation policies, results.tsv logging, or coding-agent prompts for a bounded federated-learning research loop. This skill is specifically for NVFlare harness work where the Client API loop, DIFF upload contract, and NUM_STEPS_CURRENT_ROUND metadata must stay intact unless the user explicitly asks for a protocol upgrade.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[740,743,746,747],{"name":741,"slug":742,"type":15},"Agents","agents",{"name":744,"slug":745,"type":15},"Automation","automation",{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:36:01.532575",{"slug":750,"name":750,"fn":751,"description":752,"org":753,"tags":754,"stars":23,"repoUrl":24,"updatedAt":761},"autofl-nvflare-report","generate NVFlare experiment reports","Generate and commit a markdown report after an Auto-FL NVFlare autoresearch experiment has been manually stopped. Use when the user asks to summarize a stopped campaign, report achieved improvements, explain implemented literature-derived ideas and sources, refresh progress plots, capture pasted agent model\u002Feffort\u002Fcost context when available, or commit the final report and progress plot to the current experiment branch.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[755,756,757,758],{"name":744,"slug":745,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":759,"slug":760,"type":15},"Reporting","reporting","2026-07-14T05:36:00.281416",{"slug":763,"name":763,"fn":764,"description":765,"org":766,"tags":767,"stars":23,"repoUrl":24,"updatedAt":775},"nvflare-autofl","optimize NVFLARE training jobs","Use for agent-assisted Auto-FL optimization of an existing NVFLARE job in simulation, POC, or production. Do not use for code conversion, diagnosis-only work, or deployment setup.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[768,771,772],{"name":769,"slug":770,"type":15},"Machine Learning","machine-learning",{"name":9,"slug":8,"type":15},{"name":773,"slug":774,"type":15},"Optimization","optimization","2026-07-30T05:26:21.697612",{"slug":777,"name":777,"fn":778,"description":779,"org":780,"tags":781,"stars":23,"repoUrl":24,"updatedAt":788},"nvflare-autofl-report","generate NVFLARE Auto-FL campaign reports","Generate a reproducible final report, literature-outcome synthesis, JSON summary, and refreshed progress plot for a stopped or interrupted NVFLARE Auto-FL campaign.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[782,783,784,785],{"name":769,"slug":770,"type":15},{"name":9,"slug":8,"type":15},{"name":759,"slug":760,"type":15},{"name":786,"slug":787,"type":15},"Simulation","simulation","2026-07-30T05:26:14.661827",{"slug":125,"name":125,"fn":790,"description":791,"org":792,"tags":793,"stars":23,"repoUrl":24,"updatedAt":798},"convert PyTorch Lightning code to NVFLARE","Convert existing PyTorch Lightning training code into an NVFLARE federated job using the Lightning Client API patch, local validation, and job export; do not use for plain PyTorch, other frameworks, deployment, POC\u002Fproduction lifecycle, or experiment workflows.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[794,795,796,797],{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},"2026-07-30T05:26:15.761027",{"slug":4,"name":4,"fn":5,"description":6,"org":800,"tags":801,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[802,803,804,805],{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"slug":141,"name":141,"fn":807,"description":808,"org":809,"tags":810,"stars":23,"repoUrl":24,"updatedAt":819},"diagnose failed NVFLARE jobs","Use when the user asks why a reported NVFLARE job failure signal occurred: the job failed, stalled, timed out, lost clients, ended with EXECUTION_EXCEPTION, or produced suspicious errors. Diagnose in simulation, POC, or production by collecting bounded evidence and mapping failure patterns to recovery actions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[811,814,815,816],{"name":812,"slug":813,"type":15},"Debugging","debugging",{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":817,"slug":818,"type":15},"Observability","observability","2026-07-30T05:26:17.665774",10,{"items":822,"total":974},[823,841,858,869,881,893,906,918,931,942,956,965],{"slug":824,"name":824,"fn":825,"description":826,"org":827,"tags":828,"stars":838,"repoUrl":839,"updatedAt":840},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[829,832,835],{"name":830,"slug":831,"type":15},"Documentation","documentation",{"name":833,"slug":834,"type":15},"MCP","mcp",{"name":836,"slug":837,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":842,"name":842,"fn":843,"description":844,"org":845,"tags":846,"stars":855,"repoUrl":856,"updatedAt":857},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[847,850,853],{"name":848,"slug":849,"type":15},"Containers","containers",{"name":851,"slug":852,"type":15},"Deployment","deployment",{"name":854,"slug":35,"type":15},"Python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":859,"name":859,"fn":860,"description":861,"org":862,"tags":863,"stars":855,"repoUrl":856,"updatedAt":868},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[864,867],{"name":865,"slug":866,"type":15},"CI\u002FCD","ci-cd",{"name":851,"slug":852,"type":15},"2026-07-14T05:25:59.97109",{"slug":870,"name":870,"fn":871,"description":872,"org":873,"tags":874,"stars":855,"repoUrl":856,"updatedAt":880},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[875,876,877],{"name":865,"slug":866,"type":15},{"name":851,"slug":852,"type":15},{"name":878,"slug":879,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":882,"name":882,"fn":883,"description":884,"org":885,"tags":886,"stars":855,"repoUrl":856,"updatedAt":892},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[887,888,889],{"name":812,"slug":813,"type":15},{"name":878,"slug":879,"type":15},{"name":890,"slug":891,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":894,"name":894,"fn":895,"description":896,"org":897,"tags":898,"stars":855,"repoUrl":856,"updatedAt":905},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[899,902],{"name":900,"slug":901,"type":15},"Best Practices","best-practices",{"name":903,"slug":904,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":907,"name":907,"fn":908,"description":909,"org":910,"tags":911,"stars":855,"repoUrl":856,"updatedAt":917},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[912,913,916],{"name":769,"slug":770,"type":15},{"name":914,"slug":915,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":919,"name":919,"fn":920,"description":921,"org":922,"tags":923,"stars":855,"repoUrl":856,"updatedAt":930},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[924,927],{"name":925,"slug":926,"type":15},"QA","qa",{"name":928,"slug":929,"type":15},"Testing","testing","2026-07-14T05:25:53.673039",{"slug":932,"name":932,"fn":933,"description":934,"org":935,"tags":936,"stars":855,"repoUrl":856,"updatedAt":941},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[937,938],{"name":851,"slug":852,"type":15},{"name":939,"slug":940,"type":15},"Infrastructure","infrastructure","2026-07-14T05:25:49.362534",{"slug":943,"name":943,"fn":944,"description":945,"org":946,"tags":947,"stars":855,"repoUrl":856,"updatedAt":955},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[948,951,952],{"name":949,"slug":950,"type":15},"Code Review","code-review",{"name":878,"slug":879,"type":15},{"name":953,"slug":954,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":957,"name":957,"fn":958,"description":959,"org":960,"tags":961,"stars":855,"repoUrl":856,"updatedAt":964},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[962,963],{"name":925,"slug":926,"type":15},{"name":928,"slug":929,"type":15},"2026-07-14T05:25:54.928983",{"slug":966,"name":966,"fn":967,"description":968,"org":969,"tags":970,"stars":855,"repoUrl":856,"updatedAt":973},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[971,972],{"name":744,"slug":745,"type":15},{"name":865,"slug":866,"type":15},"2026-07-30T05:29:03.275638",496]