Datawhale学习 - 天池大赛比赛全流程体验

比赛地址: https://tianchi.aliyun.com/competition/entrance/531871/introduction

1 学习目标

  • 使用docker上传容器镜像至阿里云的镜像仓库
  • 实践了镜像的pull、build、push等一系列操作
  • 完成了本地docker环境的配置以及代码的运行
  • 提交到远程完成了比赛的全流程体验

2 学习流程

2.1 安装Docker for Windows

Docker安装官方教程

注意:Docker默认安装到C盘,构建镜像时会占据较大的空间,可以参照这篇文章在安装Docker之前设置其安装路径。

2.2 开通阿里云容器镜像服务

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

(1)创建命名空间

第一步切换标签页到命名空间,创建地址唯一的命名空间Datawhale学习 - 天池大赛比赛全流程体验_第1张图片

根据大赛要求选择对应的地域,其他的按照自己需求选择或填写Datawhale学习 - 天池大赛比赛全流程体验_第2张图片

(2)创建镜像仓库

下一步,选择本地仓库,不建议其他选项,完成创建。

Datawhale学习 - 天池大赛比赛全流程体验_第3张图片

点击管理,可查看详情。

图片

Datawhale学习 - 天池大赛比赛全流程体验_第4张图片

(3)完成本地登录

按照页面的指令在本地完成登陆:

Datawhale学习 - 天池大赛比赛全流程体验_第5张图片

2.3 构建镜像并推送

(1)线下文件准备

  • Requirements.txt

运行代码所依赖的python库,缺什么就把需要装的文件放在requirement下面

numpy
tensorflow==2.2.0 
  • 运行的代码

放在code文件夹下面即可

import tensorflow as tf
import tensorflow.keras.backend as K
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
from tensorflow.keras.optimizers import *
from tensorflow.keras.callbacks import *
from tensorflow.keras.layers import Input 
import numpy as np
import os
import zipfile

def RMSE(y_true, y_pred):
    return tf.sqrt(tf.reduce_mean(tf.square(y_true - y_pred)))

def build_model():  
    inp    = Input(shape=(12,24,72,4))  
    
    x_4    = Dense(1, activation='relu')(inp)   
    x_3    = Dense(1, activation='relu')(tf.reshape(x_4,[-1,12,24,72]))
    x_2    = Dense(1, activation='relu')(tf.reshape(x_3,[-1,12,24]))
    x_1    = Dense(1, activation='relu')(tf.reshape(x_2,[-1,12]))
     
    x = Dense(64, activation='relu')(x_1)  
    x = Dropout(0.25)(x) 
    x = Dense(32, activation='relu')(x)   
    x = Dropout(0.25)(x)  
    output = Dense(24, activation='linear')(x)   
    model  = Model(inputs=inp, outputs=output)

    adam = tf.optimizers.Adam(lr=1e-3,beta_1=0.99,beta_2 = 0.99) 
    model.compile(optimizer=adam, loss=RMSE)

    return model 

model = build_model()
model.load_weights('./user_data/model_data/model_mlp_baseline.h5')

test_path = './tcdata/enso_round1_test_20210201/'

### 1. 测试数据读取
files = os.listdir(test_path)
test_feas_dict = {}
for file in files:
    test_feas_dict[file] = np.load(test_path + file)
    
### 2. 结果预测
test_predicts_dict = {}
for file_name,val in test_feas_dict.items():
    test_predicts_dict[file_name] = model.predict(val).reshape(-1,)
#     test_predicts_dict[file_name] = model.predict(val.reshape([-1,12])[0,:])

### 3.存储预测结果
for file_name,val in test_predicts_dict.items(): 
    np.save('./result/' + file_name,val)

#打包目录为zip文件(未压缩)
def make_zip(source_dir='./result/', output_filename = 'result.zip'):
    zipf = zipfile.ZipFile(output_filename, 'w')
    pre_len = len(os.path.dirname(source_dir))
    source_dirs = os.walk(source_dir)
    print(source_dirs)
    for parent, dirnames, filenames in source_dirs:
        print(parent, dirnames)
        for filename in filenames:
            if '.npy' not in filename:
                continue
            pathfile = os.path.join(parent, filename)
            arcname = pathfile[pre_len:].strip(os.path.sep)   #相对路径
            zipf.write(pathfile, arcname)
    zipf.close()
make_zip() 
  • run.sh

运行预测的代码

#!/bin/sh
CURDIR="`dirname $0`" #获取此脚本所在目录
echo $CURDIR
cd $CURDIR #切换到该脚本所在目录
python /code/mlp_predict.py
  • DockerFile
# Base Images
## 从天池基础镜像构建 
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/tensorflow:latest-cuda10.0-py3

## 把当前文件夹里的文件构建到镜像的根目录下(.后面有空格,不能直接跟/)
ADD . /

## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /

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

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

(2)构建镜像并推送

docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .

注意:registry.~~~是上面创建仓库的公网地址,用自己仓库地址替换。地址后面的:1.0为自己指定的版本号,用于区分每次build的镜像。最后的.是构建镜像的路径,不可以省掉。

Datawhale学习 - 天池大赛比赛全流程体验_第6张图片

推送到镜像仓库

docker push registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0

2.4 提交验证运行结果

Datawhale学习 - 天池大赛比赛全流程体验_第7张图片

运行结果:

Datawhale学习 - 天池大赛比赛全流程体验_第8张图片

你可能感兴趣的:(Datawhale学习 - 天池大赛比赛全流程体验)