🚀 从零经验到 ASC26 二等奖:我们的双赛道突围与个人成长实录
团队:重庆邮电大学 · Zero Point
赛事:ASC26 世界大学生超级计算机竞赛
荣誉:全国二等奖
🌱 前言:大一新生的“狂妄”与梦想
2025年初,五个刚进入重庆邮电大学电子信息工程学院的大一新生,因为学校项目机会的支持以及对量子计算的共同兴趣在老师的牵头下组建了“Zero Point”团队。那时的我们,甚至连 HPC 集群都没摸过,更别提爱因斯坦场方程或 CUDA 编程。
当我们看到 ASC26 的赛题时,直觉告诉我们这是一次从理论到工程的极限磨练。赛题给出了两条看似无关的赛道:
任务 A:优化 Unitree 机器人世界模型(GPU/AI 方向)
任务 B:优化 AMSS-NCKU 引力波模拟(CPU/HPC 方向)
老师最开始给我们打了预防针,“提前声明:第一届就是练兵,以后每年参加,争取在大三或大四拿奖。”为了博得一个机会,我们做了一个大胆的决定:双线作战,同时挑战两条赛道。这不仅是对技术的考验,更是对“零经验”能创造多少价值的实验。我们的口号是:“从零,一切皆有可能。”
🤖 任务 A:机器人“心理演练”的 7.77 倍速突围
负责人:团队协同(AI 优化组)
核心成果:推理时间从 588秒(近10分钟) 降至 75.68秒,加速比 7.77×。
1. 困境:被规则锁死的优化空间
Unitree 的 UniFM-WMA-0 模型负责机器人的“心理演练”(视频预测)。初始测试令人绝望:单样本推理近 10 分钟。更严峻的是,赛规禁止修改核心文件,禁止使用低于 16-bit 的量化。我们只能在夹缝中寻找生机。
2. 破局:六重优化的“组合拳”
我们没有依赖单一的神来之笔,而是通过系统性的工程手段,像搭积木一样叠加了六层优化:
表格
步骤    优化手段    加速收益    技术洞察
| 1 | DDIM 步数降低 (50→20)    2.50×    利用信息理论,在η=0 时大跨步跳跃不损失质量。
| 2 | 算子融合 + 自定义 CUDA | 1.33× | 手写 fused_kernels.cu,将内核启动次数从 2847 降至 892。 |
| 3 | 异步流水线 | 1.18× | 3 个 CUDA Stream 重叠 CPU 加载与 GPU 计算,利用率飙升至 94%。 |
| 4 | 混合精度 (FP16) | 1.43× | 挖掘 AMD GPU 矩阵单元潜力,配合 channels_last 格式。 |
| 5 | KV 缓存 + 稀疏注意力 | 1.25× | 针对机器人运动特征(局部+周期性),减少 54% FLOPs。 |
| 6 | CUDA 图捕获 | 1.11× | 消除 99.9% 的内核启动开销,实现“重播”式推理。 |
最终验证:在 20 个测试样本中,PSNR 始终保持在 25.67 以上(远超 25 的要求),肉眼几乎无法分辨画质差异。
🌌 任务 B:引力波模拟中的孤独与顿悟
负责人:任务 B 专项负责人(个人视角复盘)
核心成果:模拟速度提升 2.59×,1000秒物理模拟耗时从预估的 157 小时降至 32.8 小时。
1. 至暗时刻:环境搭建的“劝退”
拿到题目时,面对爱因斯坦场方程和自适应网格细化(AMR),我几乎是懵的。真正的打击来自环境搭建:
学校超算系统老旧,GCC 仅 4.8.5,很多现代库不支持。
需要静态编译 Python 3.8.18,且超算不能连外网。
崩溃瞬间:我在虚拟机下载好包用 scp 传输,却不断遇到 libgfortran 版本不匹配、MATLAB 库路径污染环境变量等错误。
破局:经过两天的死磕,通过卸载冲突库、手动设置 LD_LIBRARY_PATH 和使用 rpath,终于跑通了第一个 Hello World。这段经历让我对 Linux 底层有了脱胎换骨的理解。
2. 探索:寻找 16 核的“甜点位”
在基准测试中,我发现了一个反直觉的现象:核心数不是越多越好。
4 核跑 10 秒物理时间需 120 分钟。
当我测试到 24 核时,性能竟然不如 16 核!
顿悟:查阅资料后明白,这是内存带宽饱和导致的。通信开销的增长抵消了并行收益。这让我第一次真正理解了“并行计算的边界”。
3. 失败:CSAMR 算法的“滑铁卢”
为了追求极致,我花费一周时间研读 2016 年的顶会论文,尝试实现 CSAMR(并发自适应网格细化) 算法。
惨败:代码改完跑测试,结果 1 小时只推进了 0.7 秒物理时间(原算法是 1 秒)。
反思:CSAMR 要求所有层使用最细层的步长,导致粗网格计算量指数级爆炸。这个算法需要 128+ 核的超大规模集群才能发挥优势,而在我们有限的 16 核资源下,经典的 Time-subcycling(子循环) 才是王道。
收获:这次失败教会我,“先进”不等于“适用”,算法必须匹配硬件规模。
4. 惊喜:-flto 的意外之喜
在尝试了 -O3(反而变慢)、MKL(性能倒退)后,我偶然尝试了链接时优化(-flto)。
奇迹:仅加这一个参数,性能提升了约 7%(50.33分钟 → 46.8分钟)。
那一刻,我觉得之前所有的报错和通宵都是值得的。
5. 等待:32.8 小时的煎熬
最终,我提交了 1000 秒的完整模拟作业。那两天,我每天刷新 qstat,看着进度条一点点挪动,就像考试等成绩一样煎熬。当最终看到 Total Time: 118170s 且约束图完美达标时,那种成就感无以言表。
💡 总结:失败是成功的垫脚石,
这次比赛,我们非常荣幸能得到认可,荣膺全国二等奖,我记得二月份出结果的那个时候,晚上在上物理课,我心情平淡的浏览着获奖队伍,突然发现了一个熟悉的身影,ASC1548,那是我们的队伍。虽然未杀入决赛,但这个结果也远远高于预期着实令人欣喜。希望我们能在新的一年里打进决赛吧!!!
🍄 我们的“失败博物馆”
表格
尝试    结果    学到的教训
CSAMR 算法    性能恶化    资源受限时,经典折中(Subcycling)优于复杂算法。
-Oz 编译优化    略差于 -O2    数值计算受益于循环展开,而非单纯的代码体积压缩。
Intel MKL 替换    性能下降    有限差分不是密集线性代数,MKL 的函数调用开销反而成了负担。
PGO 优化    编译失败    老旧编译器(GCC 4.8.5)的高级特性需谨慎使用。
给后来者的建议
先画瓶颈图,再动手:用 Nsight Systems 或 perf 说话,不要凭感觉猜。
拥抱失败:CSAMR 的失败让我们对 AMR 算法的理解超过了任何教科书。
工具是基石:学会用 Git 管理版本,学会在 Linux 下排查库依赖,这些比算法本身更重要。
团队互补:统筹,写核,写文档,守门,大家各司其职,1+1+1+1+1>>5。
致谢:感谢重庆邮电大学超算中心、Unitree Robotics、ASC26 组委会,以及我们的导师吴红老师。

我们的代码已经(脱敏后)开源在 GitHub(第一次试着弄这个,可能有很多遗漏):
https://github.com/GGGeZZZi/Asc26-zero-point-solution

  • 包含所有优化技术的实现框架(不含专利模型权重,符合数据敏感要求)
  • 清晰的任务 A/B 目录结构和详细注释
  • 欢迎大家 Star、Fork 并提出建议

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐