交付日期: 2026-05-30
版本: Final Optimized v1.0
状态: ✅ 可提交
本项目将 amazon/chronos-2(120M 参数时间序列预测 foundation model)适配至华为昇腾 Ascend 910B3 NPU,完成推理验证、精度对比、全链路 profiling、工程优化与真实数据集端到端验证。
| 项目 | 说明 |
|---|---|
| 模型 | amazon/chronos-2(120M 参数) |
| 模型类型 | 时间序列预测 foundation model |
| 模型结构 | T5 encoder-only Transformer(无 decoder,无 generate) |
| 输出形式 | 21 个 quantile forecast(0.01 ~ 0.99) |
| 推理方式 | 单次前向传播(prediction_length ≤ 1024 时无自回归循环) |
| 适配平台 | Ascend 910B3 + torch_npu 2.8.0.post2 |
| CANN 版本 | 8.5.0(npu-smi 25.5.2) |
当前已完成:
| 参数 | 值 |
|---|---|
| 模型名称 | amazon/chronos-2 |
| 参数规模 | ~120M |
| 层数(num_layers) | 12 |
| 隐藏层维度(d_model) | 768 |
| FFN 维度(d_ff) | 3072 |
| 注意力头数 | 12 |
| KV 维度(d_kv) | 64 |
| 最大上下文长度 | 8192 |
| 输入 patch 大小 | 16 |
| 输出 patch 大小 | 16 |
| 最大预测长度 | 1024(单次前向) |
| 分位数 | 21 个(0.01 到 0.99) |
| RoPE | theta=10000.0 |
| 输入流水线 | InstanceNorm → Patch(16) → PatchEmbedding → Encoder(12层) → OutputPatchEmbedding → Quantile Head |
| 权重路径 | /data/ysws/agent/chronos-2_workspace/chronos-2/model.safetensors(477MB) |
说明:模型权重不在本交付目录中。交付目录仅包含脚本、报告、结果数据和 patch 文件。
| 项目 | 值 |
|---|---|
| Python | 3.11.14 (/usr/local/python3.11.14/bin/python) |
| PyTorch | 2.8.0+cpu |
| torch_npu | 2.8.0.post2 |
| CANN | 8.5.0(npu-smi 25.5.2) |
| NPU | Ascend 910B3 × 8(每卡 64GB HBM) |
| chronos-forecasting | 2.2.2 |
| transformers | 4.57.6 |
| Chronos 包路径 | /usr/local/python3.11.14/lib/python3.11/site-packages/chronos/ |
chronos2_final_optimized/
├── README.md ← 本文件(完整交付说明)
├── final_summary.md ← 最终优化摘要
├── raw_index.md ← 原始文件来源索引
│
├── scripts/ ← 可执行脚本
│ ├── inference_baseline.py # CPU/NPU 最小推理验证
│ ├── benchmark.py # NPU 标准 benchmark(单配置)
│ ├── benchmark_final_matrix.py # 全矩阵 batch/context/prediction 复测
│ ├── benchmark_scaling.py # Batch/context/prediction/dtype scaling
│ ├── accuracy_check.py # CPU vs NPU 精度对比
│ ├── run_chronos2_optimized.sh # 优化版一键启动脚本
│ └── run_benchmark_tuned.sh # TASK_QUEUE_ENABLE=2 启动脚本
│
├── results/ ← 原始数据(JSON + MD)
│ ├── benchmark_baseline_untuned.json # 纯 baseline 原始数据
│ ├── benchmark_baseline_untuned.md # 纯 baseline 可读报告
│ ├── benchmark_baseline.json # baseline(含部分优化)原始数据
│ ├── benchmark_tuned_runtime.json # TASK_QUEUE_ENABLE=2 原始数据
│ ├── benchmark_p1_rearrange.json # rearrange patch 原始数据
│ ├── benchmark_final_matrix.json # 全矩阵最终版原始数据
│ ├── benchmark_final_matrix.md # 全矩阵最终版可读报告
│ ├── runtime_tuning_chronos2.json # Runtime tuning 对比数据
│ ├── accuracy_check_result.json # Baseline 精度原始数据
│ ├── accuracy_check_final.json # Final 精度原始数据
│ ├── ab_stable_matrix.json # SDPA (stable) 全矩阵原始数据
│ ├── ab_eager_matrix.json # Eager 全矩阵原始数据
│ ├── accuracy_check_eager.json # Eager 精度原始数据
│ └── kc_eager_stability.json # Eager A/B 稳定性原始数据
│
├── reports/ ← 分析报告(Markdown)
│ ├── Chronos2_survey.md # 模型代码库调研
│ ├── env_check_result.md # 环境检查结果
│ ├── accuracy_check_result.md # Baseline 精度报告
│ ├── accuracy_check_p1_rearrange.md # Rearrange patch 精度报告
│ ├── accuracy_check_final.md # Final 精度报告
│ ├── accuracy_check_eager.md # Eager 精度报告
│ ├── profiling_summary.md # 首次 Profiling 报告(含 msprof)
│ ├── profiling_final_summary.md # 最终 Profiling 复查
│ ├── rearrange_hotspot_analysis.md # einops rearrange 热点分析
│ ├── opt_p1_report.md # P1 优化完整报告
│ ├── eager_ab_validation_summary.md # Eager vs SDPA A/B 验证报告
│ ├── kernelcat_final_report.md # KernelCat 最终报告
│ ├── opt_dtype_summary.md # FP16/BF16 再验证完整报告
│ ├── gifteval_summary.md # GiftEval 端到端验证报告
│ ├── kerminal_tasks_chronos2.md # Kerminal 候选任务单
│ ├── benchmark_compile_experiment.md # torch.compile 实验报告
│ ├── encoder_detail_profile.md # Encoder 层详情 profiling
│ └── final_submission_summary.md # 最终提交摘要
│
├── patches/ ← 优化 Patch
│ ├── p1_rearrange_opt.diff # 4 行 rearrange 替换 patch
│ ├── kc_eager_attention.diff # 1 行 eager attention patch
│ ├── layers.py.orig # 原始 layers.py 完整备份
│ └── config.py.stable # 原始 config.py(sdpa 模式)
│
└── logs/ ← 运行日志(归档)CPU 推理验证 → NPU 推理跑通 → CPU vs NPU 精度对比
→ NPU baseline 建立 → 全链路 profiling(torch_npu + msprof)
→ 瓶颈分析 → 工程优化(3 项合入)
→ 全矩阵复测 → GiftEval 真实数据集验证
→ FP16/BF16 再验证 → torch.compile 实验inference_baseline.py 在 CPU 上验证推理正确性,作为后续精度参考基准。accuracy_check.py,对比 CPU 与 NPU 输出,验收 MaxAE < 1e-3 阈值。benchmark.py 在标准配置(B=8, C=512, P=96, fp32)下测量原始 NPU 推理性能,得到 44.06ms。torch_npu.profiler (Level0) + CANN msprof 采集 kernel 级性能数据,定位瓶颈。benchmark_final_matrix.py,覆盖 B=1/8/16/32/64, C=512/2048/8192, P=96/512/1024。| 阶段 | 对比对象 | MaxAE (random_normal) | MaxAE (sin_wave) | MSE | NaN/Inf | Shape | 是否通过 |
|---|---|---|---|---|---|---|---|
| Baseline | CPU vs NPU (sdpa) | 3.81e-6 | 2.21e-6 | ~1e-12 | 无 | ✅ | ✅ |
| + rearrange | CPU vs NPU (sdpa) | 3.81e-6 | 2.21e-6 | ~1e-12 | 无 | ✅ | ✅ |
| + eager attention | CPU vs NPU (eager) | 3.58e-6 | 2.26e-6 | ~1e-12 | 无 | ✅ | ✅ |
验收标准:MaxAE < 1e-3
实际精度:MaxAE = 3.58e-6,约 279× 低于 验收阈值。
结论:精度安全,所有阶段均通过。
来源: reports/accuracy_check_final.md
Case: random_normal — ✅ PASS
| 指标 | CPU | NPU |
|---|---|---|
| Shape | [1, 21, 24] | [1, 21, 24] |
| Min | -2.197725 | -2.197724 |
| Max | 2.093745 | 2.093746 |
| Mean | 0.130126 | 0.130126 |
| NaN | ✅ | ✅ |
| Inf | ✅ | ✅ |
| 差异指标 | 值 |
|---|---|
| Mean abs diff | 3.874e-7 |
| Max abs diff | 3.576e-6 |
| MSE | ~0 |
| Mean rel diff | 1.877e-6 |
Case: sin_wave — ✅ PASS
| 指标 | CPU | NPU |
|---|---|---|
| Shape | [1, 21, 24] | [1, 21, 24] |
| NaN | ✅ | ✅ |
| Inf | ✅ | ✅ |
| 差异指标 | 值 |
|---|---|
| Max abs diff | 2.265e-6 |
NPU baseline 定义:未启用 TASK_QUEUE_ENABLE=2、未应用 rearrange patch、未应用 eager attention patch 的原始 NPU 推理性能。
| 配置 | Batch | Context Length | Prediction Length | Dtype | Device | Avg Latency | P50 | P90 | P99 | Throughput |
|---|---|---|---|---|---|---|---|---|---|---|
| NPU Baseline | 8 | 512 | 96 | fp32 | npu:0 | 44.06ms | 43.95ms | 44.24ms | 46.00ms | 181.57 series/s |
数据来源: results/benchmark_baseline_untuned.md
| 阶段 | 优化项 | Avg Latency | 相对上一阶段提升 | 相对 Baseline 提升 | Speedup |
|---|---|---|---|---|---|
| Baseline | 无优化 | 44.06ms | — | — | 1.00× |
| Phase 1 | TASK_QUEUE_ENABLE=2 | 37.67ms | -14.5% | -14.5% | 1.17× |
| Phase 2 | einops.rearrange → torch.transpose/reshape (4 处) | 33.42ms | -11.3% | -24.1% | 1.32× |
| Phase 3 | sdpa → eager attention | 31.37ms | -6.2% | -28.8% | 1.40× |
最终结论:
标准配置 B=8, C=512, P=96, fp32 下,Chronos-2 NPU 推理从 44.06ms 优化到 31.37ms,总延迟降低约 28.8%,吞吐从 181.57 series/s 提升至 255.00 series/s(+40.9%),整体加速约 1.40×。
优化类型:环境变量(runtime tuning),不修改模型代码。
设置方式:export TASK_QUEUE_ENABLE=2
修改文件:无(仅启动脚本 run_chronos2_optimized.sh 中设置)
风险:零
| 指标 | 优化前 | 优化后 | 变化 |
|---|---|---|---|
| Avg latency | 44.06ms | 37.67ms | -14.5% |
| P50 | 43.95ms | 37.75ms | -14.1% |
| P99 | 46.00ms | 39.32ms | -14.5% |
| Throughput | 181.57 s/s | 212.38 s/s | +17.0% |
数据来源: results/benchmark_tuned_runtime.json
优化类型:代码 patch(Python 层算子路径优化)
修改文件:/usr/local/python3.11.14/lib/python3.11/site-packages/chronos/chronos2/layers.py
Patch 文件:patches/p1_rearrange_opt.diff
改动量:4 行代码(4 处 einops.rearrange 替换)
风险:极低(语义等价,精度验证通过)
4 处替换详情:
| # | 函数 | 原始 | 替换 | 调用频率/forward |
|---|---|---|---|---|
| 1 | MHA._split_heads (L261) | rearrange(states, "b s (h d) -> b h s d") | states.reshape(...).transpose(1,2) | 24× |
| 2 | MHA._merge_heads (L265) | rearrange(states, "b h s d -> b s (h d)") | states.transpose(1,2).reshape(...) | 12× |
| 3 | GroupSelfAttention.forward (L357) | rearrange(hidden_states, "batch time d -> time batch d") | hidden_states.transpose(0,1) | 12× |
| 4 | GroupSelfAttention.forward (L364) | rearrange(hidden_states, "time batch d -> batch time d") | hidden_states.transpose(0,1) | 12× |
累计消除:60 次 einops.rearrange 调用/forward。
性能收益(叠加 TASK_QUEUE_ENABLE=2):
| 指标 | TASK_QUEUE Only | + rearrange | 变化 |
|---|---|---|---|
| Avg latency | 37.67ms | 33.42ms | -11.3% |
| Throughput | 212.38 s/s | 239.40 s/s | +12.7% |
数据来源: results/benchmark_p1_rearrange.json
优化类型:代码 patch(config.py 1 行改动)
修改文件:/usr/local/python3.11.14/lib/python3.11/site-packages/chronos/chronos2/config.py
Patch 文件:patches/kc_eager_attention.diff
改动内容:
# 修改前:
attn_implementation = attn_implementation or "sdpa"
# 修改后:
attn_implementation = attn_implementation or "eager"优化原因:当前 CANN 8.5.0 + torch_npu 2.8.0 环境下,NPU 不支持 fused SDPA kernel。PyTorch 的 SDPA math fallback 使用 _safe_softmax,存在 isneginf 额外开销,且随 attention size 增长。Eager attention 使用标准 matmul + softmax + matmul,避免了该开销。
A/B 交替验证(B=8, C=512, P=96, 各 50 runs, 漂移控制):
| Round | Mode | Avg (ms) |
|---|---|---|
| R1 | SDPA | 33.23 |
| R2 | Eager | 32.48 |
| R3 | SDPA (drift check) | 33.86 |
| R4 | Eager (drift check) | 32.30 |
全矩阵 Eager vs SDPA 对比:
| Config | SDPA (ms) | Eager (ms) | Delta |
|---|---|---|---|
| B=8, C=512, P=96 | 33.45 | 31.37 | -6.2% |
| B=8, C=8192, P=96 | 52.99 | 46.85 | -11.6% ⭐ |
| B=32, C=512, P=96 | 36.27 | 34.12 | -5.9% |
数据来源: results/ab_stable_matrix.json, results/ab_eager_matrix.json
| 指标 | 原始基线 | 最终优化版 | 变化 |
|---|---|---|---|
| Avg 延迟 | 44.06 ms | 31.37 ms | 降低 28.8% |
| P50 | 43.95 ms | ~31.9 ms | 降低 ~27% |
| P99 | 46.00 ms | ~36.4 ms | 降低 ~21% |
| Throughput | 181.57 series/s | ~255 series/s | 提升 +40.9% |
| Speedup | — | — | 1.40× |
Matrix A: Batch Scaling(C=512, P=96, fp32)
| Batch | Avg(ms) | P50(ms) | P99(ms) | Series/s | Forecast/s | 扩展效率 | NaN/Inf |
|---|---|---|---|---|---|---|---|
| B=1 | 30.75 | 29.65 | 38.28 | 32.5 | 3,107 | — | ✅ |
| B=8 | 31.37 | 30.93 | 36.43 | 255.0 | 24,565 | 97.5% | ✅ |
| B=16 | 32.13 | 32.26 | 34.58 | 498.0 | 47,642 | 95.2% | ✅ |
| B=32 | 34.12 | 33.25 | 40.43 | 938.0 | 90,224 | 91.9% | ✅ |
| B=64 | 38.76 | 37.58 | 41.52 | 1,651.0 | 162,500 | 81.3% | ✅ |
Matrix B: Context Scaling(B=8, P=96, fp32)
| Context | Patches | Avg(ms) | P50(ms) | P99(ms) | Series/s | 相对 C=512 | NaN/Inf |
|---|---|---|---|---|---|---|---|
| C=512 | 32 | 31.37 | 30.93 | 36.43 | 255.0 | 1.00× | ✅ |
| C=2048 | 128 | 31.74 | 30.46 | 39.44 | 252.0 | +1.2% | ✅ |
| C=8192 | 512 | 46.85 | 52.34 | 54.79 | 171.0 | +49.3% | ✅ |
Matrix C: Prediction Scaling(B=8, C=512, fp32)
| Pred | Out Patches | Avg(ms) | P50(ms) | P99(ms) | Series/s | AR Loop | NaN/Inf |
|---|---|---|---|---|---|---|---|
| P=96 | 6 | 31.37 | 30.93 | 36.43 | 255.0 | 否 | ✅ |
| P=512 | 32 | 32.88 | 32.40 | 65.24 | 243.3 | 否 | ✅ |
| P=1024 | 64 | 32.93 | 33.80 | 71.55 | 243.0 | 否 | ✅ |
数据来源: results/benchmark_final_matrix.md
在 GiftEval 官方数据集 m4_hourly(200 samples, C=512, P=96)上完成端到端验证。
| 配置 | Include IO | Samples | B | Avg/Batch (ms) | Model Only (ms) |
|---|---|---|---|---|---|
| quick | true | 20 | 1 | 29.50 | — |
| standard | true | 200 | 8 | 31.88 | 31.60 |
| throughput | true | 160 | 32 | 35.52 | 35.09 |
| pipeline-only | false | 200 | 8 | 31.89 | — |
| Stage | Avg (ms) |
|---|---|
| data_prepare | 0.05 |
| preprocess | 0.05 |
| h2d | 0.17 |
| model_forward | 31.60 |
| d2h | 0.01 |
| total_e2e | 31.88 |
| Metric | Value | 说明 |
|---|---|---|
| WAPE | 4.68% | 加权绝对百分比误差 |
| MASE | 1.20 | 接近 1(朴素预测基准) |
| Coverage (0.01-0.99) | 96.99% | 期望 98% |
| NaN/Inf | ✅ 无 |
数据来源: reports/gifteval_summary.md
最终优化共涉及 5 行代码改动,分布在 2 个文件中。
| 文件 | 修改内容 | 行数 | Patch | 风险 |
|---|---|---|---|---|
chronos/chronos2/layers.py | 4 处 einops.rearrange 替换为 torch.transpose/reshape | 4 行 | patches/p1_rearrange_opt.diff | 极低 |
chronos/chronos2/config.py | attn_implementation 默认值 "sdpa" → "eager" | 1 行 | patches/kc_eager_attention.diff | 低 |
| 变量 | 值 | 作用 | 风险 |
|---|---|---|---|
TASK_QUEUE_ENABLE | 2 | 优化 NPU runtime task queue 调度 | 零 |
chronos/chronos2/model.py — 未修改chronos/chronos2/pipeline.py — 未修改transformers — 未修改# 回滚 rearrange patch:
cp patches/layers.py.orig /usr/local/python3.11.14/lib/python3.11/site-packages/chronos/chronos2/layers.py
# 回滚 eager attention:
cp patches/config.py.stable /usr/local/python3.11.14/lib/python3.11/site-packages/chronos/chronos2/config.py
# 取消环境变量:
unset TASK_QUEUE_ENABLE以下优化已系统验证,明确不建议合入当前版本:
| 编译目标 | 结果 | 原因 |
|---|---|---|
| encoder_block | 108.98ms(3.3× 退化) | NPU 上 graph break 开销远超收益 |
| encoder(全模型) | 超时卡死(>180s) | 全 encoder 图编译在 NPU 上卡死 |
证据: reports/benchmark_compile_experiment.md
| 模式 | 标准配置速度 | 长 context 加速 | MaxAE(vs FP32) | 结论 |
|---|---|---|---|---|
| bf16_full | +0.6% | -12.5% | 1.3e-2 ~ 4.1e-2 ❌ | 不合入 |
| fp16_full | -0.4% | -15.3% | 1.9e-3 ~ 7.6e-3 ❌ | 不合入 |
| autocast_bf16 | +10% 退化 | +26% 退化 | — | 不合入 |
| autocast_fp16 | +14% 退化 | +25% 退化 | — | 不合入 |
结论: 低精度在长上下文(C≥8192)有 12-15% 加速潜力,但 MaxAE 远超 1e-3 阈值。需 CANN 低精度数制优化后重新评估。
证据: reports/opt_dtype_summary.md
不同 OMP_NUM_THREADS 设置(1/2/4/8)均导致退化(-5% ~ -13%),CPU taskset 绑定同样有害。系统默认调度最佳。
证据: reports/profiling_summary.md(Runtime Tuning 章节)
当前主要瓶颈为 CANN fp32 MatMul 等标准算子路径,非独立 kernel 问题。在 CANN 8.5.0 下继续 KernelCat 投入产出比不高。
证据: reports/kerminal_tasks_chronos2.md
# 确认模型权重存在
ls -lh /data/ysws/agent/chronos-2_workspace/chronos-2/model.safetensors
# 确认 Chronos 包已安装
python -c "from chronos import Chronos2Pipeline; print('OK')"
# 确认 NPU 可用
npu-smi infocd /data/ysws/agent/chronos-2_workspace
bash chronos2_final_optimized/scripts/run_chronos2_optimized.sh 8 512 96说明:run_chronos2_optimized.sh 内部已设置 TASK_QUEUE_ENABLE=2,可直接运行。脚本接受 3 个参数:batch_size context_length prediction_length。
cd /data/ysws/agent/chronos-2_workspace
export TASK_QUEUE_ENABLE=2
python chronos2_final_optimized/scripts/benchmark.py \
--device npu \
--batch-size 8 \
--context-length 512 \
--prediction-length 96 \
--dtype fp32 \
--warmup 5 \
--repeat 100cd /data/ysws/agent/chronos-2_workspace
export TASK_QUEUE_ENABLE=2
python chronos2_final_optimized/scripts/benchmark_final_matrix.pycd /data/ysws/agent/chronos-2_workspace
export TASK_QUEUE_ENABLE=2
python chronos2_final_optimized/scripts/accuracy_check.py \
--device-cpu cpu \
--device-npu npu \
--batch-size 1 \
--context-length 128 \
--prediction-length 24 \
--seed 42cd /data/ysws/agent/chronos-2_workspace
python chronos2_final_optimized/scripts/inference_baseline.py \
--device cpu \
--batch-size 1 \
--context-length 128 \
--prediction-length 24# 1. 进入工作目录
cd /data/ysws/agent/chronos-2_workspace
# 2. 设置环境变量
export TASK_QUEUE_ENABLE=2
# 3. 应用 rearrange patch(如果尚未应用)
cd /usr/local/python3.11.14/lib/python3.11/site-packages/chronos/chronos2/
patch -p0 < /data/ysws/agent/chronos-2_workspace/chronos2_final_optimized/patches/p1_rearrange_opt.diff
# 4. 应用 eager attention patch(如果尚未应用)
patch -p0 < /data/ysws/agent/chronos-2_workspace/chronos2_final_optimized/patches/kc_eager_attention.diff
# 5. 运行 benchmark
cd /data/ysws/agent/chronos-2_workspace
python chronos2_final_optimized/scripts/benchmark.py \
--device npu --batch-size 8 --context-length 512 \
--prediction-length 96 --dtype fp32 --warmup 5 --repeat 100
# 6. 验证精度
python chronos2_final_optimized/scripts/accuracy_check.py \
--device-cpu cpu --device-npu npu \
--batch-size 1 --context-length 128 --prediction-length 24 --seed 42| 参数 | 推荐值 | 说明 |
|---|---|---|
batch_size | 8 ~ 32 | B=32 时吞吐 940 series/s,延迟 34ms |
context_length | 512 ~ 2048 | C=2048 延迟几乎不变(+2%) |
prediction_length | 96 ~ 512 | ≤ 1024 均为单次前向 |
dtype | fp32 | BF16 当前更慢且精度不通过 |
TASK_QUEUE_ENABLE | 2 | 必须设置 |
device | npu:0 | 单卡即可(显存使用 <58GB / 64GB) |
| 风险 | 等级 | 说明 |
|---|---|---|
| CANN 版本依赖 | 中 | 性能数据基于 CANN 8.5.0。不同 CANN 版本可能有不同性能特征 |
| eager attention 在 GPU 上可能退化 | 低 | eager attention patch 仅对 NPU 最优。如需同时在 GPU 上运行,建议通过环境变量控制:attn_implementation=os.environ.get("ATTN_IMPL", "eager") |
| B="64" 扩展效率下降 | 低 | GroupSelfAttention batch mask O(batch²) 在 B≥64 显性 |
| C="8192" 延迟增大 | 低 | +49% vs C="512,Patching" 保护有效但仍需关注 |
不同报告中间同一配置数值可能存在微小差异(如 31.26ms vs 31.37ms),属不同 session/不同时间测试的正常波动。本 README 中所有性能数据以 eager_ab_validation/README.md 和 chronos2_submit/README.md 中的 A/B 验证数据为准。
benchmark_baseline_untuned.md)eager_ab_validation/README.md,有完整 A/B 交替验证 + 漂移控制)| 优先级 | 方向 | 前提 | 预期收益 |
|---|---|---|---|
| P1 | 验证生产场景长稳运行 | 当前 | — |
| P2 | CANN SDPA fused kernel 验证 | CANN 版本更新 | 15-25% |
| P2 | BF16 重测 | CANN BF16 精度优化 | 12-15%(仅长 context) |
| P3 | 多变量/协变量推理验证 | 业务需求 | — |
| P3 | P > 1024 自回归性能 | 业务需求 | — |
Chronos-2 在 Ascend 910B3 NPU 上的适配与优化工作已全部完成:
| 检查项 | 状态 |
|---|---|
| CPU/NPU 推理跑通 | ✅ |
| 精度验证通过(MaxAE = 3.58e-6) | ✅ |
| NPU Baseline 建立(44.06ms) | ✅ |
| Profiling + 瓶颈分析 | ✅ |
| 3 项优化合入(TASK_QUEUE + rearrange + eager) | ✅ |
| 全矩阵复测(B=1 | ✅ |
| GiftEval 真实数据验证 | ✅ |
| torch.compile / BF16 / FP16 边界实验 | ✅ |
| 最终性能 | B=8: 31.37ms, B=32: 34.12ms, Speedup: 1.40× |
| 精度安全 | MaxAE = 3.58e-6(279× 低于阈值) |
| 代码改动 | 仅 5 行(layers.py + config.py) |
| 交付状态 | ✅ 可提交 |
最终交付包路径:/data/ysws/agent/chronos-2_workspace/chronos2_final_optimized/