nvflare-convert-pytorch
Convertir un code d'entraînement PyTorch existant en un travail fédéré NVFLARE en utilisant l'échange de modèles via l'API client, la validation locale et l'exportation de travaux ; ne pas utiliser pour d'autres…
npx skills add https://github.com/nvidia/nvflare --skill nvflare-convert-pytorchNVFLARE Convert PyTorch
Use When
Use when converting an existing plain PyTorch training script, torch.nn.Module, manual training loop,
state_dict workflow, data loader, checkpoint, or metric loop into an NVFLARE federated training job. Supports
horizontal FL, Client API model exchange with FLModel, recipe aggregator= hooks, validation, and export.
Do Not Use When
Do not use for PyTorch Lightning (route to nvflare-convert-lightning), Hugging Face Trainer (route to nvflare-convert-huggingface), TensorFlow, XGBoost,
scikit-learn, failed jobs (route to
nvflare-diagnose-job), federated statistics without training (route to
nvflare-fed-stats), or generic PyTorch debugging without FLARE intent. Out of
scope: production deployment, Kubernetes, POC lifecycle, privacy/security policy design,
controller/workflow rewrites outside recipe or Job APIs, experiment search, and
data distribution experiments beyond minimal validation setup. Privacy-protection
requests — HE/encrypted aggregation, differential privacy, and privacy filters — need provisioning/deployment
policy; route onward rather than substituting an unprotected recipe or adding only a disclaimer.
If a request combines federated statistics and model-training conversion,
treat it as two independent jobs and workflows: do not merge or automatically
chain them, do not route the combination to nvflare-orient, and ask which
workflow to run first before generating or running either job. Recommend
nvflare-fed-stats first only when the user's purpose is to understand data
distribution; handle conversion later as a separate request.
Workflow
- Load
../nvflare-shared/references/conversion-common.mdand apply it for the whole conversion; this SKILL.md states only the framework-specific deltas. Load../nvflare-shared/references/conversion-workflow.mdonly for a non-standard rerun, authorization, or missing-semantics case; it no longer holds the data-location or partitioning contracts, whose invariantsconversion-common.mdowns. Load../nvflare-shared/references/site-data-and-paths.mdfor generated partitions, relative paths, or per-site data locations. - Inspect before editing with
nvflare agent inspect source <path> --format jsonplus direct reading. Fact extraction is static; do not import or execute user training modules to discover fields. Extract: training entrypoint, model class path and constructor args, checkpoint behavior, train/eval functions, data loading, metric names and denominators, local epochs/steps, requested client and round counts, source data split or partition evidence, tracking evidence, DDP evidence, and any custom aggregation intent. - Apply the dependency-install ordering rule in
../nvflare-shared/references/conversion-common.mdbefore any Python command imports user, PyTorch, NVFLARE, or declared dependency modules. - Select the recipe from the requested FL workflow, not from PyTorch alone. For
the standard case — the user explicitly requests FedAvg and inspection
identifies PyTorch — run
nvflare recipe show fedavg-pt --format jsondirectly and construct it; do not add per-site recipe config unless sites actually differ. Load../nvflare-shared/references/pytorch-family-recipe-selection.md(discovery, algorithm guide, catalog-based selection, HE-not-supported rule) only for ambiguous or non-FedAvg algorithms, reservingnvflare recipe listfor those cases. Use the module, class, and parameters returned byrecipe showfor standardjob.pyconstruction; forfedavg-pt, importFedAvgRecipefromnvflare.app_opt.pt.recipes.fedavg, never fromnvflare.recipe. After everyrecipe show, load../nvflare-shared/references/pytorch-family-recipe-construction.mdand derive the recipe's construction capabilities. Loadreferences/recipe-selection.mdonly when non-FedAvg or execution-mode details are needed. - Convert training and evaluation as a pair using
references/pytorch-client-api-conversion.md: initialize FLARE, receive anFLModel, loadparams, evaluate the received global model, train, and send anFLModelwith updatedparams,metrics, and the actual completed local optimizer-step count inNUM_STEPS_CURRENT_ROUND. Adapt the user's evaluation code into the packaged evaluation template; if evaluation is required but missing, ask or fail closed. Apply the step-1 data-location rules to the generated client's data argument. - Add or update
job.pyunder the shared constructor-serialization rule: use explicitclass_path(or documentedpathalias) plus completeargswhenever reconstruction needs values. Add requestedaggregator=wiring, metric, tensor-transport, server offload, and execution settings derived from the shared PyTorch-family construction profile. - Validate in a ladder per
../nvflare-shared/references/validation-evidence.md: compile checks, recipe construction, one final full-run path chosen by the artifact being validated, with export and package inspection only for the selected exported-artifact path. For a local target, inspect the materialized configs and packaging evidence after that run. Usereferences/job-validation.mdfor PyTorch-specific failures. Stop at the first failed rung and report the product error. Use the environment and permission mechanisms supplied by the agent host; do not inspect or enforce its security boundary. - Report the recipe, changed files, validation status, metrics, and exact
artifact paths. Load
../nvflare-shared/references/metrics-and-artifact-reporting.mdonly when normal metric artifacts are absent or inconsistent.
Requirements
- Must audit model constructor arguments before writing
job.pyby reading the model module's__init__and the selected recipe'smodelparameter fromnvflare recipe show <recipe-name> --format json, not by reading NVFLARE library source. Emit the selected recipe's documentedclass_pathorpathkey plus completeargsfor every required or overridden constructor value; a directtorch.nn.Moduleis allowed only when unchanged zero-argument defaults reconstruct it. Values must be statically clear from literal source, configuration, or supplied metadata. Otherwise ask one semantic question when an answer channel exists or fail closed. - Must follow
../nvflare-shared/references/pytorch-model-exchange.mdandreferences/pytorch-client-api-conversion.mdfor the canonical plain-PyTorch payload and round-loop pattern. - Must apply
../nvflare-shared/references/pytorch-family-recipe-construction.mdafterrecipe show; it is the canonical policy for optional recipe parameters, model selection, tensor transport, server disk offload, and execution mode. Never patch a framework-neutral runtime module or register FOBS handlers inclient.py. - Must convert source evaluation alongside training and return metrics through
FLModel.metrics; must not synthesize metric semantics without source evidence. - Must count completed local optimizer steps in each generated training round
and send that positive value as
MetaKey.NUM_STEPS_CURRENT_ROUND. This is the FedAvg aggregation weight; do not omit it, reuse a cumulative count, or invent a value when the source loop cannot establish it. - Must load checkpoints with
torch.load(..., weights_only=True); a checkpoint that needs full unpickling is ask/fail, perreferences/pytorch-client-api-conversion.md. - Must not make non-PyTorch-family skills load
../nvflare-shared/references/pytorch-model-exchange.md; that reference is for plain PyTorch, PyTorch Lightning, and Hugging Face Trainer model/state-dict exchange only. - Site partitioning, custom aggregation, the Source Of Truth Boundary, and user
input/authorization follow
../nvflare-shared/references/conversion-common.md.
Always read this converter SKILL.md together with
../nvflare-shared/references/conversion-common.md. The standard routing,
recipe selection, and reporting path is inline, so common FedAvg does not load
broad policy or algorithm-selection references. Load the client template,
model-exchange reference, validation reference, and aggregator asset only when
their phase needs them. Load other detailed references only for exceptions:
../nvflare-shared/references/conversion-workflow.mdfor the full conversion contract when a case is non-standard;../nvflare-shared/references/site-data-and-paths.mdonly for generated site partitions, relative-path resolution, or per-site data locations;../nvflare-shared/references/pytorch-family-recipe-selection.mdonly for ambiguous or non-FedAvg algorithms, andreferences/recipe-selection.mdonly for non-FedAvg or execution-mode construction details not supplied byrecipe show;../nvflare-shared/references/pytorch-family-recipe-construction.mdafter everyrecipe show;../nvflare-shared/references/dependency-install.mdonly when an install is needed;../nvflare-shared/references/runtime-output-guidance.mdonly for read-only source roots or user-chosen output destinations;../nvflare-shared/references/metrics-and-artifact-reporting.mdonly when metrics are absent or inconsistent;../nvflare-shared/references/validation-evidence.mdbefore validation, and../nvflare-shared/references/pytorch-model-exchange.mdonly for PyTorch-family exchange;references/pytorch-client-api-conversion.mdfor Client API conversion, andreferences/job-validation.mdfor PyTorch-specific validation failures.
Do not load every reference preemptively, and do not depend on NVFLARE repository examples being present in the user's environment.