SIGGRAPH 2022 | 节省50%内存占用,浙大、快手等提出量化仿真新方法

简介: SIGGRAPH 2022 | 节省50%内存占用,浙大、快手等提出量化仿真新方法

来自浙江大学、快手和美国犹他大学的研究人员联合提出了一种自动兼顾精度和内存消耗的量化仿真新方法。


在好莱坞大片特效等计算机图形学的典型应用场景中,高分辨率的物理仿真能提供很好的视觉效果。更高的仿真计算复杂度和分辨率可以带来更丰富的细节,但相应的计算需要占用更大的内存或者显存空间。例如,在电影《冰雪奇缘》中,300 米宽的溃坝场景使用了 9000 万个粒子对水体进行表达,全精度的仿真计算需要 4 块 NVIDIA Quadro P6000 显卡,一共占用约 96GB 显存。


为了节约计算时占用的数据存储空间,研究者将 “量化” 技术引入了物理仿真算法,也就是在仿真计算过程中,使用更少的比特位数来表达和存储物理变量。例如,在去年计算机图形学顶会 SIGGRAPH 2021 上,来自 MIT、浙大和快手的研究人员联合发表了一篇以 QuanTaichi 为题的论文,实现了一个由 “太极” 编译器支持的量化类型系统,允许用户用较少的位数来表示空间位置、速度等各种物理变量,从而在 GPU 显存消耗不变的情况下,以更高的分辨率进行物理仿真计算(参见参考文献[1])。然而,QuanTaichi 需要用户手工设计量化方案,指定仿真中使用到的每个变量的位数,并不断进行仿真计算试错,最终找到合适的方案。


在今年的 SIGGRAPH 2022 会议上,来自浙江大学、快手和美国犹他大学的研究人员联合发表了一篇题为《物理仿真的自动量化》的论文,提出了一种自动兼顾量化仿真精度和内存消耗的方法。与全精度的物理仿真相比,能够在视觉效果不受明显影响的前提下,节省 50% 以上的内存占用,从而大幅度提高了量化仿真的易用性和生产力。



论文地址:https://arxiv.org/abs/2207.04658

项目地址:https://github.com/Hanke98/AutoQuantizer


该方法的核心思想,是将物理仿真过程中由量化引起的精度损失建模为误差的传播过程,基于不确定性传播理论,将量化方案的自动求解问题描述为带约束的优化问题,将误差上限或者内存压缩率作为优化目标,并快速给出解析解作为可行的量化方案。


此外,该研究引入了抖动法(dithering)作为量化仿真的舍入方法来替代传统的四舍五入,降低了数据误差之间的相关性。在量化位数较少时,抖动法可以明显减少精度损失。以下是一组关于引入抖动法的效果对比。在上方未使用抖动法的仿真结果中,从同一水平位置开始自由落体运动的字母由于量化误差的影响,水平位置不再保持一致;在下方引入了抖动法的量化仿真结果中,所有字母在下落过程中能保持水平对齐,符合客观的物理规律。



下图展示了应用该方法实现的基于欧拉网格实现的量化的烟雾仿真。使用该方法自动求解量化方案实现了 1.93 倍的内存压缩,在单张 Nvidia RTX 3090 显卡上使用了超过 2.28 亿个的欧拉网格。


下图是基于物质点法实现的弹性体仿真。该方法实现了 2.01 倍的内存压缩,在单张 Nvidia RTX 3090 显卡上仿真了超过 2.95 亿个粒子。



下图是基于物质点法实现的流体仿真。该方法实现了 2.02 倍的内存压缩,在单张 Nvidia RTX 3090 显卡上仿真了 4 亿个粒子。



目前,相关的技术已成功落地,打开快手 APP,拍摄「别哭鸭」、「我要去潜水」和「火焰超能力」等魔法表情,即可体验到短视频行业内独家的移动端实时液体模拟特效技术。


【参考文献】

[1] Yuanming Hu, Jiafeng Liu, Xuanda Yang, Mingkuan Xu, Ye Kuang, Weiwei Xu, Qiang Dai, William T. Freeman, and Frédo Durand. 2021. QuanTaichi: A Compiler for Quantized Simulations. ACM Transactions on Graphics (Proceedings of SIGGRAPH 2021).

相关文章
|
5月前
|
Java 数据库连接
Java中的内存泄漏排查与预防方法
Java中的内存泄漏排查与预防方法
|
1月前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
130 52
|
27天前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
45 6
|
5月前
|
缓存 算法 Java
Java面试题:深入探究Java内存模型与垃圾回收机制,Java中的引用类型在内存管理和垃圾回收中的作用,Java中的finalize方法及其在垃圾回收中的作用,哪种策略能够提高垃圾回收的效率
Java面试题:深入探究Java内存模型与垃圾回收机制,Java中的引用类型在内存管理和垃圾回收中的作用,Java中的finalize方法及其在垃圾回收中的作用,哪种策略能够提高垃圾回收的效率
46 1
|
2月前
|
机器学习/深度学习 算法 物联网
大模型进阶微调篇(一):以定制化3B模型为例,各种微调方法对比-选LoRA还是PPO,所需显存内存资源为多少?
本文介绍了两种大模型微调方法——LoRA(低秩适应)和PPO(近端策略优化)。LoRA通过引入低秩矩阵微调部分权重,适合资源受限环境,具有资源节省和训练速度快的优势,适用于监督学习和简单交互场景。PPO基于策略优化,适合需要用户交互反馈的场景,能够适应复杂反馈并动态调整策略,适用于强化学习和复杂用户交互。文章还对比了两者的资源消耗和适用数据规模,帮助读者根据具体需求选择最合适的微调策略。
514 5
|
2月前
|
缓存 监控 Java
在使用 Glide 加载 Gif 动画时避免内存泄漏的方法
【10月更文挑战第20天】在使用 Glide 加载 Gif 动画时,避免内存泄漏是非常重要的。通过及时取消加载请求、正确处理生命周期、使用弱引用、清理缓存和避免重复加载等方法,可以有效地避免内存泄漏问题。同时,定期进行监控和检测,确保应用的性能和稳定性。需要在实际开发中不断积累经验,根据具体情况灵活运用这些方法,以保障应用的良好运行。
|
5月前
|
存储 监控 安全
内存卡数据恢复,3个方法帮你找回丢失的照片和视频
今天,针对内存卡数据恢复,本期做一个详细的归纳,分析常见的数据丢失原因、详细的数据恢复步骤、以及如何保护内存卡数据。
内存卡数据恢复,3个方法帮你找回丢失的照片和视频
|
5月前
|
监控 安全 Java
JVM内存问题之排查Direct Memory泄漏有哪些常用方法
JVM内存问题之排查Direct Memory泄漏有哪些常用方法
167 2
|
4月前
|
存储 Java 图形学
UNITY性能优化☀️一、GC介绍与Unity内存管理方法
UNITY性能优化☀️一、GC介绍与Unity内存管理方法
|
5月前
|
缓存 Prometheus 监控
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
104 3

热门文章

最新文章