1. 问题描述
对于论文复现,大多数小伙伴都会遇到很多很多各种各样的问题。尽管我已经尽力回答所有人的留言,甚至为一些小伙伴免费提供了我自己购买的云服务器,但是依然很难解决 “如何让这些代码在我本地运行” 的问题。经过多次尝试,以及其他小伙伴的帮助,我开始将很多实验都移到docker中进行,并且搭建好环境,完成实验以后,将镜像导出并开源,以供更多人使用。
当然,不得不说,我做的只是非常小的一部分工作,最主要的内容还是论文开源作者提供。
2. 方案描述
每次实验都是基于 docker 进行的操作,使用 anaconda3 的合适的版本,配置合适版本的 tensorflow 或者 pytorch,并且安装论文算法的依赖,并且添加论文使用到的数据集(如果数据集公开的话)完成论文实验。并且将 docker 环境导出,以供更多小伙伴的使用。
方案依赖:
- 需要具有一定的 docker 基础;
- 需要具有一定的 python 基础。
3. 实操例子
目前研究论文源码地址来自 https://github.com/NetManAIOps/OmniAnomaly ,现在需要搭建环境,运行这个代码。
3.1 检查 docker 是否安装完成
$ docker --version
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 完成以后,查看镜像如下:
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
3.4 本地浏览器访问 10086 端口
第一次访问会要求输入token。
如上图所示,两个文件夹,其中 notebooks 就是我们前面启动镜像的时候配置的自己的本地路径,而 tensorflow-tutorials 是这个镜像自带的。感兴趣的自行查看。
这里我们在 notebooks 下新建一个 jupyter notebook ,并且输入以下代码,查看效果:
到目前为止我们确定已经搭建好了 python3,6 + tensorflow 1.15.5 的环境。
3.5 下载实验源码
在自己的本地浏览器上下载实验源码,然后移动到前面我们配置好了的 docker_notebooks
的文件夹下面,并解压。
接下来我们在刚刚解压的源码目录下新建一个 notebook,以方便运行源码。
3.6 安装 git
为了避免出现如下错误,得安装一下 git。
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
3.8 预处理以及运行
如图所示,我们在刚刚新建的这个notebook 下面输入如下命令启动预处理脚本。
! python data_preprocess.py SMD
预处理完成以后就可以开始训练与检测了。
!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