最近想多了解一些数据竞赛的知识,阿里天池应该算国内的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
如果这步出错,可能你没有登录,按照仓库里描述操作登录即可。
第一次推送会比较耗时,可以休息一会了~o( ̄▽ ̄)d
提交结果
在左侧【提交结果】中填写推送的镜像路径、用户名和密码,即可提交。根据【我的成绩】中的分数和日志可以查看运行情况。