Skip to content

vivo/ScalingLens

Repository files navigation

ScalingLens:多模态模型参数与数据质量分析

项目概述

ScalingLens 是一套用于分析多模态大模型训练过程中模型内部参数变化、数据质量对模型行为影响的实验工具集。通过 Dev Loss 追踪、WeightWatcher 参数分析和数据退化实验,提供模型训练质量的多维度观测视角。

核心原理

                    ┌──────────────────────────────────────────────┐
                    │              模型训练过程                     │
                    └───────┬──────────────┬──────────────┬────────┘
                            │              │              │
              ┌─────────────▼──┐  ┌────────▼────────┐  ┌─▼────────────────┐
              │  Dev Loss 追踪  │  │  参数结构分析    │  │  数据退化实验     │
              │                │  │                  │  │                  │
              │ • 不同ckpt的    │  │ • Model-level    │  │ • 高频词替换     │
              │   验证损失曲线  │  │   alpha分布      │  │ • 数据重复50%    │
              │ • 跨模型对比    │  │ • Layer-level    │  │ • 数据重复100%   │
              │   (Qwen/Blue)  │  │   权重分析       │  │                  │
              │                │  │ • 层间变化量     │  │ → 观察参数变化   │
              └────────────────┘  │ • 与Base模型对比 │  └──────────────────┘
                                  └──────────────────┘

实验模块

一、Dev Loss 验证

在新的dev data上追踪不同模型/checkpoint的验证损失变化,用于:

  • 观察BlueLM-0.6B训练过程中loss的下降趋势
  • 对比BlueLM-3B与Qwen3-4B等开源模型的表现差异

支持的模型

  • BlueLM-0.6B(各checkpoint)
  • BlueLM-3.0-3B-1225
  • Qwen3-4B (Base/Instruct/Thinking)

代码dev_loss/

二、模型内部参数观察

利用 WeightWatcher 工具对模型权重矩阵进行幂律分析(alpha值),从多个层次观察参数质量:

  1. Model Level:整体alpha分布直方图,标注过拟合(alpha<2)和欠拟合(alpha>6)区域
  2. Layer Level(Language Model):逐层分析特定权重矩阵(v_proj、up_proj、mlp.fc1等)
  3. Layer Level(Vision Model):视觉编码器的对应分析(linear_fc1、attn.qkv等)
  4. 层间变化量:相邻层权重的均值差、方差差、L2范数比、有效秩差异、相关性
  5. 与Base模型对比:比较下游模型(InterVL3.5、AndesVL)与Qwen3 Base的参数差异

代码parameter_visualization/

三、数据质量退化实验

通过主动降低训练数据质量,观察其对模型参数结构的影响:

  1. 高频词替换:利用LLM将文本内容改写为简单语言,代码统一转为JavaScript(前50%数据退化)
  2. 数据重复50%:前50%数据使用1/10的原始数据重复10次
  3. 数据重复100%:从1200个shard中选120个,随机重复填满所有slot

代码data_degradation/

四、低质量数据与Baseline参数对比

对退化数据训练出的模型进行相同的WeightWatcher和层间变化分析,与Baseline训练结果进行对比,验证数据质量退化在参数层面的可观测性。

目录结构

ScalingLens/
├── README.md                                  # 本文档
├── yidan.md                                   # 原始实验记录
├── dev_loss/                                  # Dev Loss验证
│   ├── val_0.6B.py                            # BlueLM-0.6B各ckpt验证
│   ├── val_3B.py                              # BlueLM-3B验证
│   ├── val_qwen.py                            # Qwen/InterVL/AndesVL验证
│   ├── utils.py                               # 通用loss计算工具
│   ├── val.sh                                 # 启动脚本
│   └── plot.ipynb                             # 绘图notebook
├── parameter_visualization/                   # 参数分析
│   ├── weight_watcher/                        # WeightWatcher分析
│   │   ├── model_level.py                     # 模型级alpha分布
│   │   ├── visualization_qwen.py             # Qwen系列逐层分析
│   │   ├── visualization_blue.py             # BlueLM逐层分析
│   │   └── plot.ipynb                         # 绘图notebook
│   └── variation_statistic/                   # 层间变化量分析
│       ├── visualization_qwen.py             # Qwen系列层间变化
│       ├── visualization_blue.py             # BlueLM层间变化
│       ├── cop_with_qwen.py                  # 与Qwen Base对比
│       └── plot.ipynb                         # 绘图notebook
├── data_degradation/                          # 数据退化构造
│   ├── 01_data_degration.py                   # 高频词替换(LLM改写)
│   ├── 02_data_repeat_0.5.py                  # 50%数据重复
│   └── 03_data_repeat_1.0.py                  # 100%数据重复
└── samples/                                   # 输出结果样例
    ├── val_loss_sample.txt                    # 验证loss序列样例
    └── ww_layer_sample.json                   # WeightWatcher分析结果样例

输出数据样例

Dev Loss 输出

每个验证数据集对应一个文件,内容为各checkpoint的loss列表:

high_freq_cn: [4.086, 3.954, 3.916, 3.884, 3.877, 3.857, 3.844, ...]

WeightWatcher Layer 分析输出

每层输出一个JSON文件,包含幂律拟合结果:

{
  "layer_id": 0,
  "name": "Linear",
  "M": 2560,
  "N": 9728,
  "alpha": 8.56,
  "alpha_weighted": 15.82,
  "entropy": 1.11,
  "lambda_max": 70.57,
  "log_norm": 4.22,
  "log_spectral_norm": 1.85,
  "matrix_rank": 2560,
  "num_evals": 2560
}

层间变化量输出

保存为 .npy 文件,包含各层间的统计量(均值差、方差差、L2范数比等)。

依赖

部分脚本依赖 blue.model.transformers.bluelm 包(BlueLM模型的配置和实现)。使用时需自行准备 BlueLM 模型代码并将路径加入 sys.path。如果仅分析开源模型(Qwen系列等),可忽略此依赖。

About

ScalingLens 是一套用于分析多模态大模型训练过程中模型内部参数变化、数据质量对模型行为影响的实验工具集。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors