关于训练平台中Dockerfile与运行文件的编写

何为Dockerfile

为了给特定的程序提供特定的运行环境,常用的解决办法是就构建镜像。而Dockerfile就是构建镜像的源代码Docker程序根据这份源代码在镜像中安装、拷贝文件、设置环境变量

Dockerfile文件编写

下面列举两个简单样例,说明基本的Dockerfile编写规则:

样例1-极市开发者平台

# 从极市开发者平台基础镜像开始构建
FROM 10.9.0.187/algo_team/cuda10.0-cudnn7.4.2-dev-ubuntu16.04-opencv4.1.1-tensorflow1.13-openvino2020r1

# 创建默认目录,训练过程中生成的模型文件、日志、图必须保存在这些固定目录下,训练完成后这些文件将被保存
RUN mkdir -p /project/train/src_repo && mkdir -p /project/train/result-graphs && mkdir -p /project/train/log && mkdir -p /project/train/models

# 安装训练环境依赖端软件,请根据实际情况编写自己的代码
COPY . /project/train/src_repo/
RUN python3.6 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r /project/train/src_repo/requirements.txt

RUN wget -q http://10.9.0.103:8888/group1/M00/00/02/CgkAZ15ibP2EQwGkAAAAAPNBqdc5432.gz -O /project/train/src_repo/pre-trained-model/ssd_inception_v2_coco_2018_01_28.tar.gz \
    && cd /project/train/src_repo/pre-trained-model/ \
    && tar zxf ssd_inception_v2_coco_2018_01_28.tar.gz -C ./ \
    && mv ssd_inception_v2_coco_2018_01_28/* ./

代码解析:

  • Dockerfile构建运行环境(即镜像)的代码文件,通常构建新镜像会从以已有的基础镜像开始,例如这里第一句代码所示, FROM hub.tencentyun.com/algo_team/cuda10.0-cudnn7.4.2-dev-ubuntu16.04-opencv4.1.1-tensorflow1.13-openvino2020r1,这一行设置了构建训练代码运行环境的基础镜像,这个基础镜像包含CUDA10.0cuDNN7.4.2ubuntu16.04OpenCV4.1TensorFlow1.13OpenVINO2020r1等软件;

    FROMDockerfile中的关键字,表示基于某个基础镜像执行后续的代码,第一行必须是设置基础镜像的FROM语句

    剩下的语句通常都属于设置训练程序运行环境的语句,例如建立文件夹,拷贝&安装依赖软件等。

  • 第二句RUN mkdir -p /project/train/src_repo && mkdir -p /project/train/result-graphs && mkdir -p /project/train/log && mkdir -p /project/train/models建立训练过程中输出文件的路径

    RUNDockerfile中的关键字,当需要运行某个程序时,需要使用它

  • COPY . /project/train/src_repo/,将当前仓库的所有文件拷贝/project/train/src_repo目录下;

    COPYDockerfile的关键字,用于将宿主机(即执行构建命令的主机)的文件拷贝到所构建的镜像内

  • RUN python3.6 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r /project/train/src_repo/requirements.txt安装软件依赖

  • 最后一句执行了下载并解压预训练模型到指定位置的程序。

wget -q http://10.9.0.103:8888/group1/M00/00/02/CgkAZ15ibP2EQwGkAAAAAPNBqdc5432.gz -O /project/train/src_repo/pre-trained-model/ssd_inception_v2_coco_2018_01_28.tar.gz是将上传的gz压缩文件放在指定的文件夹下;tar zxf ssd_inception_v2_coco_2018_01_28.tar.gz是解压文件;mv ssd_inception_v2_coco_2018_01_28/* ./是将解压后的文件移动至根目录下。

样例2-阿里天池竞赛

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

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

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

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

运行文件编写

运行文件一般是sh文件,建议命名为run.sh

样例1

################################STEP 1####################################
project_root_dir=/project/train/src_repo    #根目录
dataset_dir=/home/data    #数据集目录
log_file=/project/train/log/log.txt    #日志文件
echo "Preparing..."\
    && cd ${project_root_dir}/frcnn-models/research/ \
    && protoc object_detection/protos/*.proto --py
################################STEP 1####################################



################################STEP 2####################################
echo "Converting dataset..." \
    && python3 -u ${project_root_dir}/convert_dataset.py ${dataset_dir} | tee -a ${log_file}
################################STEP 2####################################



################################STEP 3####################################
wget http://10.9.0.146:8888/group1/M00/00/5C/CgkAa18160KEJvLeAAAAAI4WZK0110.zip -o /project/train/lib/darkflow.tar.gz \
    && cd /project/train/lib/ \
    && tar zxf darkflow.tar.gz -C ./ \
    && mv darkflow/* ./
################################STEP 3####################################



################################STEP 4####################################
echo "start training..." \
&& cd ${project_root_dir} \
&& python3 -u train.py --logtostderr --train_dir=training/ --pipel \
&& echo "Done"
################################STEP 4####################################



################################STEP 5####################################
echo "Exporting and save models to /project/train/models..." \
&& python3 -u ${project_root_dir}/export_models.py | tee -a ${log_file} \
&& echo "saving plots..." \
&& python3 -u ${project_root_dir}/save_plots.py | tee -a ${log_file}
################################STEP 5####################################

样例2

################################STEP 1####################################
project_root_dir=/project/train/src_repo
dataset_dir=/home/data/20
log_file=/project/train/log/log.txt
echo "Preparing..."\
    && cd ${project_root_dir} \
################################STEP 1####################################


################################STEP 2####################################
echo "Converting dataset..." \
    && python3 -u ${project_root_dir}/getimagelabel.py | tee -a ${log_file}
################################STEP 2####################################


################################STEP 3####################################
# 本步骤为解压预训练权重文件并存放在指定位置,
# 若在Dockerfile文件中包含此步骤,这里可以省略
# echo "load resnet50_weights ..." \
# wget -q http://10.9.0.146:8888/group1/M00/01/28/CgkAkl9Dd9uEVn2uAAAAAJBeVG4243.zip -O /project/train/src_repo/resnet50_weights.zip \
#     && cd /project/train/src_repo/ \
#     && unzip resnet50_weights.zip \
#     && mv pre/* /project/train/src_repo/
################################STEP 3####################################


################################STEP 4####################################
echo "start training..." \
&& cd /project/train/src_repo/ \
&& python /project/train/src_repo/keras-frcnn-master/train_frcnn.py -o simple -p /project/train/src_repo/imageslabel.txt --num_epochs 500 --input_weight_path /project/train/src_repo/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5\
&& echo "Done"
################################STEP 4####################################


################################STEP 5####################################
echo "Exporting and save models to /project/train/models..." \
&& cp /project/train/src_repo/keras-frcnn/model_frcnn.hdf5 /project/train/models/epoch01/
################################STEP 5####################################
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

great-wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值