ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

SuperGradients 训练配方(Training Recipes)完全指南:从命令行一键训练到深度定制

2026/9/18 22:18:29 拓冰建站 浏览量
SuperGradients 训练配方(Training Recipes)完全指南:从命令行一键训练到深度定制 SuperGradients 训练配方Training Recipes完全指南从命令行一键训练到深度定制【免费下载链接】super-gradientsEasily train or fine-tune SOTA computer vision models with one open source training library. The home of Yolo-NAS.项目地址: https://gitcode.com/GitHub_Trending/su/super-gradients本文是 SuperGradients 训练配方Training Recipes的完整实战指南核心讲解如何通过.yaml配方文件以一条命令启动模型训练、如何用 Hydra 命令行覆盖overrides快速调整超参数以及配方文件内部的模块化结构与覆盖优先级。读完本文你将能够读懂仓库内置的任何配方如cifar10_resnet、coco2017_yolox掌握从零组织自己的配方目录并理解train_from_recipe入口到底做了什么。前置知识Recipe 体系的底层依赖是配置文件的组织方式因此阅读本文前建议先通读 Introduction to Configuration Files。SuperGradients 使用hydra库配合.yaml配方recipe来管理训练配置配方的可组合、可覆盖能力正是建立在这套配置机制之上的。从配方启动训练SuperGradients 的目标是用最简单的方式复现一次训练。一条命令即可完成从数据加载、模型构建到训练启动的全过程基础语法如下python -m super_gradients.train_from_recipe --config-nameconfig-name其中config-name对应某个配方的文件名不含.yaml后缀。所有预定义配方都存放在仓库的 src/super_gradients/recipes 目录下覆盖图像分类、目标检测、语义分割、姿态估计Pose Estimation等任务。值得注意的一个惯例是配方文件的头部注释通常会记录该配方的预期性能指标与可直接复制的启动命令。例如 cifar10_resnet.yaml 的头部注明约 250 个 epoch 后达到约 94.9% 精度coco2017_yolox.yaml 的头部则给出了各个 YoloX 变体在 8 卡 GPU 上的 mAP 与训练时长。因此拿到一个新配方时先读头部注释是最快的上手方式。示例一在 Cifar10 上训练 ResNet18仓库内置的 cifar10_resnet.yaml 是最典型的分类入门配方启动命令python -m super_gradients.train_from_recipe --config-namecifar10_resnet该配方会使用resnet18_cifar架构10 分类见 arch_params/resnet18_cifar_arch_params.yaml 中的num_classes: 10加载 Cifar10 数据集download: True会自动下载见 dataset_params/cifar10_dataset_params.yaml使用 250 epoch、初始学习率 0.1、SGD 优化器等训练超参数见 training_hyperparams/cifar10_resnet_train_params.yaml。配方头部还给出了两个常见变体可通过experiment_namecifar10自定义实验名如需使用 Albumentations 变换管线可把数据集配置切换为内置的 albumentations 版本python -m super_gradients.train_from_recipe --config-namecifar10_resnet dataset_paramscifar10_albumentations_dataset_params示例二在 COCO2017 上训练 YoloX Small8 卡 DDP目标检测配方的用法完全一致coco2017_yolox.yaml 是 8 卡 DDP 训练的范例python -m super_gradients.train_from_recipe --config-namecoco2017_yolox architectureyolox_s dataset_params.data_dir/home/coco2017这个命令演示了两个关键点通过architectureyolox_s覆盖默认架构配方默认architecture: yolox_s其arch_params默认引用yolox_s_arch_params通过dataset_params.data_dir/home/coco2017指向本机的 COCO 数据集路径无需改动配方文件。配方的multi_gpu: DDP、num_gpus: 8声明了分布式训练方式头部注释还说明了其有效批量大小是 16 × 8 128。定制训练的两种方式实际使用中几乎总要调整某些参数SuperGradients 提供了两条互补的路径Hydra Overrides命令行覆盖——不改动任何文件适合快速实验修改配方文件——直接编辑 YAML适合固化一个正式的训练方案。方式一Hydra OverridesHydra 覆盖允许你直接从命令行修改任意配置参数语法如下python -m super_gradients.train_from_recipe --config-nameconfig-name param1val1 path.to.param2val2两条规则需要牢记参数名不带--前缀直接写param1...即可使用完整路径配置树每一层用.分隔例如training_hyperparams.max_epochs。假设某配方大致结构如下training_hyperparams: max_epochs: 250 initial_lr: 0.1 ... dataset_params: data_dir: /local/mydataset ... ... # Many other parameters修改 epoch 数与学习率python -m super_gradients.train_from_recipe --config-nameconfig-name training_hyperparams.max_epochs250 training_hyperparams.initial_lr0.03修改数据集路径python -m super_gradients.train_from_recipe --config-nameconfig-name dataset_params.data_dirpath-to-dataset注意不同配方的参数名可能不一致例如resume同时出现在根级与training_hyperparams级请以具体配方文件中的键名为准。方式二直接修改配方如果你使用的是git clone得到的仓库副本可以直接编辑 src/super_gradients/recipes 下的现有配方如果是通过pip install super-gradients安装则无法修改预定义配方文件。正确做法是在你自己的项目中新建配方目录并在其中基于 SuperGradients 内置配方组合出自己的配方。这属于自定义配方的范畴完整方法见后续教程 Recipes_Custom.md。官方建议先完成本教程因为自定义配方依赖对默认值、覆盖顺序等概念的理解。配方结构剖析浏览recipes目录下的 YAML 文件时会发现部分文件开头带有defaults键。下面是最小化的配方示例同时也是理解整个体系的关键defaults: - training_hyperparams: cifar10_resnet_train_params - dataset_params: cifar10_dataset_params - arch_params: resnet18_cifar_arch_params - checkpoint_params: default_checkpoint_params - _self_ - variable_setup architecture: resnet18 train_dataloader: cifar10_train # Optional, see comments below val_dataloader: cifar10_val # Optional, see comments below multi_gpu: Off num_gpus: 1 experiment_suffix: experiment_name: cifar10_${architecture}${experiment_suffix}仓库中真实的 cifar10_resnet.yaml 与该最小示例结构完全一致实际使用architecture: resnet18_cifar。这个文件包含了训练一个模型所需的全部必备属性。配方组成部分defaults整个配方体系的核心使用 OmegaConf 语法作用是指向其他配方文件从而实现模块化、可复用的配置组合。参数引用Referencing Parameters通过点分路径引用配置例如training_hyperparams.initial_lr指的就是cifar10_resnet_train_params.yaml中的initial_lr。_self_代表当前配方文件自身允许当前配方覆盖上面列出的默认配置它在defaults列表中的位置决定了覆盖优先级。variable_setup启用常用命令行快捷方式所必需的配置段必须位于defaults列表的最后一项详见下文命令行快捷方式。配方文件必须包含以下四个必备配置段training_hyperparams——训练策略相关的全部超参数学习率、epoch 数、优化器、损失函数、学习率调度、EMA、验证频率、随机种子等。cifar10_resnet_train_params.yaml以 default_train_params.yaml 为基础仅覆盖差异项如max_epochs: 250、initial_lr: 0.1、optimizer: SGD。dataset_params——训练/验证数据集与 DataLoader 的配置包括数据变换transforms、batch_size、num_workers等。它与根级参数train_dataloader、val_dataloader紧密耦合这两个参数用于按名称实例化训练与验证 DataLoader属于便捷性参数在 SG 内置配方中普遍存在但并非广义上的必备项。外部自定义数据集的使用方式见 Data.md 中的 Using Custom Datasets 章节。arch_params——模型架构参数与根级architecture参数成对出现architecture决定具体模型arch_params决定该模型的参数如num_classes。checkpoint_params——检查点相关设置包括迁移学习时加载权重、是否使用预训练权重、严格加载模式等支持的完整参数见 checkpoint_params/default_checkpoint_params.yamlload_checkpoint、load_backbone、checkpoint_path、external_checkpoint_path、strict_load、pretrained_weights、checkpoint_num_classes等。理解覆盖顺序警告defaults列表中的条目顺序至关重要覆盖优先级遵循列表顺序列表中靠后的配置可以覆盖靠前的配置。构造配方时务必注意这一点。以cifar10_resnet.yaml的实际顺序为例defaults: - training_hyperparams: cifar10_resnet_train_params - dataset_params: cifar10_dataset_params - arch_params: resnet18_cifar_arch_params - checkpoint_params: default_checkpoint_params - _self_ - variable_setup_self_位于四个子配置之后因此配方自身的顶层键如architecture、experiment_name可以覆盖四个子配置中的同名项而variable_setup位于最后可以覆盖_self_中的内容。组织你的配方文件夹为了与上述组合机制匹配配方文件夹建议按以下结构组织├─ cifar10_resnet.yaml ├─ ... ├─training_hyperparams │ ├─ cifar10_resnet_train_params.yaml │ └─ ... ├─dataset_params │ ├─ cifar10_dataset_params.yaml │ └─ ... ├─arch_params │ ├─ resnet18_cifar_arch_params.yaml │ └─ ... └─checkpoint_params ├─ default_checkpoint_params.yaml └─ ...并非强制要求完全遵循此结构但保持这一约定可以确保与 SuperGradients 的默认查找逻辑兼容。命令行覆盖快捷方式虽然任何参数都可以通过命令行完整路径覆盖但手写完整路径相当繁琐。例如修改学习率要写training_hyperparams.initial_lr0.02修改批量大小要同时写dataset_params.train_dataloader_params.batch_size128 dataset_params.val_dataloader_params.batch_size128为此SuperGradients 为最常用的参数定义了快捷方式快捷方式等价于完整路径lr0.02training_hyperparams.initial_lr0.02bs128dataset_params.train_dataloader_params.batch_size128 dataset_params.val_dataloader_params.batch_size128epochs100training_hyperparams.max_epochs100num_workers4dataset_params.train_dataloader_params.num_workers4 dataset_params.val_dataloader_params.num_workers4resumeTruetraining_hyperparams.resumeTrueematruetraining_hyperparams.ematrue使用这些快捷方式的前提是配方的defaults中包含了variable_setup段且variable_setup必须是defaults列表的最后一项。从源码实现看快捷方式并非硬编码在训练逻辑中而是由 variable_setup.yaml 中声明的 Hydra 回调RecipeShortcutsCallback在启动时完成的。该回调位于 src/super_gradients/common/environment/omegaconf_utils.py其on_run_start逻辑逐一将快捷值如config.lr与完整路径值如config.training_hyperparams.initial_lr合并——快捷方式未设置时自动回填完整路径值两者都会被写入最终配置以便日志记录清晰。两个值得注意的源码级细节当前仓库实现中快捷方式键名实际为batch_size与val_batch_size分别对应训练与验证 DataLoader 的batch_size而非文档中的bs建议以 variable_setup.yaml 的实际键名为准由于快捷方式依赖 Hydra 回调机制完成插值它们不会在其他 YAML 配置文件中生效即插值只发生在回调运行时。此外variable_setup.yaml还承担了输出目录的设置通过hydra.run.dir: ${hydra_output_dir:${ckpt_root_dir}, ${experiment_name}}把 Hydra 输出目录指向get_checkpoints_dir_path计算出的检查点目录便于集中管理实验产物。底层执行流程train_from_recipe 做了什么命令python -m super_gradients.train_from_recipe的入口是 src/super_gradients/train_from_recipe.pyimport hydra from omegaconf import DictConfig from super_gradients import Trainer, init_trainer hydra.main(config_pathrecipes, version_base1.2) def _main(cfg: DictConfig) - None: Trainer.train_from_config(cfg) def main() - None: init_trainer() # init_trainer needs to be called before hydra.main _main() if __name__ __main__: main()hydra.main(config_pathrecipes)告诉 Hydra 从recipes目录解析配方--config-name即指定其中的某个文件。真正干活的是Trainer.train_from_config见 src/super_gradients/training/sg_trainer/sg_trainer.py#L234-L298其执行流程可以概括为设备设置根据device、multi_gpu、num_gpus配置初始化单卡/DDP 运行环境配置解析将DictConfig解析为纯字典并记录到日志recipe_logged_cfg实例化全部对象调用hydra.utils.instantiate(cfg)把 YAML 中的_target_声明如lr_updates的numpy.arange、strict_load的StrictLoad实例化为真实对象触发配置修改回调执行pre_launch_callbacks_list中注册的预启动回调构建模型通过models.get(model_namecfg.architecture, num_classescfg.arch_params.num_classes, ...)按architecturearch_params构建网络并按checkpoint_params加载权重构建 DataLoader通过dataloaders.get(namecfg.train_dataloader / cfg.val_dataloader, ...)实例化训练与验证加载器以及可选的测试加载器启动训练调用trainer.train(model, train_loader, valid_loader, test_loaders, training_paramscfg.training_hyperparams, ...)。可以看到配方的四大配置段与architecture、train_dataloader、val_dataloader、experiment_name等根级键正是沿着这条调用链被逐一消费的。理解了这条链路就能理解为什么配方的结构约定如此重要。结语与下一步通过本教程你已经掌握了 SuperGradients 训练配方的完整使用方式训练模型用.yaml配方一条命令启动训练配方头部通常会自带可执行命令与性能说明定制训练通过 Hydra 命令行覆盖快速实验或直接修改/组合配方文件固化方案理解配方结构掌握defaults组合机制、四大必备配置段、_self_与覆盖顺序以及variable_setup快捷方式的底层实现。配方是声明式训练的基石而真正让配方动态实例化各类对象模型、数据集、损失、优化器、回调的是 SuperGradients 的工厂Factory机制。下一步请继续阅读 Recipes_Factories.md了解工厂如何与配方协同工作从而为你的独特需求组装出更强大的训练流程。【免费下载链接】super-gradientsEasily train or fine-tune SOTA computer vision models with one open source training library. The home of Yolo-NAS.项目地址: https://gitcode.com/GitHub_Trending/su/super-gradients创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考