资讯详情 BasicTS 配置类体系详解:All-in-Configuration 设计、字段默认值与源码实现
📅 2026/10/14 17:28:07
人工智能机器学习深度学习数据分析【免费下载链接】BasicTSA Fair and Scalable Time Series Forecasting Benchmark and Toolkit.项目地址https://gitcode.com/gh_mirrors/ba/BasicTS点击查看免费下载BasicTS 的核心设计理念是 All-in-configuration配置即一切一个配置类即包含执行时间序列任务所需的全部信息用户只需聚焦模型与数据无需手工搭建繁琐的训练流程。本文基于仓库文档 config_design.md 与 config_design_cn.md结合 src/basicts/configs/ 下的实际源码完整讲解 BasicTS 1.x 配置类的层级结构、各配置分区与默认值、既是类也是字典的双重使用方式、对象延迟构造的参数传递机制以及配置的序列化、持久化与执行入口调用链。设计哲学从py 文件 命令行到配置类在早期版本中BasicTS 采用 Python 配置文件配合命令行指定配置路径的方式来组织实验。从1.0 版本开始这一方式被彻底替换为基于配置类configuration class的系统当前仓库版本为 1.1.0见 src/basicts/__init__.py。该设计带来三个直接收益单一入口一个配置类实例承载任务的全部设定BasicTSLauncher.launch_training(cfg)只需接收这一个对象即可启动训练类型与文档内聚每个字段通过 dataclass 的metadata提供默认值说明与用法描述配置本身即是文档可序列化、可复现配置类可整体导出为 JSON 并保存为cfg.json同时计算内容 MD5 作为目录名保证同配置重跑结果目录可对齐。配置类层级基类与四类任务配置配置类的继承结构在 src/basicts/configs/__init__.py 中导出配置类文件适用任务说明BasicTSConfigbase_config.py基类定义公用字段及保存/加载/打印方法BasicTSForecastingConfigtsf_config.py预测默认BasicTSForecastingDatasetZScoreScalerBasicTSClassificationConfigtsc_config.py分类默认UEADatasetscalerNonebest_metricmaxBasicTSImputationConfigtsi_config.py插补默认BasicTSImputationDataset含mask_ratio字段BasicTSFoundationModelConfigtsfm_config.py基础模型model_dtypebfloat16、AdamWCosineWarmup按 step 训练基类BasicTSConfig声明了所有子类共享的必填字段base_config.py#L29-L44dataclass(initFalse) class BasicTSConfig(EasyDict): model: type # 模型类必须显式指定 model_config: BasicTSModelConfig # 模型参数必须显式指定 dataset_name: str # 数据集名必须显式指定 taskflow: BasicTSTaskFlow callbacks: List[BasicTSCallback]四个任务配置类在各自文件中以dataclass(initFalse)派生将执行该任务需要的一切参数默认数据集类型、默认评估指标、默认损失函数、taskflow类型等内聚到子类中。例如分类任务默认指标为[Accuracy]且best_metricmaxtsc_config.py#L123-L135而预测任务默认指标为[MAE, MSE, RMSE, MAPE, WAPE]、target_metricMAEtsf_config.py#L130-L142。用户可以在这些配置类中灵活地导入任意模型类并设置所有必要选项。各任务配置类的关键差异从源码对比可以看出四个任务配置类在默认值上的任务特化字段ForecastingClassificationImputationFoundationModeldataset_typeBasicTSForecastingDatasetUEADatasetBasicTSImputationDatasetBasicTSForecastingDatasetdataset_params默认{input_len: 336, output_len: 336, use_timestamps: True, memmap: False}{memmap: False}{input_len: 336, use_timestamps: True, memmap: False}空 dictscalerZScoreScalerNone分类无需反归一化ZScoreScaler无该字段metricsMAE/MSE/RMSE/MAPE/WAPE[Accuracy]MAE/MSE/RMSE/MAPE/WAPE空列表以loss为准best_metricminmaxminminloss默认MAECrossEntropyLoss()MAEMAEoptimizer默认Adamlr2e-4, weight_decay5e-4Adam同左Adam同左AdamWlr1e-3, fusedTruelr_scheduler默认NoneNoneNoneCosineWarmup1000 步 warmup / 10000 步训练节奏按 epochnum_epochs100按 epoch按 epoch按 stepnum_steps10000ckpt_save_dir后缀{dataset}_{num_epochs}_{input_len}_{output_len}{dataset}_{num_epochs}{dataset}_{num_epochs}_{input_len}_{mask_ratio}{dataset}_{num_steps}此外插补任务独有mask_ratio: float 0.25字段tsi_config.py#L116基础模型任务独有model_dtype默认bfloat16字段用于指定模型精度tsfm_config.py#L122。各任务类的__post_init__会在ckpt_save_dir未指定时按上述模式自动生成默认目录如 tsf_config.py#L268-L271。配置分区总览与默认值文档指出配置类通常包含以下分区对照 tsf_config.py 的完整实现可以把每个分区的关键字段与默认值整理如下以预测任务为例默认值均以源码为准常规选项General字段类型默认值说明gpusstr \| NoneNone使用 GPU。如0,1表示使用cuda:0、cuda:1None表示 CPUgpu_numint0初始化后由gpus自动计算seedint42随机种子taskflowBasicTSTaskFlow任务对应默认 TaskFlow任务流对象callbacksList[BasicTSCallback][]回调如早停、梯度裁剪compile_modelboolFalse是否用torch.compile编译模型ddp_find_unused_parametersboolFalse分布式训练DDP的find_unused_parameters环境选项Environment字段默认值说明tf32False是否在 GPU 中启用 TensorFloat-32deterministicFalse是否设置确定性随机种子以获得可复现结果cudnn_enabledTrue是否启用 cuDNNcudnn_benchmarkTrue是否启用 cuDNN benchmarkcudnn_determinsticFalse是否将 cuDNN 设为确定性模式数据集与缩放器选项Dataset Scaler字段默认值说明dataset_name必须显式指定数据集名dataset_typeBasicTSForecastingDataset数据集类dataset_params{input_len: 336, output_len: 336, use_timestamps: True, memmap: False}数据集参数batch_sizeNone若设置则统一写入三个 dataloaderscalerZScoreScaler缩放器类norm_each_channelTrue是否按通道独立归一化rescaleFalse是否对输出做反归一化模型选项Modelmodel模型类必须显式指定与model_config模型参数必须显式指定是全部必填字段的核心。model_config的基类是 model_config.py 中的BasicTSModelConfig同样继承自EasyDict每个模型仓库内都自带一个带metadata的子类。以 iTransformer 为例itransformer_config.pydataclass class iTransformerConfig(BasicTSModelConfig): input_len: int field(defaultNone, metadata{help: Input sequence length.}) output_len: int field(defaultNone, metadata{help: Output sequence length for forecasting task.}) num_features: int field(defaultNone, metadata{help: Number of features.}) hidden_size: int field(default256, metadata{help: Hidden size.}) n_heads: int field(default1, metadata{help: Number of heads in multi-head attention.}) # ... 其余字段略评估指标选项Metricsmetrics评估指标函数列表。字符串形式时必须在basicts.metrics模块的ALL_METRICS中也可以传(指标名, 函数)元组来自定义target_metric用于保存最佳 checkpoint 的目标指标必须在metrics中或为字符串lossbest_metricmin或max指明指标越小越好还是越大越好。训练 / 验证 / 测试选项Train / Val / Test常规num_epochs默认 100/num_steps默认None二者只应指定其一loss默认MAE字符串须可被basicts.metrics解析。优化器optimizer默认Adamoptimizer_params默认{lr: 2e-4, weight_decay: 5e-4}。调度器lr_scheduler默认Nonelr_scheduler_params默认{}。数据batch_size或分别设置train_batch_size/val_batch_size/test_batch_size默认均为 64以及*_data_num_workers默认 0、*_data_pin_memory默认False、*_data_prefetch默认False等。验证/测试频率val_interval、test_interval默认均为 1即每 epoch 验证/测试一次。checkpoint 相关ckpt_save_dir未指定时按任务默认模式生成、ckpt_save_strategyNone/int/List[int]控制保存节奏、finetune_from微调起点默认None、strict_load默认True。每个字段都带有metadata{help: ...}提供默认值、详细含义与使用方法——这也是文档所说字段 metadata 即文档的源码落地形式如 tsf_config.py#L83-L117。构造配置类既是类也是字典双重身份的实现机制BasicTS 的配置类继承自EasyDict因此既可以作为 Python 类使用也可以作为字典使用方便扩展且灵活易用。这一双重身份由dataclass(initFalse)与自定义__init__共同实现其初始化流程见 base_config.py#L170-L204从kwargs中挑出与已声明 dataclass 字段同名的参数逐项写入属性并补全所有默认值 /default_factory其余参数整体透传给EasyDict成为字典键值——这就是不能直接在构造方法中添加未定义字段约束背后的机制未定义字段不会报错而是落入 EasyDict 的自由键空间执行子类的__post_init__例如生成默认ckpt_save_dir若设置了统一batch_size将其同步到train_batch_size/val_batch_size/test_batch_size调用_pack_params把快捷字段回填进model_config、dataset_params、optimizer_params、lr_scheduler_params由gpus计算gpu_num。基于此两种使用方式都可以直接落地方式一像类一样使用——一切参数都是类的字段可以像访问类字段一样访问、修改以及添加新的参数model config.model config.gpus 0 config.new_field new_value方式二像字典一样使用——一切参数都是字典的键值可以像访问字典一样访问、修改、添加、删除参数model config[model] optimizer config.get(optimizer, Adam) config[new_key] new_value config.pop(not_used)源码中__getitem__还做了一层兼容处理base_config.py#L210-L218先按属性含md5、serialized等 property取值失败后再回退到字典取值并对旧版本键名做. - _归一化保证新旧键名混用时不致 404 式的KeyError。配置类中的对象延迟构造与两种传参方式配置中存在许多需要进一步构造的对象——模型、数据集、优化器、调度器等。BasicTS 的做法是在配置中只传入类 参数把实际对象构造延迟到执行任务时。真正的实例化发生在 src/basicts/runners/builder.py 的Builder中例如# _build_modelbuilder.py#L47 model cfg.model(cfg.model_config) # _build_optimizerbuilder.py#L143-L145 return cfg.optimizer(model.parameters(), **cfg.optimizer_params) # _build_lr_schedulerbuilder.py#L147-L149 return cfg.lr_scheduler(optimizer, **cfg.lr_scheduler_params)对于这类对象BasicTS 支持两种灵活的配置方式方式一将构造对象所需的全部参数以字典形式传入。例如通过dataset_params指定数据集创建参数config BasicTSForecastingConfig( dataset_params{ input_len: 336, output_len: 336, ... }, ... )Builder._build_dataset在dataset_params非None时直接以它构造cfg.dataset_type(**dataset_params, modemode)builder.py#L114-L141。方式二直接将构造对象需要的参数作为顶层字段传入。可以直接配置 Config 类的input_len、output_len等已声明的快捷字段并在初始化后再以字典/属性方式追加自定义参数注意初始化时只能传已定义的字段未定义字段需构造后添加config BasicTSForecastingConfig( input_len336, output_len336, ... ) config.your_dataset_param_1 param_1 config.your_dataset_param_2 param_2这种快捷字段shortcut机制的源码核心是_pack_paramsbase_config.py#L262-L287它在初始化时检查目标类数据集/优化器/调度器__init__的签名把出现在配置顶层且非 None 的同名字段回填进参数 dict且快捷字段的优先级高于参数 dict 中已有的同名值源码注释 short cut has higher priority than params in config。参与回填的快捷键由_SHORTCUT_KEYS声明为[batch_size, input_len, output_len, use_timestamps, memmap, lr]base_config.py#L147-L148。同时该函数会对LRScheduler子类跳过optimizer形参——因为优化器实例由Builder._build_lr_scheduler在运行时传入。当dataset_params为None且用户完全以顶层字段方式传参时Builder._build_dataset会按dataset_type.__init__签名从配置中逐键收集参数若某个必填参数在配置中缺失将显式抛出KeyError提示 Please add it to the config for building the datasetbuilder.py#L125-L139——这是一个值得注意的边界自定义数据集使用字段式传参时签名里的每个必填参数都必须能在配置顶层找到。序列化、保存与 MD5配置的持久化细节基类把打印、保存、加载、摘要内建到了配置本身打印即 JSON__str__将配置序列化为缩进 JSONbase_config.py#L207-L208serialized属性在导出时剔除私有字段_前缀与快捷键避免冗余对象还原from_json类方法配合_construct_obj可以从 JSON 重建对象——键集为{name, module}的字典被解析为导入模块并取同名类键集为{name, module, params}的字典则直接实例化列表/元组/嵌套字典递归处理base_config.py#L220-L260。反向的_serialize_obj会把类/函数写成{name, module}、partial写成{name, params}、Enum写成其值、slice写成[a:b]字符串等base_config.py#L296-L352保存save()将cfg.json写入{ckpt_save_dir}/{md5}/目录base_config.py#L289-L294MD5 的训练相关口径_get_md5在哈希前会剔除_TRAINING_INDEPENDENT_KEYS如gpus、各 dataloader 的 workers/pin_memory/prefetch、val_interval、test_interval等再计算base_config.py#L149-L154、#L354-L361。含义是改变硬件资源或数据加载方式不会改变配置指纹而改变会实质影响训练的配置模型、损失、超参等则会得到新指纹、落在新的实验目录中。完整实战从配置到训练的一条龙预测任务完整示例官方示例 examples/forecasting/forecasting_demo.py 展示了配置类在真实实验中的用法——在 ETTh1 上训练 iTransformer并用 4×4 的input_len/output_len网格批量跑实验from torch.optim.lr_scheduler import MultiStepLR from basicts import BasicTSLauncher from basicts.configs import BasicTSForecastingConfig from basicts.metrics import masked_mse from basicts.models.iTransformer import (iTransformerConfig, iTransformerForForecasting) from basicts.runners.callback import EarlyStopping, GradientClipping def main(): # train iTransformer on ETTh1 # run 4 experiments with different input_len and output_len for input_len in [96, 192, 336, 720]: for output_len in [96, 192, 336, 720]: # config iTransformer model_config iTransformerConfig( num_features7, hidden_size32, intermediate_size32, n_heads1, num_layers1, dropout0.1, use_revinTrue ) BasicTSLauncher.launch_training(BasicTSForecastingConfig( modeliTransformerForForecasting, model_configmodel_config, dataset_nameETTh1, input_leninput_len, # 快捷字段自动回填进 dataset_params 与 model_config output_lenoutput_len, gpus0, callbacks[EarlyStopping(), GradientClipping(1.0)], # use callbacks seed233, num_epochs100, batch_size64, metrics[MSE, MAE], lossmasked_mse, optimizer_params{ lr: 5e-4 }, lr_schedulerMultiStepLR, lr_scheduler_params{ milestones: [25, 50], gamma: 0.5 } ))这里体现了前文全部机制的协作input_len/output_len是顶层快捷字段会被_pack_params回填进model_config与dataset_paramsloss直接传函数对象masked_msecallbacks传回调实例列表batch_size会同步到三个 dataloader。冒烟测试的最小配置仓库的冒烟测试 tests/smoke_test/test_itransformerforr.py 展示了插补任务下最精简的可运行配置配套微型数据集位于 tests/smoke_test/datasets/def test_itransformerforr_smoke_test(): input_len 32 model_config iTransformerConfig( input_leninput_len, num_features7 ) BasicTSLauncher.launch_training(BasicTSImputationConfig( modeliTransformerForReconstruction, model_configmodel_config, dataset_nameETTh1_mini, mask_ratio0.25, gpusNone, # 无 GPU 环境 batch_size16, input_leninput_len, num_epochs5, ))配置如何被执行链消费配置对象进入执行链后的调用过程由 src/basicts/launcher.py 定义BasicTSLauncher.launch_training(cfg, node_rank0)在 rank 0 节点调用cfg.save()落盘cfg.json依据gpus字段选择gpu/mlu/cpu设备类型并设置可见设备再通过dist_wrap进入分布式包装最终的training_func用该配置构造BasicTSRunner(cfg)初始化日志并执行runner.train()launcher.py#L102-L113推理侧另有BasicTSLauncher.launch_evaluation(cfg, ckpt_path, gpusNone, batch_sizeNone)它会在运行时改写cfg.gpus、cfg.gpu_num与cfg.test_batch_size再调用runner.eval(ckpt_path)launcher.py#L60-L100——再次印证配置对象在运行时被直接读写的特点。小结与延伸阅读BasicTS 的配置体系可以概括为三句话一个 EasyDict 继承的 dataclass 承载任务全部设定类 参数的字段支持延迟构造对象并以快捷字段或参数字典两种方式传参配置自身可打印、可保存、可从 JSON 重建并以训练相关指纹MD5管理实验目录。掌握这套机制后无论是复用基线模型还是接入自定义数据集、自定义模型都只需要写一个配置类实例并调用BasicTSLauncher。仓库中与配置体系强相关、可进一步深入的文档快速上手 / Getting Started了解 BasicTS 的设计理念 / Overall Design探索数据集设计并自定义数据集 / Dataset Design了解数据缩放器设计并创建自定义缩放器 / Scaler Design深入了解模型设计并构建自定义模型 / Model Design了解评估指标设计并开发自定义损失函数与评估指标 / Metrics Design掌握执行器设计并创建自定义执行器 / Runner and Pipeline配置设计中文原文config_design_cn.md英文原文config_design.md适用前提说明本文所有默认值、字段与行为均以当前仓库版本 1.1.0源码为准若上游迭代调整了配置字段请以 src/basicts/configs/ 下的最新实现为准。赞分享人工智能机器学习深度学习数据分析【免费下载链接】BasicTSA Fair and Scalable Time Series Forecasting Benchmark and Toolkit.项目地址https://gitcode.com/gh_mirrors/ba/BasicTS点击查看免费下载相关推荐KServe InferenceGraph 路由超时配置详解V1alpha1InfereceGraphRouterTimeouts 的字段、默认值与源码实现KServe InferenceGraph 路由超时配置详解V1alpha1InfereceGraphRouterTimeouts 的字段、默认值与源码实现模型推理服务云原生后端微服务MLOps人工智能axios 配置默认值详解全局默认值、实例默认值与配置优先级附源码解析axios 配置默认值详解全局默认值、实例默认值与配置优先级附源码解析 axios 允许为每个请求指定配置默认值包括 baseURL 、 headers网络后端前端openjiuwen.agent_teams.schema API 详解DeepAgentSpec 子配置类Spec的字段、默认值与构建机制openjiuwen.agent_teams.schema API 详解DeepAgentSpec 子配置类Spec的字段、默认值与构建机制 openji人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考