阿里天池竞赛从0开始docker提交

最近想多了解一些数据竞赛的知识,阿里天池应该算国内的Kaggle了,近期发现一些比赛采用了基于GPU计算资源的提交镜像的方式,将本地代码打包成镜像提交。由于未接触过docker提交方式,因此记录下来,做一番研究。

本地环境安装docker工具

这篇文章中介绍了docker在不同操作系统下的安装过程,https://www.yuque.com/ph3t07/wks51w/ldh009

创建镜像仓库

  • 申请阿里云容器镜像服务
    阿里云容器服务地址为(https://cr.console.aliyun.com),注册开通后产品页面如下,一定要记住注册时候的密码,后面会用到。

  • 选择创建命名空间


  • 创建镜像仓库
    根据大赛要求选择对应的地域,其他的按照自己需求选择或填写,填写完毕后选择下一步,选择本地仓库



本地构建

拉取镜像到本地

点击镜像仓库的管理按钮,进入仓库管理页面,根据页面教程提示,复制登录阿里云Docker Registry语句到本地执行


sudo docker login --username=<your username> registry.cn-shenzhen.aliyuncs.com

本地构建镜像

完全不了解docker走这里(大家自行尝试)

下载自动打包镜像工具包,下载链接:http://tianchi-media.oss-cn-beijing.aliyuncs.com/docker-tool/tianchi_docker.zip
解压zip包,仅需用记事本打开Dockerfile按需修改配置,并把main.py替换为自己的代码(或将解压后的文件放置于你工程所在目录),然后执行sh docker_build.sh 即可

E.g: sh docker_build.sh 0.1  (0.1为自己指定的版本号)

有docker自定义基础走这里

为简化构建镜像的难度,天池已准备了常用的Python基础镜像,可直接拉取使用,更多基础镜像说明点击
自行构建镜像请确保安装curl.
docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/python:3

  • 创建本地目录touch tianchi_submit_demo用于存放这次任务镜像所需的文件
  • 按照下图创建三个文件,其中Dockerfile为docker配置文件,run.sh为代码启动文件,hello.py为代码文件


  • Dockerfile
# Base Images
## 从天池基础镜像构建
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3

## 把当前文件夹里的文件构建到镜像的根目录下
ADD . /

## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /
## 下面的pip语句当需要额外的包的时候执行,不需要的时候注释掉即可
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]
  • run.sh
python hello.py
  • hello.py
import json
import pandas as pd
data = pd.read_csv("/tcdata/num_list.csv",names=['nums'])
Q2 = int(data['nums'].sum())
df_sort_values = data.sort_values('nums',ascending=False)
Q3 = df_sort_values['nums'].values[:10]
Q3 = [int(i) for i in Q3]
print(Q3)
res = {
    "Q1":"Hello world",
    "Q2":Q2,
    "Q3":Q3
}
with open('./result.json','w') as f:
    f.write(json.dumps(res))
  • requirements.txt,当pull的镜像中需要添加额外库时使用
pandas

执行 docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
注意:registry.~~~是上面创建仓库的公网地址,用自己仓库地址替换。地址后面的:1.0为自己指定的版本号,用于区分每次build的镜像。最后的.是构建镜像的路径,不可以省掉。
构建完成后可先验证是否正常运行,正常运行后再进行推送,这一步很重要可以省下很多麻烦
CPU镜像:docker run your_image sh run.sh
GPU镜像:nvidia-docker run your_image sh run.sh

推送到镜像仓库 docker push registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0
如果这步出错,可能你没有登录,按照仓库里描述操作登录即可。

enter image description here

第一次推送会比较耗时,可以休息一会了~o( ̄▽ ̄)d

提交结果

在左侧【提交结果】中填写推送的镜像路径、用户名和密码,即可提交。根据【我的成绩】中的分数和日志可以查看运行情况。

参考

天池大赛从0开始docker提交
天池大赛【入门】Docker练习场
天池镜像地址

推荐阅读更多精彩内容