July 30, 2022
前几天受人之托在 Ubuntu 服务器上安装 WRF,研究了一整天搞定,下面记录一下流程以及推荐据此整理出来的 Docker 镜像。
WRF(Weather Research and Forecasting Model) 模式是有美国环境预报中心 (NCEP), 美国国家大气研究中心(NCAR)以及多个大学、研究所和业务部门联合研发的一种统一的中尺度天气预报模式。WRF 模式适用范围很广,从中小尺度到全球尺度的数值预报和模拟都有广泛的应用。(偷懒摘录自上海交大超算平台用户手册文档)
依据的流程主要是官方编译手册,已经算是非常详细。中文方面参考的主要是这篇文章。最后整理的 Docker 仓库为wrf-docker。
你可以采用以下几种方式安装使用 WRF:
- 如果你是 Ubuntu 20.04 用户,可以直接根据我整理的 Dockerfile进行逐步的安装。除了环境变量设置地方的差异,几乎可以逐条复制 Dockerfile 中的命令(去除
RUN
)。在命令行中进行环境变量设置的方法是 export DIR=/Build_WRF
。
- 如果你希望使用 Docker 方式,但是有一些自己个性化的需求(例如采用不同版本),那么下载 Dockerfile 修改后构建即可。
- 如果你希望使用 Docker 方式,且直接使用原始 Dockerfile 中构建特性,那么直接
docker pull wogong/wrf:latest
即可,后续使用docker run -ti wogong/wrf:latest /bin/bash
进入容器,可直接使用 real.exe
wrf.exe
等命令。
说明
#
- 为什么不采用现有的 Docker 方式安装?我在 Github 上确实发现了两个仓库,但是版本比较陈旧,且基于 centos,不太方便修改,故自己重新整理了基于 ubuntu 的镜像。
- 为什么不采用 Ubuntu 22.04?Ubuntu 22.04 的 gcc 版本过高,在编译 WRF 中会报错,故采用 Ubuntu 20.04
- Dockerfile 中 WPS 的
.configure
会报依赖缺少的错误(其实并不缺,我没仔细检查脚本报错的原因),导致最后生成的 configure.wps
无法使用,这一行是手动编辑生成的 configure.wps
文件避免这个问题。
参考链接
#
October 28, 2021
- 如何跑旧版本的 tf 代码?这个问题的产生就是值得思考的,但是总有这样那样的需求场景,导致我们确实要跑远古的代码。
- 旧版本代码最大的问题就是环境配置。tf 1.4.0 版本依赖 cuda 8,但是 cuda 8 只有 Ubuntu 16.04 的安装包,没有任何代码能够做到硬件上向前兼容,因为未来不可预测。难道我们要重装系统为 Ubuntu 16.04 吗?对于使用 3080 等全新硬件的人来说,cuda 8 可能根本无法兼容新显卡,对于这类用户难道就无法跑旧版本代码了么?
- 针对这个问题,有两个解决方案,从层次上来说分别介绍。
-
- 使用 nvidia 维护的 tensorflow 版本
- nvidia 显然早就意识到了这个问题,tf 从 1.x 到 2.x 的更新,API 发生了重大变化。如何让尊贵的 3090 用户用上 tf 1.x 呢?NVIDIA 和 Google 合作,维护了一个支持最新硬件的 tf 1.5.0 版本。
- 使用请参考官方仓库 nvidia/tensorflow
-
- 使用 Docker
- Docker 是一个开源的应用容器引擎,简单来说可以把它当作一个轻量的虚拟机。由于使用的是 Linux 容器技术,Docker 优于虚拟机的一个重要方面是几乎没有性能损失,相当于主机的一个进程。
- 也就是我们可以使用 Docker 虚拟一个 Ubuntu 16.04 的环境,安装 cuda 8 和 tf 1.4.0,这样就提供了一个远古环境用来跑远古的 tf 版本代码。
- 具体使用需要用到 nvidia-docker 和 tensorflow 两个镜像,安装方法参考 https://www.tensorflow.org/install/docker 和 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
- 步骤
- 安装docker
curl https://get.docker.com | sh \
&& sudo systemctl --now enable docker
- 安装 nvidia-docker2
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
- 拉取对应版本的 docker image,并安装 pip 依赖
docker pull tensorflow/tensorflow:tags
docker run --gpus all -it -v tensorflow/tensorflow:tags bash
# in docker
pip install -r requirements
docker ps # find the container_id
docker commit <container_id> dsin:v1 # save the configed docker container as a new image
- 如何将一台机器的docker 镜像复制到其他机器?
docker save -o <path for generated tar file> <image name>
docker load -i <path to image tar file>
- 下面介绍如何使用 Docker 进行深度学习训练
- 我们首先安装获得了 tensorflow 的镜像,之后使用 pip 安装项目相关依赖,获得了 DSIN 镜像
- 进入虚拟机的 bash 环境
docker run --gpus all -it -v ~/DSIN:/DSIN dsin:v1 bash
-v host_path:vm_path
- 进入 /DSIN 路径,可以看到映射过来的代码目录,在该 bash 环境中运行 python 即可进行训练
- 其他参考链接
docker run --gpus "0" --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -it --rm nvcr.io/nvidia/pytorch:23.05-py3
docker run --gpus "0" -p 8888:8888 -v ~/datasets:/datasets -v ~/Dropbox/Inbox:/workspace/inbox --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -it --rm nvcr.io/nvidia/pytorch:23.05-py3
links
#
- [[基于Docker的深度学习环境]]
- [[dl-env]]