时间序列实践(天池大赛)之一

一、学习如何使用Docker提交代码及比赛上分。

这次项目被虐得不清,即使在写文档记录时也还是有问题没有解决。

1.了解docker

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。

Docker通常用于如下场景:

  • web应用的自动化打包和发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

正因为Docker强大的功能,越来越多的场景下,需要我们使用Docker部署和发布我们的代码。(上述文字为抄作业)

2.安装配置docker

这是第二次参加Datawhale组织的开源项目,第一次感觉非常好,文档清晰,内容完整,其实只需要跟着做就能顺利完成整个过程。由于有步骤清晰的文档,所以在配置上基本没花多少时间,很顺利就完成了每次的任务。后续没有截图是因为本机资源不够,运行不出来,远程资源没法截图看,但是在完成的过程中队项目内容也学习到了很多。
吐槽一下这次的时间序列项目。第一步,要从阿里云镜像源安装docker.io。由于是第一次接触docker,虽然之前有所了解docker,但是没有用过安装过,不了解不同版本的区别。我的远程服务器sources.list中没有阿里镜像链接,只有滴滴云镜像,我只能自己从百度上自己查找阿里镜像源,但是找到的多是docker-ce。于是第一天边查边解决问题边安装,忙乎半天安装的是docker-ce,不是竞赛要求的io版。第二天一早起来先卸载干净docker-ce,重新安装io版。但是问了半天,网上查了一圈也没找到阿里镜像源,也或许是自己水平太差。就默认安装了didiyun的docker.io。问题肯定有,也猜到了后面还得重新装。
第二个大坑。按照项目提示,如果本地有gpu,请继续执行如下命令以支持gpu调用:
(文章中把注释和多行命令放在了一起,对于一个docker小白,linux也不是特别精通的人来说,看了好几篇文章才弄明白这些指令的使用,以下为正确排版。)

#Add the package repositories 
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) 
curl -s -L [https://nvidia.github.io/nvidia-docker/gpgkey] | sudo apt-key add - 
curl -s -L [https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list]| 
sudo tee /etc/apt/sources.list.d/nvidia-docker.list 
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit 
sudo systemctl restart docker

我自己操作过程中的问题:

(py36) dc2@ubuntu:~$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
(py36) dc2@ubuntu:~$ curl -s -L [https://nvidia.github.io/nvidia-docker/gpgkey] | sudo apt-key add - 
gpg: no valid OpenPGP data found.

百度到解决办法https://blog.csdn.net/wiborgite/article/details/52840371

(py36) dc2@ubuntu:~$ curl -O https://nvidia.github.io/nvidia-docker/gpgkey
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3195  100  3195    0     0    348      0  0:00:09  0:00:09 --:--:--   875
(py36) dc2@ubuntu:~$ ls
anaconda3  Documents  gpgkey  PARATERA  Public     Untitled.ipynb
Desktop    Downloads  Music   Pictures  Templates  Videos
(py36) dc2@ubuntu:~$ sudo apt-key add gpgkey
OK
(py36) dc2@ubuntu:~$ curl -s -L [https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list]| 
sudo tee /etc/apt/sources.list.d/nvidia-docker.list

结果安装过程中一直提示一个问题:

N: Ignoring file 'nvidia-docker.lista' in directory '/etc/apt/sources.list.d/' as it h
as an invalid filename extension

至此,卡住了,docker安装源不对,这个问题还是跨不过去。

从Ubuntu中卸载docker的参考文章:
https://www.cnblogs.com/shmily3929/p/12085163.html
配置踩坑记录暂时到此,由于没有阿里的docker.io的镜像源,nvidia-docker的配置问题还是没有解决,时间有限,暂时先方放放,回头再看。


以下为抄作业线索记录,借鉴操作过程链接如下,感谢学霸wework-Bruce :
https://tianchi.aliyun.com/forum/postDetail?postId=175129

  1. 本地安装docker

二、记录比赛中遇到的问题

记录比赛中遇到的问题,并在学习笔记中插入初始分数截图。

1.安装docker(不是阿里镜像源)

ubutun18.04,命令行安装:

$ sudo apt install docker.io

我的镜像源里没有阿里云镜像链接,默认是从滴滴云镜像里下载的。查了百度也在群里到处请教,但是没人告诉我答案。
验证:

$ sudo docker info

2 创建镜像仓库

这里以申请阿里云容器镜像服务(免费),并创建仓库为例,其他仓库如dockerhub、谷歌、亚马逊、腾讯等详见对应产品说明书。

阿里云容器服务地址为:https://cr.console.aliyun.com

注册开通后产品页面如下:
在这里插入图片描述
创建命名空间:
在这里插入图片描述
创建镜像仓库:
根据大赛要求选择对应的地域(大赛要求选择上海),其他的按照自己需求选择或填写。
在这里插入图片描述
下一步,选择本地仓库,不建议其他选项,完成创建。
在这里插入图片描述
点击管理,可查看详情。
在这里插入图片描述
完成本地登录:
按照页面的指令在本地完成登陆阿里云Docker Registry:

$ sudo docker login --username=your_username registry.cn-shanghai.aliyuncs.com

把your_username换成自己在第二步登陆阿里云时的用户名,接下来按照提示输入登录密码即可。

3. 构建镜像并推送

在安装好Docker环境的本机/服务器构建并推送容器镜像。过程中可能会使用docker命令,如拉取docker pull,推送docker push,构建docker build等等。为简化构建镜像的难度,天池已准备了常用的Python基础镜像,可直接拉取使用,自行构建镜像请确保安装curl.更多基础镜像说明可参考:https://tianchi.aliyun.com/forum/postDetail?postId=67720。
(1)编写文件
参与者可分阶段提交容器镜像完成以下3个任务(分数依次占 30/30/40),根据评分系统的分数返回验证任务的完成情况。

输出Hello world
计算 /tcdata/num_list.csv中一列数字的总和
在/tcdata/num_list.csv文件中寻找最大的10个数,从大到小生成一个List
num_list.csv文件中只有一列不为负的整数,其中存在重复值,示例如下:
生成入口脚本 run.sh,放置于镜像工作目录。运行后生成结果result.json放置于工作目录(与run.sh同目录),评分系统将根据result.json进行打分。json文件如下所示:
{
“Q1”:“Hello world”,
“Q2”:sum值,
“Q3”:[top10_list]
}
(2)操作
新建一个文件夹(例如tianchi_submit)用于存放这次任务镜像所需的文件,文件夹中内容示例如下:
在这里插入图片描述
其中hello_world.py中是自己编写的代码部分,此处是学霸同学wework-Bruce的代码:

#data=pd.read_csv("./tcdata/num_list.csv",header=None)
#第一题
result_1="Hello world"
#第二题
result_2=0
for i,num in enumerate(data[0]):
    result_2+=num
#第三题
data.sort_values(by=0,ascending=False,inplace=True)
result_3=data[0][:10]
result_3=list(result_3)
result={"Q1":result_1,
        "Q2":result_2,
        "Q3":result_3
with open('result.json', 'w', encoding='utf-8') as f:
    json.dump(result, f)

由于没有找到数据文件num_list.csv,所以程序暂时不能用。
我自己做的最简单的程序

print(Hello World!)

先跑完过程。

requirements.txt为使用python的时候用到的一些第三方库:

pandas1.1.5
numpy
1.16.4

在镜像服务器端build时遇到这个问题:
在这里插入图片描述
群里的同学支招:
在Dockerfile中加入一句话:

RUN python -m pip install -i https://mirrors.aliyun.com/pypi/simple -r requirements.txt

Dockerfile配置文件参考,Dockerfile是固定名称,注意首字母大写。Dockerfile中命令皆大写:

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

## 把当前文件夹里的文件构建到镜像的根目录下(.后面有空格,不能直接跟/)
ADD . /
## requirements中的第三方库如果没有,则在镜像服务器端安装
RUN python -m pip install -i https://mirrors.aliyun.com/pypi/simple -r requirements.txt
## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /

## Install Requirements(requirements.txt包含python包的版本)
## 这里使用清华镜像加速安装
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]

run.sh参考:

python3 hello_world.py

tcdata是一个文件夹

(2)构建镜像并推送
我采用服务器上直接操作:

sudo docker build -t registry.cn-shanghai.aliyuncs.com/timeseries/test_tianchi:
01 .

此处要仔细,shell命令最后还有个 . 别忘了,这个 . 表示当前目录,丢了这个点shell会提示缺少参数。
注意:registry.~~~是上面创建仓库的公网地址,用自己仓库地址替换。地址后面的:01为自己指定的版本号,用于区分每次build的镜像。最后的 . 是构建镜像的路径,不可以省掉。
构建完成后可先验证是否正常运行,正常运行后再进行推送。
CPU镜像:

docker run registry.cn-shanghai.aliyuncs.com/timeseries/test_tianchi:01 sh run.sh

推送到镜像仓库:

sudo docker push registry.cn-shanghai.aliyuncs.com/timeseries/test_tianchi:01

作者说由于镜像有1个G,所以第一次推送会比较耗时。推送完成后,在阿里云账户的镜像版本中就可以看到该镜像。我看到的只有300多兆,还是有问题。
在这里插入图片描述

4. 提交验证运行结果

【入门】Docker练习场页面的左侧【提交结果】中填写推送的镜像路径、用户名和密码,即可提交。根据【我的成绩】中的分数和日志可以查看运行情况。以下是学霸的成绩,我暂时借来用用,我的第一次提交失败,还得重新提交。

在这里插入图片描述

5.我的成绩

第一次没跑出成绩,提交应该有问题,修改问题提交后补截图。

总结

虽然以前有过Windows上用过虚拟机的经验,但是这次docker的配置入坑经历还是出乎意料。跟着学霸走了一遍配置过程,大概意思已经明白了,但是细节还有待完善和理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值