【StructureSeg2019参赛总结】------编写Docker File

本文详细记录了参加StructureSeg2019危险器官分割比赛时,使用Docker构建运行环境的过程及遇到的问题。包括Dockerfile编写、镜像创建与运行,以及在Ubuntu16.04环境下解决TensorFlow调用CUDA失败和逻辑死循环的尝试。

StructureSeg2019是由MICCAI举办的一个关于危险器官分割的比赛,在这个比赛中,我主要做了任务三,其他任务只看了数据,比赛结果需要将代码上传,并将代码运行环境制作成Docker容器(其实主办方只需要DockerFile)下面主要介绍制作docker镜像时遇到的问题和解决的过程 StrcutureSeg2019比赛官网
  
  

流程:

  1. 编写dockerfile,在/home/ly/python_project/run/src路径下,文件名必须为Dockerfile
  2. 在当前路径下运行指令sudo docker build -t run .其中 -t 后接镜像名,.表示当前路径
  3. 镜像创建完成之后,运行sudo docker run -i -t run即可创建容器进行运行
      
      

其他:

  1. 所有关于docker的指令必须加sudo,否则报错(我这里是Ubuntu16.04)
  2. 常用docker操作:
    停止某个容器的运行:sudo docker container stop 容器ID
    强制停止所有容器:sudo docker rm -f $(sudo docker ps -aq)
    删除镜像:sudo docker rmi 镜像名
      
      

存在的问题:

  1. 如果使用python3.6.4的镜像,tensorflow-gpu调用cuda似乎出了问题,原因应该是FROM的image内部没有cuda与cudnn,导致无法调用GPU
  2. 如果使用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文件也更大,但是代码会运行地更稳定。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值