保姆级教程:在Windows上用Anaconda+PyCharm跑通‘羲和’海洋预报大模型(附避坑指南)
从零部署“羲和”海洋预报大模型WindowsAnacondaPyCharm全流程实战第一次听说“羲和”这个海洋预报大模型时我正在为一个沿海城市的智慧海洋项目做技术调研。当时团队需要快速获取高精度的海洋环境预测数据但传统数值预报系统动辄需要数小时的计算时间直到发现了这个能在3.6秒内完成10天预报的AI模型。经过两周的摸索和踩坑我终于在本地环境成功运行了这个模型现在把完整过程整理成这份保姆级指南。1. 环境准备构建稳定的Python工作流在Windows上部署AI模型最头疼的就是环境依赖问题。经过多次测试我推荐使用Anaconda 2023.09版本配合Python 3.8.10这个组合在兼容性和稳定性上表现最佳。1.1 Anaconda安装与配置首先从Anaconda官网下载Windows 64位安装包。安装时务必勾选Add Anaconda3 to my PATH environment variable虽然官方不建议但能避免后续PyCharm找不到解释器的麻烦。安装完成后打开Anaconda Prompt创建专用环境conda create -n xihe python3.8.10 conda activate xihe1.2 关键依赖安装“羲和”模型依赖几个特殊库其中pycdo的安装最容易出错。以下是经过验证的安装顺序conda install -c conda-forge cdo1.9.10 pip install pycdo0.3.1 # 必须指定版本 pip install onnxruntime-gpu1.15.1 # 需CUDA 11.8支持注意如果遇到pycdo安装失败可以尝试先卸载现有版本然后从非官方编译包安装whl文件2. 项目搭建文件结构与模型获取2.1 正确获取模型文件官方GitHub仓库的Code下载按钮会得到一个空文件夹这是个巨坑。正确的获取方式通过README中的百度网盘链接下载完整模型包解压后目录结构应包含XiHe-GlobalOceanForecasting ├── models │ ├── xihe_1to22_1day.onnx │ └── ...共20个模型文件 ├── src │ ├── inference.py │ └── ...共8个支持文件 └── input_data空目录2.2 PyCharm项目配置在PyCharm Community 2023.2中新建项目时选择Existing interpreter定位到Anaconda安装路径下的xihe环境设置Project Structure将src目录标记为Sources Root在Run/Debug Configurations中配置Script path: $ProjectFileDir$/src/inference.py Parameters: --lead_day 7 --save_path ../output_data3. 数据准备从原始数据到模型输入3.1 获取基础数据模型需要两种核心数据源GHRSST海表温度数据1/20°分辨率GLORYS12三维海洋再分析数据可以从以下渠道获取样例数据# ERA5数据下载示例需CDS API import cdsapi c cdsapi.Client() c.retrieve(reanalysis-era5-single-levels, { product_type: reanalysis, variable: sea_surface_temperature, year: 2019, month: 01, day: 01, time: 12:00, format: netcdf }, era5_sst.nc)3.2 数据预处理实战原始数据需要经过插值和重构两步处理。这里给出优化后的插值代码# 快速插值方案使用dask加速 import xarray as xr import numpy as np from dask.distributed import Client client Client(n_workers4) # 启动dask集群 def fast_interpolate(src_file, target_grid): src xr.open_dataset(src_file, chunks{lat: 256, lon: 256}) return src.interp( lattarget_grid[lat], lontarget_grid[lon], methodlinear ).compute()重构阶段的关键参数对照表输出维度对应变量数据范围单位(1,52,2041,4320)surface数据[-80,90]纬度度(1,48,2041,4320)deep数据[-180,180]经度度4. 模型推理与结果解析4.1 运行配置优化在inference.py中有几个关键参数可以调整# 修改这部分代码提升性能 import onnxruntime as ort so ort.SessionOptions() so.intra_op_num_threads 8 # 根据CPU核心数调整 so.execution_mode ort.ExecutionMode.ORT_SEQUENTIAL session ort.InferenceSession( model_path, providers[CUDAExecutionProvider, CPUExecutionProvider] )4.2 结果可视化进阶使用Holoviews创建交互式可视化import holoviews as hv from holoviews.operation.datashader import regrid hv.extension(bokeh) def plot_ocean_field(nc_path, var_name): ds xr.open_dataset(nc_path) mesh hv.Dataset(ds[var_name].isel(time0, depth0)).to( hv.Image, [longitude, latitude]) return regrid(mesh).opts( cmapViridis, width900, height450, tools[hover], colorbarTrue ) plot_ocean_field(output_data/20190101_thetao.nc, thetao)5. 避坑指南常见问题解决方案问题1ImportError: DLL load failed原因CUDA版本不匹配解决安装CUDA 11.8 cuDNN 8.6并确保PATH环境变量正确问题2推理结果全为NaN检查input_data中的npy文件是否完整确认normalize_mean_50.npz和normalize_std_50.npz文件路径正确问题3pycdo无法导入将pycdo文件夹复制到Anaconda3\envs\xihe\Lib\site-packages在PyCharm中右键该目录 → Mark Directory as → Sources Root在部署过程中最耗时的部分是数据预处理环节。我后来发现使用dask的分布式计算可以将原本需要3小时的插值过程缩短到20分钟左右这对需要处理大量历史数据的场景特别有用。