天池数据竞赛docker提交操作学习

由于最近天池的比赛都要求使用docker来提交结果,所以在此记录一下docker提交到天池的整个流程。

目前正在做的,全球人工智能技术创新大赛【热身赛二】比赛链接:

https://tianchi.aliyun.com/competition/entrance/531865/introduction?spm=5176.12281976.0.0.293d22c674IJ5i

1 创建仓库

  这部分也是最简单的,按照天池官方的教程,创建好仓库,设置好账号密码就可以了。官方教程地址:https://tianchi.aliyun.com/competition/entrance/231759/tab/174?spm=5176.12586973.0.0.51948f15XY1Pvj

2 代码路径问题

  在把代码移植到docker之前,需要更改一下原来代码中的路径问题。比如我要打包的代码路径是这样的。

在这里插入图片描述

  其中code就是代码部分,外面这些文件都会打包到dokcer的根目录下,所以代码中的路径最好是改成绝对路径,不要使用相对路径。

  举个例子,比如现在要读取data文件夹下的数据,相对路径的写法就是’../data/xxx.csv’,而绝对路径的写法就是’data/xxx.csv’

3 docker命令

3.1 拉取镜像

  首先我们需要从天池的官方镜像中拉一个镜像下来,如果不是官方镜像,存在运行不了的可能。镜像的链接:https://tianchi.aliyun.com/forum/postDetail?spm=5176.12586973.0.0.51948f15XY1Pvj&postId=67720

  采用docker pull加上镜像的路径就可以pull下来了。

  注意:windows的docker默认是存在c盘的,一个镜像就会占10个G内存

  比如我要使用pytorch的镜像,就先打开windows docker,等待启动后,在命令行输入 docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.4-cuda10.1-py3 ,就完成拉取了。拉取下来后,以后要使用这个镜像构建容器时,都不再需要pull了。

3.2 文件构成

  然后就是在工作目录下,写一个Dockerfile来构建docker,Dockerfile的写法网上有很多参考,这里我把我的Dockerfile文件放上来。

FROM registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:1.4-cuda10.1-py3
ADD . /
WORKDIR /
RUN pip --no-cache-dir install  -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple

  requirements.txt文件是需要安装的包,比如我要安装1.1.2版本的pandas,就直接在里面写pandas==1.1.2 ,每个包之间用回车隔开。

  最后就是run.sh文件,里面只需要写执行python程序的代码就行了,比如我的里面写的是python code/baseline.py,运行这个sh文件时,就会自动去执行code文件夹下的baseline.py文件。

3.3 打包镜像

  文件都准备好以后,就可以开始打包了,首先把所有文件都打包在一起,使用docker build -t test .命令,其中test就是打包好的dokcer的名字,最后有个小数点不能去掉。
  打包好以后,就可以在本地测试运行一下了,windows docker不能使用gpu运行,所以使用docker run -v /data:/tcdata test:latest sh run.sh ,把data挂载在tcdata下,就可以开始运行了。其中latest是默认的test镜像的版本号。

  注意:如果比赛说明中,测试集是数据从data文件夹挂载在tcdata文件夹下的,那么我个人觉得,本地测试的时候可以,把测试的数据放进data文件夹下,代码中读数据的时候就读data文件夹。而交上去的时候,本地文件的data就做一个空文件夹,然后代码中要读这个data文件的地方,都写成tcdata。

3.3 docker推送

  这部分直接按照天池官方的教程走就可以了,首先就是登录,使用命令“docker login —username=用户名 registry.cn-shenzhen.aliyuncs.com” ,然后输入密码就可以成功。

  然后是“docker tag 镜像ID 仓库地址:版本号”,其中镜像ID可以从docker images中查看对应的镜像的ID。

  最后是“docker push 仓库地址:版本号”,然后把这个“仓库地址:版本号”,提交到天池对应的比赛提交入口就完成提交了。