Files
team-learning-data-mining/WeatherOceanForecasts/2.Docker提交.ipynb
T
2021-02-19 09:41:06 +08:00

305 lines
8.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Docker提交\n",
"\n",
"本次竞赛的Docker提交大致可以分为两小块:\n",
"\n",
"1. 线下文件准备好:包括DockerFile,代码,预测的代码;\n",
"2. Build同时pull提交\n",
"\n",
"如果之前没有提交过docker,可以根据这篇教程熟悉一下:https://tianchi.aliyun.com/forum/postDetail?spm=5176.12586969.1002.9.51df4127FoZKeL&postId=165595 \n",
"\n",
"\n",
"## 线下文件准备\n",
"\n",
"### Requirement \n",
"\n",
"- 运行代码所依赖的python库,缺什么就把需要装的文件放在requirement下面"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"numpy\n",
"tensorflow==2.2.0 "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 运行的代码\n",
"\n",
"#### 放在code下面即可"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"import tensorflow.keras.backend as K\n",
"from tensorflow.keras.layers import *\n",
"from tensorflow.keras.models import *\n",
"from tensorflow.keras.optimizers import *\n",
"from tensorflow.keras.callbacks import *\n",
"from tensorflow.keras.layers import Input \n",
"import numpy as np\n",
"import os\n",
"import zipfile\n",
"\n",
"def RMSE(y_true, y_pred):\n",
" return tf.sqrt(tf.reduce_mean(tf.square(y_true - y_pred)))\n",
"\n",
"def build_model(): \n",
" inp = Input(shape=(12,24,72,4)) \n",
" \n",
" x_4 = Dense(1, activation='relu')(inp) \n",
" x_3 = Dense(1, activation='relu')(tf.reshape(x_4,[-1,12,24,72]))\n",
" x_2 = Dense(1, activation='relu')(tf.reshape(x_3,[-1,12,24]))\n",
" x_1 = Dense(1, activation='relu')(tf.reshape(x_2,[-1,12]))\n",
" \n",
" x = Dense(64, activation='relu')(x_1) \n",
" x = Dropout(0.25)(x) \n",
" x = Dense(32, activation='relu')(x) \n",
" x = Dropout(0.25)(x) \n",
" output = Dense(24, activation='linear')(x) \n",
" model = Model(inputs=inp, outputs=output)\n",
"\n",
" adam = tf.optimizers.Adam(lr=1e-3,beta_1=0.99,beta_2 = 0.99) \n",
" model.compile(optimizer=adam, loss=RMSE)\n",
"\n",
" return model \n",
"\n",
"model = build_model()\n",
"model.load_weights('./user_data/model_data/model_mlp_baseline.h5')\n",
"\n",
"test_path = './tcdata/enso_round1_test_20210201/'\n",
"\n",
"### 1. 测试数据读取\n",
"files = os.listdir(test_path)\n",
"test_feas_dict = {}\n",
"for file in files:\n",
" test_feas_dict[file] = np.load(test_path + file)\n",
" \n",
"### 2. 结果预测\n",
"test_predicts_dict = {}\n",
"for file_name,val in test_feas_dict.items():\n",
" test_predicts_dict[file_name] = model.predict(val).reshape(-1,)\n",
"# test_predicts_dict[file_name] = model.predict(val.reshape([-1,12])[0,:])\n",
"\n",
"### 3.存储预测结果\n",
"for file_name,val in test_predicts_dict.items(): \n",
" np.save('./result/' + file_name,val)\n",
"\n",
"#打包目录为zip文件(未压缩)\n",
"def make_zip(source_dir='./result/', output_filename = 'result.zip'):\n",
" zipf = zipfile.ZipFile(output_filename, 'w')\n",
" pre_len = len(os.path.dirname(source_dir))\n",
" source_dirs = os.walk(source_dir)\n",
" print(source_dirs)\n",
" for parent, dirnames, filenames in source_dirs:\n",
" print(parent, dirnames)\n",
" for filename in filenames:\n",
" if '.npy' not in filename:\n",
" continue\n",
" pathfile = os.path.join(parent, filename)\n",
" arcname = pathfile[pre_len:].strip(os.path.sep) #相对路径\n",
" zipf.write(pathfile, arcname)\n",
" zipf.close()\n",
"make_zip() "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### run.sh\n",
"\n",
"- 运行预测的代码"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#!/bin/sh\n",
"CURDIR=\"`dirname $0`\" #获取此脚本所在目录\n",
"echo $CURDIR\n",
"cd $CURDIR #切换到该脚本所在目录\n",
"python /code/mlp_predict.py"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### DockerFile"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Base Images\n",
"## 从天池基础镜像构建 \n",
"FROM registry.cn-shanghai.aliyuncs.com/tcc-public/tensorflow:latest-cuda10.0-py3\n",
"\n",
"## 把当前文件夹里的文件构建到镜像的根目录下(.后面有空格,不能直接跟/)\n",
"ADD . /\n",
"\n",
"## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)\n",
"WORKDIR /\n",
"\n",
"## Install Requirementsrequirements.txt包含python包的版本)\n",
"## 这里使用清华镜像加速安装\n",
"RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip\n",
"RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt\n",
"#RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt\n",
"\n",
"## 镜像启动后统一执行 sh run.sh\n",
"CMD [\"sh\", \"run.sh\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 其它\n",
"\n",
"- 按照官方要求把所需的文件全部按要求准备好即可。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 线上提交\n",
"\n",
"在所有的文件都准备之后,下面一步就是进行线上的提交,这里又分为三块。\n",
"\n",
"1. 按照要求进行线上配置\n",
"2. 进行build和pull\n",
"3. 提交"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 按照要求进行线上配置\n",
"\n",
"<img src=\"./pic/first_step.jpeg\" width = \"500\" height = \"200\" alt=\"first_step\" align=center />\n",
"\n",
"\\\\ \n",
"\n",
"<img src=\"./pic/second_step.jpeg\" width = \"500\" height = \"200\" alt=\"first_step\" align=center />\n",
"\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 进行build和pull\n",
"\n",
"\n",
"<img src=\"./pic/1st.jpeg\" width = \"400\" height = \"200\" alt=\"first_step\" align=center />\n",
"\\\\\n",
"<img src=\"./pic/2nd.jpeg\" width = \"400\" height = \"200\" alt=\"first_step\" align=center />\n",
"\\\\\n",
"<img src=\"./pic/3rd.jpeg\" width = \"400\" height = \"200\" alt=\"first_step\" align=center />\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#### 1.登录\n",
"sudo docker login --username=\"自己的用户名\" registry.cn-shenzhen.aliyuncs.com\n",
"#### 2.build\n",
"docker build registry.cn-shenzhen.aliyuncs.com/ai_earth_baseline/test_ai_earth_submit:1.0 .\n",
"#### 3.push\n",
"docker push registry.cn-shenzhen.aliyuncs.com/ai_earth_baseline/test_ai_earth_submit:1.0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 提交\n",
"\n",
"\n",
"<img src=\"./pic/submit.jpeg\" width = \"600\" height = \"200\" alt=\"first_step\" align=center />\n",
"\n",
"根据自己的不同进行提交即可,如果不出意外,等待一会儿,线上跑完了就会有结果了。\n",
"\n",
"<img src=\"./pic/score.jpeg\" width = \"600\" height = \"200\" alt=\"first_step\" align=center />\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {
"height": "calc(100% - 180px)",
"left": "10px",
"top": "150px",
"width": "288px"
},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 4
}