当前位置: 首页 > news >正文

【大气反演模型CIF第二期】通过 Docker 容器快速部署和运行 CIF 系统

目录

  • Docker 概述
  • Docker 安装
  • CIF Docker 镜像
    • 如何获取 CIF Docker 镜像?
      • 如何使用 Docker 容器运行 CIF?
    • 容器中文件结构说明
    • 使用外部数据(如观测、排放、气象等)
    • CIF 支持的测试模型
  • 自动测试(CI)运行方法
    • 调试技巧:进入容器
    • 高级调试:使用 Python 调试器(pudb)
  • 参考

本博客结合 Community Inversion Framework (CIF) 网站中 “Using the CIF in Docker” 页面 详细介绍如何通过 Docker 容器快速部署和运行 CIF 系统。

在这里插入图片描述

Docker 概述

官网-Docker
在这里插入图片描述

Docker 是一种容器化技术,用于在预定义的环境中运行应用程序。
它的优势包括:

  • 可移植性:相同的配置在不同机器上表现一致
  • 可重复性:避免“在我电脑上能跑”的问题
  • 易用性:新用户几乎无需配置环境即可运行示例

在 CIF 项目中,Docker 被用于:

  • 自动化测试
  • 发布演示环境
  • 新用户快速上手(如使用高斯羽流模型)

Docker 安装

Docker 安装 教程

需要在本地或服务器上安装 Docker。建议使用 Docker 官方安装文档。
如果你没有管理员权限,可以考虑安装 Docker 的 rootless 模式,以支持非 root 用户运行 Docker 容器。

CIF Docker 镜像

CIF 的 Docker 镜像基于 Ubuntu 20.04,并预装以下内容:

  • Python 3.9 和所有必要第三方库
  • Fortran 编译器与库(如 MPI、NetCDF)
  • 用于开发的工具(如 pytest, tox, cython, pandas, xarray 等)

这意味着可以在容器内运行包括 CHIMERE 在内的复杂模型(但需要一定 Docker 使用经验)。

# Build a Docker image that contains all requirements to run the PyCIF CI.
FROM ubuntu:20.04RUN apt update \&& DEBIAN_FRONTEND=noninteractive apt install -y software-properties-common rsync git wget\&& apt update \
# Install Python&& DEBIAN_FRONTEND=noninteractive apt install -y python3.9 python3-pip \
# Install GDAL&& apt-get install -y gdal-bin libgdal-dev \&& pip install numpy GDAL \
# Install important packages&& DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential xmlstarlet gfortran libeccodes0 graphviz \&& pip install scipy tox==3.23.1 sphinx sphinxcontrib-plantuml graphviz f90nml \pyproj cython pandas matplotlib==3.3.4 bottleneck h5py xarray \
# Install MPI&& apt-get install -y libopenmpi-dev openmpi-bin libhdf5-openmpi-dev \
# Install NetCDF&& apt-get install libnetcdf-dev libnetcdff-dev;# Install python packages to install pycif locally
RUN apt update \&& apt-get install -y python3-yaml \&& pip install pytest pytest-html pyyaml virtualenv==20.4.7 \&& pip install numpy --upgrade ;# Install pycif on the container
COPY ./ /tmp/CIFWORKDIR /tmp/CIF/RUN pip3 install -e .# Command to run at execution
COPY ./bin/docker_entrypoint.sh /bin/# Create directories
RUN mkdir /workdir/ \&& mkdir /config/;ENTRYPOINT ["docker_entrypoint.sh"]

如何获取 CIF Docker 镜像?

从 Docker Hub 拉取官方镜像:

docker pull pycif/pycif-ubuntu:0.2

此外还有针对特定模型(如 TM5)的镜像,例如:

docker pull pycif/pycif-tm5:0.2

⚠️ 注意:镜像标签可能会更新,建议访问 Docker Hub 页面 查看最新版本。

如何使用 Docker 容器运行 CIF?

Step1:快速运行配置文件

使用 CIF 提供的脚本 docker_debug.sh,只需一条命令即可运行配置:

cd CIF_root_dir/bin
./docker_debug.sh path_to_my_config_file.yml

该脚本会:

  1. 自动挂载 YAML 配置文件和工作目录到容器
  2. 启动容器
  3. 执行模拟并将结果写入 workdir

文件内容如下:

#!/usr/bin/env bash# Provide local path to your yaml configuration file
config_file=$1
pycif_root_dir=`pwd`/../
extra_volumns=$2# Convert to absolute paths
config_file=`echo "$(cd "$(dirname "$config_file")"; pwd)/$(basename "$config_file")"`
pycif_root_dir=`echo "$(cd "$pycif_root_dir"; pwd)"`# Fetch workdir to mount it in the container for saving outputs
workdir=`python3 -W ignore -c \
"
from pycif.utils.yml import ordered_load;
with open('$config_file', 'r') as f:config = ordered_load(f)print('AAAAAAAAAAAA')
print(config['workdir']); "`workdir=`echo $workdir | awk -F "AAAAAAAAAAAA" '{print $2}'`mkdir -p $workdir# Run the configuration into the container and writing outputs to workdir
docker run -it -v $config_file:/config/config.yml \-v $pycif_root_dir:/tmp/CIF/ \-v $workdir:/workdir/ \-v /home/aberchet/Projects/PYCIF_DATA_TEST/:/tmp/PYCIF_DATA_TEST/ \$extra_volumns \--entrypoint /bin/bash pycif/pycif-ubuntu:0.3
#    pycif/pycif-ubuntu:0.3
#    --entrypoint /bin/bash pycif/pycif-ubuntu:0.2#pip install h5py
#python3 -m pycif /config/config.yml

容器中文件结构说明

在 Docker 中的目录结构如下:

Docker Container
├── /bin/                # 启动脚本
├── /tmp/CIF/            # CIF 源代码
├── /config/             # 挂载的配置文件
└── /workdir/            # 输出目录(与主机同步)

注意:

  • workdir 在配置文件中应为主机上的合法路径
  • 其他路径应为 Docker 容器中的路径(如 /tmp/CIF/...

使用外部数据(如观测、排放、气象等)

复杂模拟时,Docker 镜像内可能缺少你需要的数据。解决方法:

  1. 挂载主机数据目录到容器,例如:
-v /my/host/data:/data/
  1. 在 YAML 配置文件中,将路径指向 /data/...

CIF 支持的测试模型

CIF 支持的测试模型如下:

  • Gaussian Toy Model
  • CHIMERE
  • FLEXPART
  • TM5

所有模型测试所需数据(如 EDGAR, meteorology)可从 CIF 提供的链接下载,并设置环境变量:

export PYCIF_DATA_TEST=/path/to/test/data

自动测试(CI)运行方法

CIF 的自动测试系统基于 tox,你可以在 Docker 容器中手动运行测试:

示例脚本 run_tests.sh

#!/usr/bin/env bash
pycif_root_dir=`pwd`/../
extra_volumns="-v ${PYCIF_DATA_TEST}:/tmp/PYCIF_DATA_TEST/"docker run \-v $pycif_root_dir:/tmp/CIF/ \$extra_volumns \-it --entrypoint /tmp/CIF/bin/tox_command.sh \pycif/pycif-tm5:0.2

脚本 tox_command.sh 示例:

#!/usr/bin/env bash
cd /tmp/CIF/
pip freeze
tox -e py38 -e coverage -- -m 'test_in_ci and dummy'

可以替换 dummy 为其他模型关键字来测试不同模型:

模型tox 命令关键字
Gaussiandummy
CHIMEREchimere
FLEXPARTflexpart
TM5tm5

调试技巧:进入容器

可以手动进入容器查看测试结果或调试:

docker ps -a                      # 查看容器ID
docker start <container-id>      # 启动容器
docker exec -it <container-id> /bin/bash  # 进入容器

高级调试:使用 Python 调试器(pudb)

可以在代码中插入:

import pudb; pudb.set_trace()

并在 tox.ini 中添加依赖:

[testenv]
deps =numpypudbpytest-pudb

参考

http://www.dtcms.com/a/292296.html

相关文章:

  • 基于eBPF的Kubernetes网络故障自愈系统设计与实现
  • 33、基于JDK17的GC调优策略
  • Hyper-V虚拟化平台GPU分区和GPU半虚拟化技术比较及应用建议
  • Linux文件系统深入理解
  • repmgr+vip实现对业务透明的高可用切换
  • 数据库—修改某字段默认值
  • Oracle RAC+ADG switchover 切换演练流程
  • TDSQL
  • [08006][1033] ORA-01033: ORACLE 正在初始化或关闭--问题修复
  • 达梦数据库表字段增加时报错[-2106]:无效的表或视图名,[-2116]:列[IS_REPEAT]已存在
  • Python趣味算法:折半查找(二分查找)算法终极指南——原理、实现与优化
  • 人工智能——OpenCv基础
  • python如何生成 requirements.txt文件
  • Elasticsearch是什么?
  • 【论文阅读】Fast-BEV: A Fast and Strong Bird’s-Eye View Perception Baseline
  • 【AI学习从零至壹】Transformer
  • AI入门学习-特征工程
  • 钢铁之躯的智慧觉醒:Deepoc具身智能如何重塑工业机械臂的“工艺直觉”
  • 虚幻 5 与 3D 软件的协作:实时渲染,所见所得
  • ClearML库详解:从实验跟踪到模型部署的全流程管理
  • FPGA自学——存储器模型
  • 立式数控深孔钻的工艺及光学检测方法 —— 激光频率梳 3D 轮廓检测
  • C语言---VSCODE的C语言环境搭建
  • 腾讯研究院 | AI 浪潮中的中国品牌优势解码:华为、小米、大疆、科大讯飞等品牌从技术破壁到生态领跑的全维突围
  • 宽带丢包重传高优化
  • 论文笔记 | Beyond Pick-and-Place: Tackling Robotic Stacking of Diverse Shapes
  • 2025.7.25论文阅读
  • 基于AutoJawSegment项目的CBCT图像分割实践指南
  • ES--为什么没有完全删除?
  • 机器人氩弧焊保护气降成本的方法