
Fuxi是由复旦大学的研究人员开发的一个基于数据驱动的全球天气预报模型,主要由Cube Embedding、U-Transformer和全连接层构成。Fuxi摒弃了传统复杂的微分方程,转而通过多阶段机器学习架构,可提供15天的全球预报。时间分辨率为6小时,空间分辨率为0.25°。
Fuxi模型是由复旦大学的研究人员开发的一个基于数据驱动的全球天气预报模型,它摒弃了传统复杂的微分方程,转而通过多阶段机器学习架构,可提供15天的全球预报。时间分辨率为6小时,空间分辨率为0.25°,相当于赤道附近约25公里 x 25公里的范围,使用ECMWF39年的ERA5再分析数据集训练,在15天预报尺度上实现了效率与精度的双重突破。
基本的伏羲模型体系结构由三个主要组件组成,如图所示:Cube Embedding、U-Transformer和全连接层。输入数据结合了上层空气和地表变量,并创建了一个维度为69×720×1440的数据立方体,以一个时间步作为一个step。高维输入数据通过联合时空Cube Embedding进行维度缩减,转换为C×180×360。Cube Embedding的主要目的是减少输入数据的时空维度,减少冗余信息。随后,U-Transformer处理嵌入数据,并使用简单的全连接层进行预测,输出首先被重塑为69×720×1440。

这种级联架构使得Fuxi在保持AI模型高效推理的同时(单次预测仅需数分钟),关键指标如500 hPa位势高度异常相关系数(ACC)达到0.82,性能显著优于世界上最佳的基因物理的天气预报系统——欧洲中期天气预报中心(ECMWF)的高分辨率预报系统。其训练过程中嵌入了质量守恒、能量平衡等物理规则约束,确保预测结果既符合数据规律,又不违背气象学基本原理。作为首个支持15天全球高分辨率预报的开源AI模型,Fuxi不仅为气象业务提供了快速响应的新工具,其模块化设计也为极端天气预警、航空路径优化等场景提供了可定制化基础。
https://github.com/lizhuoq/WeatherLearn
python = 3.11
torch = 2.1.0
torch_npu = 2.1.0
timm = 0.9.10
numpy = 1.23.5内容为
from weatherlearn.models import Fuxi
import torch
import torch_npu
if __name__ == '__main__':
device = torch.device('npu' if torch_npu.npu.is_available() else 'cpu')
B = 1 # batch_size
in_chans = out_chans = 70 # number of input channels or output channels
input = torch.randn(B, in_chans, 2, 721, 1440).to(device) # B C T Lat Lon
fuxi = Fuxi().to(device)
output = fuxi(input) # B C Lat Lon
print(output.shape)source /usr/local/Ascend/ascend-toolkit/set_env.shpython3 fuxi.py报错Conv3dv2 only support static shape

解决办法
在实例化模型前添加
torch.npu.config.allow_internal_format = True
torch.npu.set_compile_mode(jit_compile=True)
再次运行,报错out of memory

解决办法1
禁用梯度计算和降低计算精度(混合精度)
vi fuxi.py在第21、22行添加
with torch.no_grad():
with torch.npu.amp.autocast():
解决办法2
减少网络结构的层数
vi /WeatherLearn/weatherlearn/models/fuxi/fuxi.py在144行Fuxin类的初始化中添加参数depth=12,将161行的depth=48修改为depth

再次运行

npu占用


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。