1. 问题描述

对于论文复现,大多数小伙伴都会遇到很多很多各种各样的问题。尽管我已经尽力回答所有人的留言,甚至为一些小伙伴免费提供了我自己购买的云服务器,但是依然很难解决 “如何让这些代码在我本地运行” 的问题。经过多次尝试,以及其他小伙伴的帮助,我开始将很多实验都移到docker中进行,并且搭建好环境,完成实验以后,将镜像导出并开源,以供更多人使用。

当然,不得不说,我做的只是非常小的一部分工作,最主要的内容还是论文开源作者提供。

2. 方案描述

每次实验都是基于 docker 进行的操作,使用 anaconda3 的合适的版本,配置合适版本的 tensorflow 或者 pytorch,并且安装论文算法的依赖,并且添加论文使用到的数据集(如果数据集公开的话)完成论文实验。并且将 docker 环境导出,以供更多小伙伴的使用。

方案依赖:

  • 需要具有一定的 docker 基础;
  • 需要具有一定的 python 基础。

3. 实操例子

目前研究论文源码地址来自 https://github.com/NetManAIOps/OmniAnomaly ,现在需要搭建环境,运行这个代码。

3.1 检查 docker 是否安装完成

$ docker --version

docker compose 在线校验_论文复现

3.2 下载 tensorflow 1.15 镜像

前往 tensorflow docker 镜像 找到合适的版本镜像。我们这里选择的是低版本的,1.15.5,对应的链接为 https://hub.docker.com/r/tensorflow/tensorflow/tags?page=1&name=1.15

$ docker pull tensorflow/tensorflow:1.15.5-jupyter

pull 完成以后,查看镜像如下:

docker compose 在线校验_异常检测_02

3.3 docker 本地启动 jupyter

为了方便我们新建一个文件夹专门存储 jupyter notebook,并在启动 docker 的时候指定路径,方便我们本地与docker镜像之间传输文件,保存环境等等。

我自己本地路径为 ~/smileyan/docker-notebooks/ ,也就是说启动 jupyter 的时候默认显示的 notebooks 对应的就是这个目录。

现在启动命令如下:

注意 需要根据自己的实际路径修改一下路径,并且根据自己喜好设置端口,这里使用的是 10086 端口。

$ docker run -it --rm -v $(realpath ~/smileyan/docker-notebooks):/tf/notebooks -p 10086:8888 tensorflow/tensorflow:1.15.5-jupyter

docker compose 在线校验_docker compose 在线校验_03

3.4 本地浏览器访问 10086 端口

第一次访问会要求输入token。

docker compose 在线校验_论文复现_04


docker compose 在线校验_docker compose 在线校验_05


如上图所示,两个文件夹,其中 notebooks 就是我们前面启动镜像的时候配置的自己的本地路径,而 tensorflow-tutorials 是这个镜像自带的。感兴趣的自行查看。

这里我们在 notebooks 下新建一个 jupyter notebook ,并且输入以下代码,查看效果:

docker compose 在线校验_异常检测_06


到目前为止我们确定已经搭建好了 python3,6 + tensorflow 1.15.5 的环境。

3.5 下载实验源码

在自己的本地浏览器上下载实验源码,然后移动到前面我们配置好了的 docker_notebooks 的文件夹下面,并解压。

docker compose 在线校验_异常检测_07


接下来我们在刚刚解压的源码目录下新建一个 notebook,以方便运行源码。

docker compose 在线校验_docker compose 在线校验_08

3.6 安装 git

为了避免出现如下错误,得安装一下 git。

docker compose 在线校验_docker_09

apt-get update

apt-install git

3.7 编辑 requirements.txt

去除用不上的比如 GPU 相关的,更改为不带 GPU 版本的,当然,对于拥有GPU的,而且驱动什么的都安装好了,需要根据自己情况调整。

更改版本不合理的,比如 matplotlib 和 six 。

更改完成以后,我们的 requirement.txt 如下:

six
matplotlib
numpy
pandas
scipy == 1.2.0
scikit_learn == 0.20.2
tensorflow == 1.12.0
tensorflow_probability == 0.5.0
tqdm
imageio
fs == 2.3.0
click == 7.0
git+https://github.com/thu-ml/zhusuan.git
git+https://github.com/haowen-xu/tfsnippet.git@v0.2.0-alpha1

docker compose 在线校验_tensorflow_10

3.8 预处理以及运行

如图所示,我们在刚刚新建的这个notebook 下面输入如下命令启动预处理脚本。

! python data_preprocess.py SMD

docker compose 在线校验_论文复现_11


预处理完成以后就可以开始训练与检测了。

!python main.py

接下来就是一个漫长的等待过程,具体时间长短需要根据不同的机器情况而定。

经过这个过程,证明我们的环境已经完全配置好了,足以让这个算法自由奔跑了。


OmniAnomaly运行过程视频录制


4. 保存docker镜像

尽管个人认为,最好根据上面详细的介绍内容,自动动手实验实验,了解整个配置环境的过程,遇到的问题以及对应的处理方法,但是如果希望自己直接跑我这个镜像的话也是可以的,我已经将我的当前镜像环境导出,需要的小伙伴可以自行下载,并导入 docker ,启动后查看运行效果等等。

如果需要的小伙伴,欢迎从 docker hub 中下载我的资源,并且docker 加载,并运行。

已经搭建好上面说的所有内容,前去查看 https://hub.docker.com/r/smileyan9/omnianomaly_docker_runner

5. 总结

一切才刚刚开始 ~ 接下来的时间里,闲时一定补充这方面内容,对其他的算法进行实现,并且总结整个过程,导出为 镜像以供更多小伙伴们使用。

Smileyan
2022.10.30 23:11