StructureSeg2019是由MICCAI举办的一个关于危险器官分割的比赛,在这个比赛中,我主要做了任务三,其他任务只看了数据,比赛结果需要将代码上传,并将代码运行环境制作成Docker容器(其实主办方只需要DockerFile)下面主要介绍制作docker镜像时遇到的问题和解决的过程 StrcutureSeg2019比赛官网
流程:
- 编写dockerfile,在/home/ly/python_project/run/src路径下,文件名必须为Dockerfile
- 在当前路径下运行指令
sudo docker build -t run .其中 -t 后接镜像名,.表示当前路径 - 镜像创建完成之后,运行
sudo docker run -i -t run即可创建容器进行运行
其他:
- 所有关于docker的指令必须加sudo,否则报错(我这里是Ubuntu16.04)
- 常用docker操作:
停止某个容器的运行:sudo docker container stop 容器ID
强制停止所有容器:sudo docker rm -f $(sudo docker ps -aq)
删除镜像:sudo docker rmi 镜像名
存在的问题:
- 如果使用python3.6.4的镜像,tensorflow-gpu调用cuda似乎出了问题,原因应该是FROM的image内部没有cuda与cudnn,导致无法调用GPU
- 如果使用tensorflow的镜像,会造成逻辑死循环错误:
在Docker容器中,运行Python代码,首先报错:import error.......(是一个与CUDA相关的文件),网上的解决方法是运行apt-get install xxx
又报错:unable to local ........,此时需要更新apt-get的源,运行apt-get upgrade
这条指令能够运行,但是出现许多诸如:404 Not Found [IP xxx.xxx.xx.xxx]的报错,查了一下,需要将DNS地址加入到容器里,运行vi /etc/resolve.conf,报错:bash: vi command not found(vim都不行,更别说gedit了)
此时应将vim装在容器内,运行apt-get install vim,报错:404 Not Found [IP xxx.xxx.xx.xxx],需要更新源,问题回到原点…
逻辑死循环,无解…
不完美的解决方案:
不使用GPU做inference,所以在Dockerfile中安装tensorflow的时候,装CPU版的
制作好镜像文件后,运行镜像文件生成容器,输入python ./evaluate.py即可运行
今后可以尝试的解决方案:
直接制作自己系统的docker镜像,把所有的运行环境打包进去,虽然会更麻烦,image文件也更大,但是代码会运行地更稳定。
本文详细记录了参加StructureSeg2019危险器官分割比赛时,使用Docker构建运行环境的过程及遇到的问题。包括Dockerfile编写、镜像创建与运行,以及在Ubuntu16.04环境下解决TensorFlow调用CUDA失败和逻辑死循环的尝试。

被折叠的 条评论
为什么被折叠?



