Summary
While comparing the unified training schema in deepmd/utils/argcheck.py with the pt_expt backend implementation, I found several options that are exposed as configurable (or documented as PyTorch-supported) but are not implemented in pt_expt yet.
This issue tracks the gaps so we can either implement them in pt_expt or make the schema/docs distinguish legacy pt from pt_expt more clearly.
Gaps
1. model.type: dpa4 advertises fitting_net.type: property, but pt_expt rejects it
Schema/docs:
deepmd/utils/argcheck.py registers the DPA4/SeZM model (model_args_plugin.register("dpa4", alias=["DPA4", "SeZM", "sezm"])).
- Its docs say the DPA4/SeZM scaffold has a selectable energy or invariant-property fitting.
- The DPA4 model schema includes both
dpa4_ener and property in the fitting_net.type variant.
Implementation:
deepmd/pt_expt/model/get_model.py get_sezm_model() only accepts fitting_net.type in ("dpa4_ener", "sezm_ener") and raises otherwise.
Impact:
- A schema-valid
pt_expt input with model.type=dpa4 and fitting_net.type=property fails during model construction.
2. fitting_net.type: population / loss.type: population are exposed, but pt_expt has no implementation
Schema/docs:
deepmd/utils/argcheck.py registers fitting_args_plugin.register("population", doc=doc_only_pt_supported).
deepmd/utils/argcheck.py registers loss_args_plugin.register("population").
Implementation:
deepmd/pt_expt/fitting/ registers ener, dpa4_ener/sezm_ener, dos, property, polar, dipole, and invar, but no population fitting.
deepmd/pt_expt/train/training.py loss dispatch handles ener, dos, ener_spin, tensor, and property, but no population.
Impact:
population is presented as PyTorch-supported in the common schema, but pt_expt users cannot train it.
3. loss.type: dens is exposed for DPA4/SeZM, but pt_expt does not dispatch it
Schema/docs:
deepmd/utils/argcheck.py registers loss_args_plugin.register("dens").
- The loss variant docs say
dens can be used with ener fitting for DPA4/SeZM.
Implementation:
deepmd/pt_expt/loss/ exposes DOSLoss, EnergyLoss, EnergySpinLoss, PropertyLoss, and TensorLoss, but no DensLoss.
deepmd/pt_expt/train/training.py loss dispatch has no dens branch.
Impact:
loss.type=dens passes schema-level expectations but fails in pt_expt training.
4. learning_rate.type: cosine/wsd are exposed, but pt_expt hard-codes LearningRateExp
Schema/docs:
deepmd/utils/argcheck.py registers learning_rate.type variants exp, cosine, and wsd.
Implementation:
deepmd/pt_expt/train/training.py constructs self.lr_schedule = LearningRateExp(**lr_params) directly, without dispatching on learning_rate.type.
Impact:
cosine/wsd learning-rate configs are either rejected by unexpected parameters or silently treated as the wrong schedule.
5. Optimizer schema exposes LKF, AdaMuon, and HybridMuon, but pt_expt only supports Adam/AdamW
Schema/docs:
deepmd/utils/argcheck.py registers optimizer variants Adam, AdamW, LKF, AdaMuon, and HybridMuon.
Implementation:
deepmd/pt_expt/train/training.py only dispatches Adam and AdamW; all other optimizer names raise ValueError("Unsupported optimizer type: ...").
Impact:
- PyTorch-only optimizer options in the schema are not available through
pt_expt.
6. training.zero_stage appears schema-exposed, but pt_expt uses plain DDP
Schema/docs:
deepmd/utils/argcheck.py documents training.zero_stage for DDP/ZeRO/FSDP modes.
Implementation observation:
deepmd/pt_expt/train/training.py wraps distributed training with torch.nn.parallel.DistributedDataParallel and directly constructs Adam/AdamW optimizers; I did not find ZeRO/FSDP wrapping in the pt_expt path.
Impact:
- If
zero_stage is meant to apply to pt_expt, it appears to be accepted but not honored. If it is legacy-pt only, the docs/schema should say so.
Expected resolution
Either:
- implement these options in
pt_expt, or
- update
argcheck.py/docs to distinguish pt vs pt_expt support so users do not get schema-valid configurations that fail at backend runtime.
Filed by OpenClaw 2026.6.11 (e085fa1), model: custom-chat-jinzhezeng-group/gpt-5.5.
Implementation checklist
Model, loss, and optimizer support
Training support
Summary
While comparing the unified training schema in
deepmd/utils/argcheck.pywith thept_exptbackend implementation, I found several options that are exposed as configurable (or documented as PyTorch-supported) but are not implemented inpt_exptyet.This issue tracks the gaps so we can either implement them in
pt_exptor make the schema/docs distinguish legacyptfrompt_exptmore clearly.Gaps
1.
model.type: dpa4advertisesfitting_net.type: property, butpt_exptrejects itSchema/docs:
deepmd/utils/argcheck.pyregisters the DPA4/SeZM model (model_args_plugin.register("dpa4", alias=["DPA4", "SeZM", "sezm"])).dpa4_enerandpropertyin thefitting_net.typevariant.Implementation:
deepmd/pt_expt/model/get_model.pyget_sezm_model()only acceptsfitting_net.typein("dpa4_ener", "sezm_ener")and raises otherwise.Impact:
pt_exptinput withmodel.type=dpa4andfitting_net.type=propertyfails during model construction.2.
fitting_net.type: population/loss.type: populationare exposed, butpt_expthas no implementationSchema/docs:
deepmd/utils/argcheck.pyregistersfitting_args_plugin.register("population", doc=doc_only_pt_supported).deepmd/utils/argcheck.pyregistersloss_args_plugin.register("population").Implementation:
deepmd/pt_expt/fitting/registersener,dpa4_ener/sezm_ener,dos,property,polar,dipole, andinvar, but nopopulationfitting.deepmd/pt_expt/train/training.pyloss dispatch handlesener,dos,ener_spin,tensor, andproperty, but nopopulation.Impact:
populationis presented as PyTorch-supported in the common schema, butpt_exptusers cannot train it.3.
loss.type: densis exposed for DPA4/SeZM, butpt_exptdoes not dispatch itSchema/docs:
deepmd/utils/argcheck.pyregistersloss_args_plugin.register("dens").denscan be used withenerfitting for DPA4/SeZM.Implementation:
deepmd/pt_expt/loss/exposesDOSLoss,EnergyLoss,EnergySpinLoss,PropertyLoss, andTensorLoss, but noDensLoss.deepmd/pt_expt/train/training.pyloss dispatch has nodensbranch.Impact:
loss.type=denspasses schema-level expectations but fails inpt_expttraining.4.
learning_rate.type: cosine/wsdare exposed, butpt_expthard-codesLearningRateExpSchema/docs:
deepmd/utils/argcheck.pyregisterslearning_rate.typevariantsexp,cosine, andwsd.Implementation:
deepmd/pt_expt/train/training.pyconstructsself.lr_schedule = LearningRateExp(**lr_params)directly, without dispatching onlearning_rate.type.Impact:
cosine/wsdlearning-rate configs are either rejected by unexpected parameters or silently treated as the wrong schedule.5. Optimizer schema exposes
LKF,AdaMuon, andHybridMuon, butpt_exptonly supportsAdam/AdamWSchema/docs:
deepmd/utils/argcheck.pyregisters optimizer variantsAdam,AdamW,LKF,AdaMuon, andHybridMuon.Implementation:
deepmd/pt_expt/train/training.pyonly dispatchesAdamandAdamW; all other optimizer names raiseValueError("Unsupported optimizer type: ...").Impact:
pt_expt.6.
training.zero_stageappears schema-exposed, butpt_exptuses plain DDPSchema/docs:
deepmd/utils/argcheck.pydocumentstraining.zero_stagefor DDP/ZeRO/FSDP modes.Implementation observation:
deepmd/pt_expt/train/training.pywraps distributed training withtorch.nn.parallel.DistributedDataParalleland directly constructs Adam/AdamW optimizers; I did not find ZeRO/FSDP wrapping in thept_exptpath.Impact:
zero_stageis meant to apply topt_expt, it appears to be accepted but not honored. If it is legacy-ptonly, the docs/schema should say so.Expected resolution
Either:
pt_expt, orargcheck.py/docs to distinguishptvspt_exptsupport so users do not get schema-valid configurations that fail at backend runtime.Filed by OpenClaw 2026.6.11 (e085fa1), model: custom-chat-jinzhezeng-group/gpt-5.5.
Implementation checklist
Model, loss, and optimizer support
fitting_net.type: propertyfor DPA4/SeZMfitting_net.type: populationandloss.type: populationloss.type: densfor DPA4/SeZMlearning_rate.type: cosineandlearning_rate.type: wsd(fix(train): dispatch registered learning rate schedules #5776)LKF,AdaMuon, andHybridMuonoptimizerstraining.zero_stageTraining support
training.numb_epochand its aliasestraining.num_epoch_dictoptimizerblock instead of backend-only training fieldstraining.save_dirtraining.ckpt_keep_ratiotraining.enable_ema,training.ema_decay, andtraining.ema_ckpt_keeptraining.disp_avgtraining.profilingandtraining.enable_profilertraining.tensorboard*optionstraining.mixed_precisiontraining.change_bias_after_trainingafter the final step (fix(train): share post-training bias adjustment #5745)training.training_data.min_pair_dist