竞赛Docker提交指南

2023-03-02 15:54:31 浏览数 (1)

有不少比赛在赛后代码复现的环节需要以Docker的形式提交代码,甚至有些比赛每次提交都需要提交Docker这样做的好处则是使得测试集不可见,从而杜绝手工标注等违规操作,与此同时增加了提交的复杂度。

老肥在上面也吃了不少苦头,下面对Docker提交代码进行流程的简单梳理,方便后续参考。

简介

Docker是开源的应用容器引擎,Docker镜像则指的是将代码和运行环境打包到成一个只读文件,可以生成可执行容器,类似于:程序设计中类(镜像)和对象(容器)的关系。

Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

构建Docker并打包

Docker的安装还是比较轻松的,照着官方文档

https://docs.docker.com/engine/install

选择对应的操作系统进行安装即可。

这里采用Dockerfile的方式来构建Docker镜像,一个相对通用的Dockerfile模板内容如下(Python版本为3.7,requirements.txt需要根据自身需要说明对应库的版本):

代码语言:javascript复制
# 拉取基础镜像
FROM  registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
# 复制数据
COPY ./ ./
# 更新PIP
RUN pip3 install --upgrade pip
# 安装相关库
RUN pip install -r requirements.txt -i https://mirrors.cloud.tencent.com/pypi/simple

这里更新PIP是必须的,不然后续的库会安装失败。

一些其他的基础镜像可以参考

代码语言:javascript复制
Python:
     registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
     registry.cn-shanghai.aliyuncs.com/tcc_public/python:3.10

TensorFlow:
     registry.cn-shanghai.aliyuncs.com/tcc-public/tensorflow:latest-py3
     registry.cn-shanghai.aliyuncs.com/tcc_public/tensorflow:2.8.0-py3
     registry.cn-shanghai.aliyuncs.com/tcc-public/tensorflow:1.1.0-cuda8.0-py2
     registry.cn-shanghai.aliyuncs.com/tcc-public/tensorflow:1.12.0-cuda9.0-py3
     registry.cn-shanghai.aliyuncs.com/tcc-public/tensorflow:1.13.1-cuda10.0-py3
     registry.cn-shanghai.aliyuncs.com/tcc-public/tensorflow:2.4.1-cuda10.1-py3

Keras:
     registry.cn-shanghai.aliyuncs.com/tcc-public/keras:latest-py3
     registry.cn-shanghai.aliyuncs.com/tcc-public/keras:latest-cuda9.0-py3
     registry.cn-shanghai.aliyuncs.com/tcc-public/keras:latest-cuda10.0-py3

pytorch:
     registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:latest-py3 
     registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:latest-cuda9.0-py3  
     registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.1.0-cuda10.0-py3
     registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.4-cuda10.1-py3
     registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.6-cuda10.1-py3
     registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.7-cuda11.0-py3
     registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.11-cuda11.3-py3

mmdetection:
     registry.cn-shanghai.aliyuncs.com/tcc-public/mmdetection:pytorch1.3-cuda10.1-py3
     registry.cn-shanghai.aliyuncs.com/tcc-public/mmdetection:pytorch1.4-cuda10.1-py3

jupyter:
     registry.cn-shanghai.aliyuncs.com/tcc-public/jupyter:gpu

ipython:
     registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch_ipython:1.4-cuda10.1-py3

nl2sql:
     registry.cn-shanghai.aliyuncs.com/tcc-public/nl2sql:base

facenet:
     registry.cn-shanghai.aliyuncs.com/tcc-public/facenet:gpu

java:
     registry.cn-shanghai.aliyuncs.com/tcc-public/java:jdk_13.0.2

接着通过命令构建镜像,镜像名和版本都可以自己定义。

代码语言:javascript复制
docker build -t <镜像名>:<版本> .

通过运行命令可以检验代码是否有问题(其中run.sh是自己封装的入口脚本,放在镜像的工作目录下)。

代码语言:javascript复制
docker run <镜像名>:<版本> sh run.sh

如果需要挂载目录(将宿主机目录挂载到容器中)的可以采用以下命令:

代码语言:javascript复制
docker run -v <宿主机路径>:<容器路径> <镜像名>:<版本> sh run.sh

构建并验证完成后可以通过如下命令进行镜像打包,命令如下:

代码语言:javascript复制
docker save -o <打包名> <镜像名>:<版本>

打包完,还可以通过加载镜像包来进行加载验证,命令如下:

代码语言:javascript复制
docker load -i <打包名>

成堆的镜像非常占用空间,如果需要删除所有镜像,则可以采取如下命令,先停止容器再删除镜像,如果是windows系统则需要在powershell中运行以下命令。

代码语言:javascript复制
docker container stop $(docker container ls -aq)
docker rmi -f $(docker images -q)

0 人点赞