0 前言
最近盘古气象大模型研究成果在《nature》正刊发表,这个消息引起了大家的广泛关注,作为地理模型爱好者,在之前的学习中接触过一些气象预测模型,对此怀有兴趣,而且顺带蹭蹭热度嘛,不丢人。在此分享一下自己的学习过程,笔者水平有限,如有错误还请大家指正。
在本文中,主要学习和实操了三个github项目,一是盘古气象(pangu-weather)大模型官方库[1],二是haxymoly大佬的pangu-weather-readytogo库[2],本文demo主要使用该作者的github库,相比于官方库,pangu-weather-readytogo库在输入数据准备、预测结果转换及结果可视化方面对官方库做了补充,更适合小白选手;三是wentao li大佬的pangu-weather-verify库[3],作者为个人电脑使用者提供了便捷的模型验证方式,对盘古气象模型以及 ecmwf、gfs 的预报效果进行检验对比,以验证盘古模型在真实气象场中的预报效果。对比结果可从下文链接观看wentao li的公众号测评文章。
1 模型概述
1.1 什么是盘古大模型?
盘古大模型是由华为云研发,致力于深耕行业,打造金融、政务、制造、矿山、气象、铁路等领域行业大模型和能力集,将行业知识know-how与大模型能力相结合,重塑千行百业,成为各组织、企业、个人的专家助手。2023年7月7日,华为开发者大会发布盘古大模型3.0,盘古大模型采用l0、l1、l2三层“5+n+x”架构。
(1) l0层
l0层包括自然语言、视觉、多模态、预测、科学计算五个基础大模型,提供满足行业场景中的多种技能需求。盘古3.0可以提供100亿参数、380亿参数、710参数和1000亿参数的系列化基础大模型,匹配不同场景、不同时延、不同响应速度的行业多样化需求。同时提供全新能力集,包括nlp大模型的知识问答、文案生成、代码生成,以及多模态大模型的图像生成、图像理解等能力。
(2) l1层
l1层是n个行业大模型,华为云提供使用行业公开数据训练的行业通用大模型,包括政务,金融,制造,矿山,气象等大模型;也可以基于行业客户的自有数据,在盘古大模型的l0和l1层上训练专有大模型。
(3) l2层
l2层提供了更多细化场景的模型,更加专注于政务热线、网点助手、先导药物筛选、传送带异物检测、台风路径预测等具体行业应用或特定业务场景,其华为云盘古气象大模型研究成果在《nature》发表。
关于盘古大模型详细信息请见官网:
盘古大模型_pangulm_华为云 官网
1.2 什么是盘古气象大模型?
华为云盘古气象大模型是首个精度超过传统数值预报方法的ai模型,速度相比传统数值预报提速10000倍以上。目前,盘古气象大模型能够提供全球气象秒级预报,过去,预测台风在10天内的轨迹需要在3000台服务器的高性能集群上进行4到5个小时的模拟。现在,盘古模型可以在单个服务器的单个gpu上在10秒内完成,并且结果更加准确。其气象预测结果包括位势、湿度、风速、温度、海平面气压等,可以直接应用于多个气象研究细分场景,欧洲中期预报中心和中央气象台等都在实测中发现盘古预测的优越性。
盘古气象大模型论文:
1.nature
accurate medium-range global weather forecasting with 3d neural networks, nature, volume 619, pages 533–538, 2023.
利用 3d 神经网络进行准确的中期全球天气预报,《自然》,第 619 卷,第 533-538 页,2023 年。
2.arxiv 预印本
pangu-weather: a 3d high-resolution model for fast and accurate global weather forecast, arxiv preprint: 2211.02556, 2022.
盘古天气:快速准确的全球天气预报的 3d 高分辨率模型,arxiv 预印本:2211.02556,2022。
by kaifeng bi, lingxi xie, hengheng zhang, xin chen, xiaotao gu and qi tian
作者:毕凯峰、谢灵曦、张恒恒、陈鑫、顾晓涛、田齐
注:arxiv 版本提供了更多技术细节,nature 论文包含一些新数据。关于模型开源细节,可参考官方github库[1]。
最近盘古气象大模型一系列演讲中使用的幻灯片从此获取,百度网盘,提取码:9sco
注:ppt来源于盘古气象大模型官方github库。
2.模型运行前期准备
2.1 python环境
推荐使用anaconda管理python环境,具体操作可自行百度。
2.2 使用cds api
1.注册 climate data store (哥白尼气候变化服务数据平台)账号
2.使用cds api
① 创建.cdsapirc文件
在c盘/users/[用户名] 路径下创建.cdsapirc文件,先创建一个.cdsapirc.txt 文件,然后再把.txt删掉
.cdsapirc文件的内容为:
url: https://cds.climate.copernicus.eu/api/v2
key: uid:api key
注:账号注册之后在用户界面获得
② 在python上安装 cdsapi 第三方库
$ pip install cdsapi
③ 如果需要使用此方法下载era5数据,即可用获得的代码运行下载
3.模型demo调试运行
1.复制项目代码
$ git clone https://github.com/haxymoly/pangu-weather-readytogo.git
$ cd pangu-weather-readytogo
2.使用 conda 创建虚拟环境
$ conda create -n pgwdome -y python=3.10
$ conda activate pgwdome
3.安装模型依赖包
(1) cpu环境(cpu和gpu环境安装一个即可)
如果您使用cpu环境,请运行:
$ pip install -r requirements_cpu.txt
(2) gpu环境(cpu和gpu环境安装一个即可)
$ pip install -r requirements_gpu.txt
(3) 安装 cartopy 依赖包
$ conda install -c conda-forge cartopy
4.下载经过训练的模型文件(也可以根据需要任意下载一个测试)
- pangu_weather_1.onnx: google云盘/百度网盘
- pangu_weather_3.onnx: google云盘/百度网盘
- pangu_weather_6.onnx: google云盘/百度网盘
- pangu_weather_24.onnx: google云盘/百度网盘
创建一个名为 models
的文件夹,把它们放进去
$ mkdir models
5.模型运行
(1) 修改 data_prepare.py
中初始场的 date_time
,
date_time = datetime(
year=2023,
month=7,
day=9,
hour=23,
minute=0)
某时刻数据可用性可运行 test_avaliable_time.py 来查询.
你的输出会是这样的: the latest date available for this dataset is: 2023-07-13 13:00.
(2) 执行 data_prepare.py
下载初始场数据并转换为npy格式
$ python data_prepare.py
(3) 根据需要修改 inference.py
中以下变量
# 是否启用gpu加速
use_gpu = true
# 初始场时刻
date_time = datetime(
year=2023,
month=7,
day=9,
hour=23,
minute=0)
# 目标到达时刻
date_time_final = datetime(
year=2023,
month=7,
day=17,
hour=23,
minute=0)
# 程式会自动选择最少到达目标时间的模型组合
(4) 执行 inference.py
进行预测
$ python inference.py
(5) 修改 forecast_decode.py
中初始场时刻和目标到达时刻
# 初始场时刻
date_time = datetime(
year=2023,
month=7,
day=9,
hour=23,
minute=0)
# 目标到达时刻
date_time_final = datetime(
year=2023,
month=7,
day=17,
hour=23,
minute=0)
(6) 预测完成后,执行 forecast_decode.py
将npy转换回netcdf格式
$ python forecast_decode.py
(7) 进入预测文件路径可视化结果
cd outputs/2023-07-09-23-00to2023-07-17-23-00
# 可视化预测地表数据
ncvue output_surface.nc
# 或可视化预测大气数据
ncvue output_upper.nc
6.ecmwf直接查看模型预测效果(无需运行代码)
盘古天气作为 ecmwf 操作套件的一部分上线!每个人都可以看到 10 天的全球天气预报,而无需运行代码。ecmwf 已使用此存储库中发布的模型!请使用“pangu”查询搜索 ecmwf 图表网站。
注:点击链接之后出现的是空白,此时需要大家在页面左侧选择所需的选项,之后可以看到盘古气象大模型的预测结果。
4 模型效果验证
本项目将提供一套简洁有效的流程来对盘古气象模型以及 ecmwf、gfs 的预报效果进行检验对比,以验证盘古模型在真实气象场中的预报效果。
4.1 数据来源
本项目的所有数据均来源于互联网上的公开数据集,且数据获取的方式合理合法、公开透明。
1.surf 观测站数据
本项目将使用中国大陆地区在中央气象台网站上公布的2167个站点的观测数据作为检验的真值。观测站点信息来自于中国气象数据网,原始站点表格下载地址,在项目中站点列表(csv文件)对原始列表做了一些经纬度表示方法的转换,主要是将度分秒表示法转换为十进制表示法,以便于后续处理。本项目以爬虫的方式抓取中央气象台网站上的观测站点数据,受网络环境影响,在实际运行中抓取的数据无法保证100%完整,会有个别站点数据缺失,属于正常现象。
2.era5 再分析数据
本项目使用的 era5 再分析数据作为盘古模型推理的原始输入数据,era5 数据集是免费公开的,但获取数据需要用户在 cds 网站上注册账号,并获取自己的 api_key 才能进行下载,本项目不提供测试 api_key。
3.ecmwf 预报数据
ecmwf 的预报产品有多种品类,本项目使用的是其中对外免费公开的实时预报数据集,获取渠道可以参考这里。本项目中 ecmwf 的实时预报数据作为盘古模型的对比预报数据(陪跑),用于对比盘古模型的预报效果。
4.gfs 预报数据
我们使用 0.25 度分辨率的 gfs 预报数据作为另一个陪跑的对比预报,gfs 的获取链接:这里。
4.2 验证模型运行
1.克隆github项目
$ git clone https://github.com/clarmy/pangu-weather-verify.git
2.使用 conda 创建虚拟环境
$ conda create -n pwv -y python=3.8
$ conda activate pwv
注:理论上我们可以继续使用盘古气象demo 配置的环境,但是在实际操作中,笔者碰到了很奇怪的bug,所以推荐创建一个新的python环境。
3.安装模型依赖包
有一些包我们从 conda 进行安装会方便一些:
$ conda install -y -c conda-forge pygrib
其他包我们可以直接使用 pip 进行批量安装:
$ pip install -r requirements/cpu.txt # cpu 版本
$ pip install -r requirements/gpu.txt # gpu 版本
4.以包的形式安装本项目
$ python setup.py install
5.配置 cds 的 api_key
配置 cds 的 api_key,先将自己的 api_key 填入 pwv/secret.toml.template 文件中:
cds_api_key = 'xxxxx:d76c469b-xxxx-yyyy-zzzz-fac92ea9f5f8'
然后将 pwv/secret.toml.template 改名为 pwv/secret.toml 即可完成配置。
6.下载模型文件
下载模型文件(同盘古气象demo模型文件):
- pangu_weather_1.onnx: google云盘/百度网盘
- pangu_weather_3.onnx: google云盘/百度网盘
- pangu_weather_6.onnx: google云盘/百度网盘
- pangu_weather_24.onnx: google云盘/百度网盘
我们需要将模型文件存放在 pwv/static
目录下,static
内的文件结构如下:
.
├── pangu_weather_1.onnx
├── pangu_weather_24.onnx
├── pangu_weather_3.onnx
├── pangu_weather_6.onnx
└── station_info.csv
7.模型运行
(1) 如果您只想做一次测评,可以执行任务:
$ python pwv/main.py
剩下的交给时间即可,最终结果在当前目录会新建一个 resullts
的目录,目录内生成两个文件: compare-*.csv
和 verification_results-*.json
,其中 compare-*.csv
存储的是三套预报以及观测数据在每个观测站点上的对比列表。verification_results-*.json
存储的是每个观测站点上的检验指标结果。
注:
1.笔者在执行此行代码时,提示如下报错:
traceback (most recent call last):
file "d:\jiqixuexi\123\pangu-weather-verify\pwv\main.py", line 4, in <module>
from pwv.prepare import prepare_all
modulenotfounderror: no module named 'pwv'
实测解决办法
① 将 main.py 文件剪切至 pangu-weather-verify 文件下即可。
② 在 fwv 文件中新建一个文件,命名为'_init_.py',内容可为空
大家如果想具体了解原因的话,可自行百度 python 自定义模型导入方式。
2.在运行过程中,会出现如下报错:
filenotfounderror: [winerror 3] 系统找不到指定的路径。: 'd:\\jiqixuexi\\123\\pangu-weather-verify\\tmp'
实测解决办法
安装报错提示,在pangu-weather-verify 文件夹下 新建一个文件夹,命名为 tmp 即可。
(2) 如果您想每小时做一次测评,可以执行任务:
$ python scheduler.py
8.结果文件
以下是一次测评的结果 verification_results-*.json
文件的内容:
{
"pangu": {
"temperature": {
"rmse": 2.7101,
"mae": 2.0384,
"accuracy_ratio_within_1deg": 32.3782,
"accuracy_ratio_within_2deg": 59.0735,
"accuracy_ratio_within_3deg": 78.51
},
"wind": {
"speed_rmse": 1.7176,
"speed_mae": 1.2681,
"speed_accuracy_ratio_within_1ms": 51.1939,
"speed_accuracy_ratio_within_2ms": 79.6084,
"speed_accuracy_ratio_within_3ms": 93.2187,
"scale_stronger_ratio": 36.0554,
"scale_weaker_ratio": 25.5014,
"scale_accuracy": 38.4432,
"speed_score": 0.7185,
"direction_score": 0.4326
},
"init_time": "2023-07-11t16:00:00+00:00",
"forecast_hour_delta": 119
},
"ecmwf": {
"temperature": {
"rmse": 2.6694,
"mae": 2.0125,
"accuracy_ratio_within_1deg": 31.7574,
"accuracy_ratio_within_2deg": 60.9838,
"accuracy_ratio_within_3deg": 78.7966
},
"wind": {
"speed_rmse": 1.6073,
"speed_mae": 1.1812,
"speed_accuracy_ratio_within_1ms": 52.9131,
"speed_accuracy_ratio_within_2ms": 84.4317,
"speed_accuracy_ratio_within_3ms": 94.2216,
"scale_stronger_ratio": 34.8615,
"scale_weaker_ratio": 24.4508,
"scale_accuracy": 40.9742,
"speed_score": 0.7326,
"direction_score": 0.456
},
"init_time": "2023-07-16t00:00:00+00:00",
"forecast_hour_delta": 15
},
"gfs": {
"temperature": {
"rmse": 3.2771,
"mae": 2.5773,
"accuracy_ratio_within_1deg": 22.6361,
"accuracy_ratio_within_2deg": 46.4183,
"accuracy_ratio_within_3deg": 66.8099
},
"wind": {
"speed_rmse": 1.6419,
"speed_mae": 1.2061,
"speed_accuracy_ratio_within_1ms": 54.0115,
"speed_accuracy_ratio_within_2ms": 81.4231,
"speed_accuracy_ratio_within_3ms": 93.362,
"scale_stronger_ratio": 35.9121,
"scale_weaker_ratio": 21.5377,
"scale_accuracy": 42.5979,
"speed_score": 0.7402,
"direction_score": 0.4563
},
"init_time": "2023-07-16t12:00:00+00:00",
"forecast_hour_delta": 3
},
"observation_datetime": "2023-07-16t15:00:00+00:00"
}
1. ecmwf(欧洲中期天气预报中心) 官方验证:the rise of data-driven weather forecasting --zied ben-bouallegue, mariana c a clare, et al doi: https://doi.org/10.48550/arxiv.2307.10128
2. clarmy 博主个人验证:
5.参考资料
[1] 盘古天气(pangu-weather) - 官方github库
发表评论