乐于分享
好东西不私藏

VERL 源码精读 03:Hydra 配置系统如何组装训练参数

VERL 源码精读 03:Hydra 配置系统如何组装训练参数

学习主题:VERL 源码精读 03 

理解 ppo_trainer.yaml、分组 yaml、dataclass config、命令行 override 和配置校验如何共同决定一次训练。 

阅读目标:建立可复述、可定位、可调试的源码理解,不停留在 API 名称层面。

1. 本篇学习范围

理解 ppo_trainer.yaml、分组 yaml、dataclass config、命令行 override 和配置校验如何共同决定一次训练。

这一篇关注的不是“怎么把命令跑起来”,而是读清楚源码中每个对象为什么存在、它和前后模块如何传递数据,以及出问题时应该从哪里开始定位。

2. 源码入口文件

本篇建议按下面顺序阅读:

verl/trainer/config/ppo_trainer.yamlverl/trainer/config/algorithm.pyverl/trainer/config/config.pyverl/workers/config/actor.pyverl/workers/config/critic.pyverl/workers/config/rollout.pyverl/workers/config/engine.pyverl/base_config.py

这些文件覆盖了本篇主题的主路径。阅读时不需要一开始就把所有分支展开,先抓主干,再回头看特殊配置、后端差异和异常处理。

3. 核心调用链

本篇主调用链可以压缩为:

`ppo_trainer.yaml` 用 defaults 列表组合 data、actor、critic、ref、reward、algorithm、trainer 等配置块。命令行 override 修改 OmegaConf 中的具体字段,例如 `algorithm.adv_estimator=grpo`。worker 配置在运行时通过 `omega_conf_to_dataclass()` 转成 `ActorConfig`、`CriticConfig`、`RolloutConfig` 等 dataclass。dataclass 的 `validate()` 负责检查 batch size、micro batch、dynamic bsz、GPU 数和策略后端是否匹配。trainer 根据配置决定是否创建 critic、reference policy、reward model 和不同 resource pool。

这条链路是读源码时的地图。后续遇到新的类、函数或配置字段,都可以先判断它属于链路中的哪一段。

4. 核心概念

  • VERL 配置是源码行为的入口,不读配置就无法判断实际代码分支。
  • actor_rollout_ref
     是最核心的复合配置,里面同时包含 model、actor、rollout、ref。
# specify the default per-component configsdefaults:  - model_engine: dp  # <folder_name>@<field_name>.<field_name>: <yaml_file_name>  # actor_rollout_ref.actor: trainer/config/actor/dp_actor.yaml  - actor@actor_rollout_ref.actor: ${model_engine}_actor  # data: trainer/config/data/legacy_data.yaml  - data@data: legacy_data  # Reference model config.  # Reference model will be enabled when actor.use_kl_loss or/and algorithm.use_kl_in_reward is/are True.  - ref@actor_rollout_ref.ref: ${model_engine}_ref  # Rollout model config.  - rollout@actor_rollout_ref.rollout: rollout  # Model config.  - model@actor_rollout_ref.model: hf_model  # Critic model config.  - critic@critic${model_engine}_critic  - model@critic.model: hf_model  # legacy reward impl config, for backward compatibility  - legacy_reward_impl  # Reward config.  - reward@reward: reward  # Rollout correction config.  - algorithm@algorithm.rollout_correction: rollout_correction  # distillation config  - distillation@distillation: distillation  # load the reference default config, then apply the fields in the current yaml  # self config override anything above  - _self_# config for actor, rollout and reference modelactor_rollout_ref:  # Whether it's a hybrid engine, currently only supports hybrid engine  hybrid_engine: true  # Timeout for operations executed against the process group  nccl_timeout: 600
  • algorithm
     决定 advantage estimator、KL 位置、filter group、rollout correction 等算法行为。
# config for the algorithmalgorithm:  # Required when using verl.utils.omega_conf_to_dataclass to instantiate dataclass configs  _target_: verl.trainer.config.AlgoConfig  # Discount factor for future rewards  gamma1.0  # Trade-off between bias and variance in the GAE estimator  lam1.0  # Advantage estimator type: "gae", "grpo", "reinforce_plus_plus", etc.  adv_estimator: gae  # Whether to normalize advantages by std (specific to GRPO)  norm_adv_by_std_in_grpo: True  # Whether to enable in-reward KL penalty  use_kl_in_reward: False  # How to estimate KL divergence: "kl", "abs", "mse", "low_var_kl", or "full"  kl_penalty: kl  # KL control configuration  kl_ctrl:    # Required when using verl.utils.omega_conf_to_dataclass to instantiate dataclass configs    _target_: verl.trainer.config.KLControlConfig    # KL control type: "fixed" or "adaptive"    type: fixed    # Initial coefficient for KL penalty    kl_coef0.001    # Horizon value for adaptive controller (if enabled)    horizon10000    # Target KL divergence (used for adaptive controller)    target_kl0.1  # Whether to enable preference feedback PPO  use_pf_ppo: False  # Preference feedback PPO settings  pf_ppo:    # Method for reweighting samples: "pow", "max_min", or "max_random"    reweight_method: pow    # Power used for weight scaling in "pow" method    weight_pow2.0
  • trainer
     决定训练步数、validation、checkpoint、logger、use_v1、资源规模。
# config for the trainertrainer:  # Whether to balance batch sizes across distributed workers  balance_batch: True  # Number of epochs in training  total_epochs30  # Total training steps (can be set explicitly or derived from epochs)  total_training_steps: null  # Project name for experiment tracking (e.g., wandb)  project_name: verl_examples  # Experiment name for run identification in tracking tools  experiment_name: gsm8k  # Logging backends to use: "console", "wandb", etc.  logger: ["console", "wandb"]  # Number of generations to log during validation  log_val_generations0  # Directory for logging rollout data; no dump if null  rollout_data_dir: null  # Directory for logging validation data; no dump if null  validation_data_dir: null  # Number of nodes used in the training  nnodes1  # Number of GPUs per node  n_gpus_per_node8  # Save frequency (by iteration) for model checkpoints  save_freq: -1  # ESI refers to the elastic server instance used during training, similar to the training plan. For example,  # if you purchase 10 hours of computing power, the ESI will automatically shut down after 10 hours of training.  # To ensure a checkpoint is saved before ESI shuts down, the system will start saving a checkpoint in advance.  # The advance time is calculated as: Advance Time = Longest historical step duration + Checkpoint save duration + esi_redundant_time.  # Here, esi_redundant_time is a user-defined value that further extends the advance time for added safety.  esi_redundant_time0  # Resume mode: "auto", "disable", or "resume_path"  # "auto": resume from last checkpoint if available  # "disable": start from scratch  # "resume_path": resume from a user-defined path  resume_mode: auto  # Path to resume training from (only used when resume_mode is "resume_path")  resume_from_path: null  # Whether to run validation before training begins  val_before_train: True  # Whether to run validation only  val_only: False  # Validation frequency (in training iterations)  test_freq: -1  # Number of iterations to warm up the critic before updating policy  critic_warmup0  # Default path to distributed filesystem for saving checkpoints  default_hdfs_dir: null  # Whether to delete local checkpoints after loading  del_local_ckpt_after_load: False  # Default local directory for saving checkpoints  default_local_dir: checkpoints/${trainer.project_name}/${trainer.experiment_name}  # Maximum number of actor checkpoints to keep  max_actor_ckpt_to_keep: null  # Maximum number of critic checkpoints to keep  max_critic_ckpt_to_keep: null  # Timeout (in seconds) for Ray worker to wait for registration  ray_wait_register_center_timeout300  # Device to run training on (e.g., "cuda", "cpu")  device: cuda  # Whether to use V1 trainer  use_v1: true  # V1 trainer mode configs  v1:    # Trainer mode: "sync", "colocate_async", "separate_async"    trainer_mode: sync    # Synchronous PPO trainer    sync: {}    # Asynchronous PPO trainer with colocated trainer and rollout    colocate_async:      # Number of warmup batches to add before training loop starts      num_warmup_batches1    # Asynchronous PPO trainer with separate trainer and rollout    separate_async:      # Number of warmup batches to add before training loop starts      num_warmup_batches1      # Frequency of parameter synchronization between trainer and rollout      parameter_sync_step4    # Replay buffer sampling strategy    sampler:      # Maximum number of model versions that trajectory can span      max_off_policy_threshold8      # How to handle trajectory that exceeds the maximum number of model versions      # drop: drop the trajectory      # wait: dropless, wait all trajectories that reach threshold to finish      max_off_policy_strategy: drop      # Custom sampler config      custom_sampler:        # Path to the custom sampler class        path: null        # Name of the custom sampler class        name: null      # Additional kwargs for the custom sampler      sampler_kwargs: {}

    这些概念共同决定了本篇源码的设计方式。VERL 的一个重要特点是,很多类名看起来像普通工程封装,但背后实际是在解决大模型 RL 的分布式执行问题。

    5. 数据在这一层如何流动

    在 VERL 中,几乎所有训练阶段都可以用同一套数据流语言描述:

    输入 batch-> 按并行度或任务类型拆分-> 分发到本地函数或远程 worker-> 执行高成本计算或轻量控制逻辑-> 收集结果-> 写回 DataProto / TensorDict / TransferQueue-> 进入下一阶段

    本篇主题对应的数据流重点是:

    1. ppo_trainer.yaml
       用 defaults 列表组合 data、actor、critic、ref、reward、algorithm、trainer 等配置块。
    2. 命令行 override 修改 OmegaConf 中的具体字段,例如 algorithm.adv_estimator=grpo
    3. worker 配置在运行时通过 omega_conf_to_dataclass() 转成 ActorConfigCriticConfigRolloutConfig 等 dataclass。
    4. dataclass 的 validate() 负责检查 batch size、micro batch、dynamic bsz、GPU 数和策略后端是否匹配。
    5. trainer 根据配置决定是否创建 critic、reference policy、reward model 和不同 resource pool。

    读代码时要始终跟踪字段而不是只跟踪函数名。典型字段包括:

    promptsresponsesattention_maskposition_idsold_log_probsref_log_probvaluesrm_scorestoken_level_rewardsadvantagesreturnsmetrics

    不是每一天都会出现全部字段,但这些字段构成了 VERL PPO/GRPO 训练的共同词汇表。

    6. 和前后模块的关系

    本篇主题通常不是孤立工作的。它至少会连接三类模块:

    上游:  配置、数据、controller 状态、已有 batch 字段。本层:  当前主题负责的调度、计算、转换或封装逻辑。下游:  rollout、reward、advantage、loss、metrics、checkpoint 或异步队列。

    因此读源码时要避免只看单个函数。更稳的方式是:

    1. 找到谁调用它。2. 找到它读取哪些字段。3. 找到它写出哪些字段。4. 找到这些字段下一步被谁使用。5. 找到配置项如何改变它的分支。

    这个五步法适用于 VERL 的大多数文件。

    7. 实现细节拆解

    本篇源码中最值得关注的细节包括:

    1. ppo_trainer.yaml
       用 defaults 列表组合 data、actor、critic、ref、reward、algorithm、trainer 等配置块。
    2. 命令行 override 修改 OmegaConf 中的具体字段,例如 algorithm.adv_estimator=grpo
    3. worker 配置在运行时通过 omega_conf_to_dataclass() 转成 ActorConfigCriticConfigRolloutConfig 等 dataclass。
    def omega_conf_to_dataclass(config: DictConfig | dict, dataclass_type: Optional[type[Any]] = None) -> Any:"""    Convert an OmegaConf DictConfig to a dataclass.    Args:        config: The OmegaConf DictConfig or dict to convert.        dataclass_type: The dataclass type to convert to. When dataclass_type is None,            the DictConfig must contain _target_ to be instantiated via hydra.instantiate API.    Returns:        The dataclass instance."""
    4. dataclass 的 validate() 负责检查 batch size、micro batch、dynamic bsz、GPU 数和策略后端是否匹配。
    例如:ActorConfig的validate()是这样的:
    主要是对非自动配置的batch手工参数进行数学层面上的校验。
    5. trainer 根据配置决定是否创建 critic、reference policy、reward model 和不同 resource pool。
    例如:判断是否需要创建critic:
    如果需要创建critic,则会先把config.critic通omega_conf_to_dataclass转换成CriticConfig

    这些步骤背后通常有两类逻辑:

    控制逻辑:  判断当前训练需要哪些角色、哪些字段、哪些分支。计算逻辑:  真正执行模型推理、训练、reward、advantage 或 loss。

    HybridFlow 的设计要求我们把这两类逻辑区分开。控制逻辑更适合在 trainer 或 manager 中读;计算逻辑更适合在 worker、engine 或 core_algos 中读。

    8. 配置如何影响本篇路径

    VERL 的同一段源码经常会被配置切到不同路径。阅读本篇时尤其要关注这些配置类型:

    algorithm:  决定 PPO、GRPO、KL、advantage、rollout correction 等算法行为。actor_rollout_ref:  决定 actor、rollout、reference policy、model path、训练后端和推理后端。critic:  决定是否启用 value model,以及 critic 的训练后端。reward:  决定使用规则 reward、reward model、remote reward 还是 sandbox reward。trainer:  决定训练步数、资源规模、logger、validation、checkpoint 和 V1/V0 模式。

    读源码前最好先打印 resolved config。否则很容易在一个未启用的分支里浪费时间。

    9. 常见误区和调试要点

    • 同一个字段可能在 yaml、dataclass 和运行时 open_dict 修改中出现,最终值以 resolved config 为准。
    • 配置中 critic.enable=None 不等于启用 critic,VERL 会根据 advantage estimator 推断是否需要 critic。
    • 读报错时要分清是 Hydra 解析失败、配置校验失败,还是 worker 初始化阶段失败。

    调试 VERL 时,不建议一上来就改源码。更稳的顺序是:

    1. 确认命令行 override 是否真的进入 resolved config。2. 确认当前走 V0 还是 V1 trainer。3. 确认 DataProto / TensorDict 里字段是否存在。4. 确认 batch 维、response 长度、mask 是否一致。5. 确认对应 worker 是否真的被创建。6. 确认 Ray worker 日志里的原始异常。7. 最后再判断是不是算法公式或 loss 本身的问题。

    这个顺序能避免把配置错误、数据错误、分布式调度错误误判成算法错误。

    10. 本篇压缩总结

    读懂这一篇后,应该能够回答三个问题:

    1. 这一层在 VERL 训练链路中负责什么?2. 它接收哪些字段,又产出哪些字段?3. 它的行为主要由哪些配置项改变?

    如果这三个问题能答清楚,就说明不是在背目录,而是在按 VERL 的真实执行路径读源码。

    11. 下一步阅读

    读完本篇后,建议继续沿着训练链路向后走:

    入口与配置-> 数据和 DataProto-> WorkerGroup 和 Ray 调度-> Worker 与模型引擎-> Rollout-> Reward-> Advantage-> Actor/Critic loss-> Metrics、Checkpoint、异步扩展

    VERL 源码量很大,但主线并不乱。只要始终围绕“一个 batch 如何从 prompt 变成 actor update”这条线阅读,就能把分散目录组织成一张完整图。

    基本 文件 流程 错误 SQL 调试
    1. 请求信息 : 2026-08-21 21:47:19 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/956346.html
    2. 运行时间 : 0.263756s [ 吞吐率:3.79req/s ] 内存消耗:4,976.12kb 文件加载:145
    3. 缓存信息 : 0 reads,0 writes
    4. 会话信息 : SESSION_ID=a648f85e97a0ca5509c99fc3e782c6cc
    1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
    2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
    3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
    4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
    5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
    6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
    7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
    8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
    9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
    10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
    11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
    12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
    13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
    14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
    15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
    16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
    17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
    18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
    19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
    20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
    21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
    22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
    23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
    24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
    25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
    26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
    27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
    28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
    29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
    30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
    31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
    32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
    33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
    34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
    35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
    36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
    37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
    38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
    39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
    40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
    41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
    42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
    43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
    44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
    45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
    46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
    47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
    48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
    49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
    50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
    51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
    52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
    53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
    54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
    55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
    56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
    57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
    58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
    59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
    60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
    61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
    62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
    63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
    64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
    65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
    66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
    67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
    68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
    69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
    70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
    71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
    72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
    73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
    74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
    75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
    76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
    77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
    78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
    79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
    80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
    81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
    82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
    83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
    84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
    85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
    86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
    87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
    88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
    89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
    90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
    91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
    92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
    93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
    94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
    95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
    96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
    97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
    98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
    99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
    100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
    101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
    102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
    103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 4.22 KB )
    104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
    105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
    106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
    107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 10.56 KB )
    108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
    109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
    110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
    111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
    112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
    113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
    114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
    115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
    116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
    117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
    118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
    119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
    120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
    121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
    122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
    123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
    124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
    125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
    126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
    127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
    128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
    129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
    130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
    131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
    132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
    133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
    134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
    135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.11 KB )
    136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
    137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
    138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
    139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
    140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
    141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
    142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
    143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
    144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
    145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
    1. CONNECT:[ UseTime:0.001162s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
    2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001520s ]
    3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000721s ]
    4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000683s ]
    5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001312s ]
    6. SELECT * FROM `set` [ RunTime:0.000590s ]
    7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001436s ]
    8. SELECT * FROM `article` WHERE `id` = 956346 LIMIT 1 [ RunTime:0.013135s ]
    9. UPDATE `article` SET `lasttime` = 1787320040 WHERE `id` = 956346 [ RunTime:0.012111s ]
    10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000597s ]
    11. SELECT * FROM `article` WHERE `id` < 956346 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001223s ]
    12. SELECT * FROM `article` WHERE `id` > 956346 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001032s ]
    13. SELECT * FROM `article` WHERE `id` < 956346 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.008128s ]
    14. SELECT * FROM `article` WHERE `id` < 956346 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.010889s ]
    15. SELECT * FROM `article` WHERE `id` < 956346 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.008907s ]
    0.267694s