# RemoteTrain **Repository Path**: baymin_gitee/RemoteTrain ## Basic Information - **Project Name**: RemoteTrain - **Description**: No description available - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-09-14 - **Last Updated**: 2025-08-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 新增训练(非Power-ai)-使用教程 # 介绍 远程训练系统,支持通过Power-Ai标完图直接训练,还支持手动训练其他数据和各种框架。由于软件里集成度高,几乎实现傻瓜式的配置。所以这里主要介绍怎么使用手动训练 由于不通框架训练使用的方式也不一样,本系统主要基于docker实现训练,目前提供3种自动化集成度高的框架。`Yolov3`和`FasterRcnn`和`MaskRcnn`, 当然有其他集成度较高的框架也可以通过镜像直接加载。 >特别说明:本系统只支持一种压缩包格式自解压`tar`,上传一定要是tar格式压缩包,否则直接凉凉。 >特别说明:需要填写的目录绝对区分大小写!!!,否则也是直接凉凉。 ## 以Yolov3示例: * #### 1.制作标准的2012格式的Pascal Voc数据集 在目标检测中,主要用到了 Annotations,ImageSets,JPEGImages 其中 ImageSets/Main/ 保存了具体数据集的索引,Annotations 保存了标签数据, JPEGImages 保存了图片内容。 ImageSets/Main/ 文件夹以 , $class$_train.txt $class$_val.txt的格式命名。 train.txt val.txt 例外,可以没有 * #### 2.在Pascal Voc数据集的根目录下新建配置文件[yolov3-voc.cfg](https://github.com/yiningzeng/darknet-license/blob/master/remote_train/yolov3-voc.cfg)和[use_gpus](https://github.com/yiningzeng/darknet-license/blob/master/remote_train/use_gpus) 如果使用服务器来训练的话,两个配置文件都不需要改动 配置文件: **yolov3-voc.cfg**只需要更改`batch=68`和`subdivisions=32`,一般情况不用更改 **use_gpus**只是需要使用的显卡的id号通过英文`,`来拼接 * #### 3.打包文件夹并上传 **ftp账号:**`ftpicubic` **ftp密码:**`ftpicubic-123` 比如你的Pascal Voc数据集的目录是`我是voc目录`,那么你压缩打包的文件名是`我是voc目录.tar`**你一定要记住,下一步中需要用到**通过上文提供的ftp地址上传文件到根目录,推荐使用`FileZilla`客户端上传 * #### 4.恭喜你已经完成了所有的配置,只用把信息提交就行了 **点页面右上角按钮**填写项目名和上一步的信息,其他如果没更新那直接默认。主要是镜像地址,使用前咨询开发 * #### 5.等着训练 ![image.png](https://upload-images.jianshu.io/upload_images/6639127-de43169e85580ae3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](https://upload-images.jianshu.io/upload_images/6639127-3b78e3f1bc4c43e6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](https://upload-images.jianshu.io/upload_images/6639127-ea9ab73835115c7c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # power-ai 远程训练 * [搭建ftp](#ftp-service) ### ftp-service ```powershell #!/bin/bash sudo docker run -d -v /home/baymin/daily-work/ftp/:/home/vsftpd \ -p 20:20 -p 21:21 -p 47400-47470:47400-47470 \ -e FTP_USER=baymin \ -e FTP_PASS=baymin1024 \ -e PASV_ADDRESS=192.168.31.157 \ --name ftp \ --net ai \ --ip 10.10.0.2 \ --restart=always registry.cn-hangzhou.aliyuncs.com/baymin/remote-train:ftp ``` # darknet 的 Dockerfile 使用说明 ## 1.什么是 Dockerfile? Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。 Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 通过定义一系列命令和参数,Dockerfile 指导 Docker 构建一个自定义的镜像。好比用报纸包一颗糖A,包完后是糖包B,又可以在糖包B的基础上再包一层命名为糖包C,可以无限叠加。 ## 2.指令详解 | Dockerfile 指令 | 说明 | | ----------------- | ---------------------------------------------------------------------- | | FROM | 指定基础镜像,用于后续的指令构建。 | | MAINTAINER | 指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令) | | LABEL | 添加镜像的元数据,使用键值对的形式。 | | RUN | 在构建过程中在镜像中执行命令。 | | CMD | 指定容器创建时的默认命令。(可以被覆盖) | | ENTRYPOINT | 设置容器创建时的主要命令。(不可被覆盖) | | EXPOSE | 声明容器运行时监听的特定网络端口。 | | ENV | 在容器内部设置环境变量。 | | ADD | 将文件、目录或远程URL复制到镜像中。 | | COPY | 将文件或目录复制到镜像中。 | | VOLUME | 为容器创建挂载点或声明卷。 | | WORKDIR | 设置后续指令的工作目录。 | | USER | 指定后续指令的用户上下文。 | | ARG | 定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。 | | ONBUILD | 当该镜像被用作另一个构建过程的基础时,添加触发器。 | | STOPSIGNAL | 设置发送给容器以退出的系统调用信号。 | | HEALTHCHECK | 定义周期性检查容器健康状态的命令。 | | SHELL | 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。 | ## 3.使用 Dockerfile 定制镜像 这里仅讲解如何运行 Dockerfile 文件来定制一个镜像,具体实现darknet的镜像自定义 ```dockerfile FROM registry.cn-hangzhou.aliyuncs.com/baymin/ai-power:darknet_auto-ai-power-v2.0 WORKDIR /darknet COPY voc2DarknetAssets-python2.py /darknet COPY darknet-final.py /darknet COPY darknet-server.py /darknet COPY darknet53.conv.74 /darknet COPY start.sh /darknet VOLUME /darknet/assets EXPOSE 8097 RUN rm darknet-2.7.py RUN rm darknet.py CMD bash start.sh ``` ### 上面例子说明 #### 基础包 首先使用`FROM`命令拿一个基础包来作为底包。可以理解为上面说的糖 #### 指定工作目录 `WORKDIR`指令 指定运行的时候默认的目录在`/darknet` #### 自定义包装的内容 * 连续复制了dockerfile同级目录下的多个文件到工作目录,再加入各种类型的糖 ```shell COPY voc2DarknetAssets-python2.py /darknet COPY darknet-final.py /darknet COPY darknet-server.py /darknet COPY darknet53.conv.74 /darknet COPY start.sh /darknet ``` * 使用`VOLUME`命令,开放一个接口,运行的时候可以提供本地目录挂载到容器里面。可以理解为在糖纸上开了一个洞,后面还可在再塞很多不同的东西进去。 ```shell VOLUME /darknet/assets EXPOSE 8097 -- 开放8097端口,可有可无 ``` * 例子中`Run`命令说明 因为是在之前的镜像上做修改,所以删除了老的镜像的内容。 #### 指定镜像被运行时默认的运行命令。也就是开机启动,有且只有一个。 通过`cmd`命令来执行,这里设置开机启动运行start.sh这个脚本 ```shell CMD bash start.sh ``` ## 4.开始编译镜像 `docker build` 命令用于从 Dockerfile 构建 Docker 镜像。 `docker build` 命令通过读取 Dockerfile 中定义的指令,逐步构建镜像,并将最终结果保存到本地镜像库中。 ### 使用命令构建 ```shell docker build -t newAiImage:1.3.0 . ``` ### 语法 ``` docker build [OPTIONS] PATH ``` [OPTIONS] 常用选项: * **`-t, --tag`** : 为构建的镜像指定名称和标签。 * **`-f, --file`** : 指定 Dockerfile 的路径(默认是 `PATH` 下的 `Dockerfile`)。 * **`--build-arg`** : 设置构建参数。 * **`--no-cache`** : 不使用缓存层构建镜像。 * **`--rm`** : 构建成功后删除中间容器(默认开启)。 * **`--force-rm`** : 无论构建成功与否,一律删除中间容器。 * **`--pull`** : 始终尝试从注册表拉取最新的基础镜像。 PATH * **`PATH`** : 包含 Dockerfile 的目录路径或 `.`(当前目录)。 * **`-`** : 从标准输入读取 Dockerfile。 ## 5. 运行启动 docker run 命令用于创建并启动一个新的容器。 ### 运行以上编译的镜像命令 命令说明 run命令开启一个容器,`--gpus all`指定所有gpu都参与,后台运行,挂载本地的`本机目录下的文件夹`目录到容器的`/darknet/assets`目录,最后训练完自动删除容器 ```shell docker run --rm -d --gpus all -v /本机目录下的文件夹:/darknet/assets newAiImage:1.3.0 ``` ### 语法 ``` docker run [OPTIONS] IMAGE [COMMAND][ARG...] ``` 常用参数说明: * **`-d`** : 后台运行容器并返回容器 ID。 * **`-it`** : 交互式运行容器,分配一个伪终端。 * **`--name`** : 给容器指定一个名称。 * **`-p`** : 端口映射,格式为 `host_port:container_port`。 * **`-v`** : 挂载卷,格式为 `host_dir:container_dir`。 * **`--rm`** : 容器停止后自动删除容器。 * **`--env` 或 `-e`** : 设置环境变量。 * **`--network`** : 指定容器的网络模式。 * **`--restart`** : 容器的重启策略(如 `no`、`on-failure`、`always`、`unless-stopped`)。 * **`-u`** : 指定用户。