# model-gallery **Repository Path**: apulisplatform/model-gallery ## Basic Information - **Project Name**: model-gallery - **Description**: Model-Gallery is a developer community built on the basis of aiarts. It provides the sharing of models, algorithms, datasets and other contents. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: v1.6.0 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-10-27 - **Last Updated**: 2023-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Model-Gallery Model-Gallery is a developer community built on the basis of aiarts. It provides the sharing of models, algorithms, datasets and other contents. [English](README_en_US.md) | [简体中文](README.md) # 镜像管理 - 已经迁移至 https://apulis-gitlab.apulis.cn/apulis/docker-zoo # 测试环境 mindspore训练使用训练卡的逻辑id,tensorflow使用物理id ## 裸机测试 ### 裸机 - 裸机安装环境tensorflow相关依赖包(更新驱动之后,需要重新安装相关依赖包) - arm的tensorflow包到【 \\\192.168.2.71\public\AIarts算法部署\算法镜像 】寻找tensorflow-1.15.0-cp37-cp37m-linux_aarch64.whl - amd的tensorflow包使用pip install tensorflow-cpu==1.15.0安装 ```shell script python3 -m pip config set global.index-url http://mirrors.aliyun.com/pypi/simple && python3 -m pip config set install.trusted-host mirrors.aliyun.com && python3 -m pip install --upgrade pip \ && python3 -m pip install /home/HwHiAiUser/Ascend/tfplugin/latest/tfplugin/bin/npu_bridge-1.15.0-py3-none-any.whl \ /home/HwHiAiUser/Ascend/nnae/latest/fwkacllib/lib64/hccl-0.1.0-py3-none-any.whl /home/HwHiAiUser/Ascend/nnae/latest/fwkacllib/lib64/te-0.4.0-py3-none-any.whl \ /home/HwHiAiUser/Ascend/nnae/latest/fwkacllib/lib64/topi-0.4.0-py3-none-any.whl sympy --force-reinstall ``` - 克隆model-gallery ```shell script cd ~ git config --global credential.helper store git clone -b v1.0 --depth 1 https://apulis-gitlab.apulis.cn/apulis/model-gallery.git cd ~/model-gallery/models/npu/testcase/single bash test_single.sh cd ~/model-gallery/models/npu/testcase/distributed bash test_distributed.sh ``` ### 镜像 - 启动镜像(测试代码已经打入镜像中) ```shell script docker run -it --privileged --rm tf-torch-ms-nni-npu:1.15.0-1.5.0-1.1.1-1.9-arm /bin/bash ``` - 单算子测试(判断驱动单算子是否正常) 如果训练卡的位置不是从0开始,通过testcase验证tf环境时,不能直接执行test_single.sh,可使用python tf_case.py验证 ```shell script cd /home/testcase/single bash test_single.sh ``` - 单机多卡训练测试(判断驱动是否正常) ```shell script cd /home/testcase/distributed bash test_distributed.sh ``` ## 平台测试 ### 单机多卡测试(判断平台环境变量是否正常) #### 代码开发 - 在jupyterlab中执行测试脚本 ```shell script cd /tmp bash /data/model-gallery/models/testcase/npu/distributed/test_distributed.sh bash /data/model-gallery/models/testcase/npu/single/test_single.sh cd ~ git config --global credential.helper store git clone -b v1.0 --depth 1 https://apulis-gitlab.apulis.cn/apulis/model-gallery.git cd ~/code/model-gallery/models/npu/testcase/single bash test_single.sh ``` - 在jupyterlab中直接执行示例代码 ```bash cd ~/code/model-gallery-master/models/npu/tensorflow/resnet bash train.sh --data_path /data/dataset/storage/tiny_imagenet/ --train_steps 1000 --eval False --iterations_per_loop 1 --eval False --output_path ./ ``` #### 模型训练(经典模式) - 启动文件 model-gallery/models/npu/testcase/distributed/test_distributed.sh - 输出路径 work_dirs/testcase - 数据集 mnist("/data/dataset/storage/mnist/") 可任意数据集 #### 模型训练(命令行模式)命令行启动(v1.5版本才会有): ```shell script bash ~/model-gallery/models/npu/testcase/distributed/test_distributed.sh ``` ### 多机多卡测试 (判断worker、master节点是否正常) #### 代码开发方式 - NPU 在每个jupyter中的每个worker都执行启动脚本命令 ```shell script ssh worker-0 cd ~/code/model-gallery/models/npu/testcase/distributed/ bash test_distributed.sh ssh worker-1 cd ~/model-gallery/models/npu/testcase/distributed/ bash test_distributed.sh ``` - GPU 在代码开发启动horovod引擎后(直接在master(ps-0)的jupytermaster(ps-0)中执行以下脚本) ```shell script # tensorflow 如果集群机器没有ib卡则去掉 ib0 参数 horovodrun --network-interface ib0 -np 4 -hostfile /job/hostfile python /examples/tensorflow2_keras_mnist.py # 4表示2机4卡 # pytorch horovodrun --network-interface ib0 -np 2 -hostfile /job/hostfile python /examples/pytorch_mnist.py # 2表示1机2卡 # mindspore cd ~/code/resnet_mindspore && bash run.sh # mindspore要求不能分布在同一个节点,训练框架的bug ``` #### 模型训练方式 - NPU Worker 节点命令填入(使用预置训练参数) ```shell script bash ~/model-gallery/models/npu/testcase/distributed/test_distributed.sh ``` ![Image text](./static/example_distributed.png) - GPU 创建多机训练(需在master节点命令中填写) - docker pull harbor.apulis.cn:8443/algorithm/apulistech/horovod:0.20.0-tf2.3.0-torch1.6.0-mxnet1.6.0.post0-py3.7-cuda10.1-nni2.4 ```shell script # tensorflow horovodrun --network-interface ib0 -np 4 -hostfile /job/hostfile python /examples/tensorflow2_keras_mnist.py # pytorch horovodrun --network-interface ib0 -np 2 -hostfile /job/hostfile python /examples/pytorch_mnist.py # mindspore cd ~/code/resnet_mindspore && bash run.sh ``` # 预置模型管理 ## 部署预置模型 - 进入部署服务器AIArts平台对应/data的路径中,克隆仓库(目的是为了平台能找到预置模型的启动文件:/data/model-gallery/models/npu/ssd_mindspore/train.sh) ```shell script #如:代码路径/data/model-gallery/models 对应 /mnt/local/pvc/aiplatform-model-data/model-gallery/models # /data/model-gallery/models/gpu/lenet_mxnet/train.py #数据集路径/data/dataset/storage 对应 /mnt/local/pvc/aiplatform-model-data/dataset/storage # /data/dataset/storage/coco/2017/mindrecord cd /mnt/local/pvc/aiplatform-model-data/ git clone -b v1.0 --depth 1 https://apulis-gitlab.apulis.cn/apulis/model-gallery.git ``` - 从存储服务器中下载数据集,地址 【\\\192.168.2.71\public\AIarts算法部署\dataset】 文件夹,并放至【/mnt/local/pvc/aiplatform-model-data/】下 (目的是为了平台能找到预置模型的数据集文件 【/data/dataset/storage/coco】) - 运行deploy.sh ```shell script cd model-gallery #postgresql bash deploy.sh #mysql bash deploy-mysql.sh ``` ## 算法开发 ### 平台算法预置 - 代码开发并测试完成 - 在代码目录中新建gallery_config.json,编写模型信息(详见下页) - 将数据集上传至存储服务器 地址 【\\\192.168.2.71\public\AIarts算法部署\model_data\dataset】 - 预训练模型文件存放路径【\\\192.168.2.71\public\AIarts算法部署\dataset\storage\pretrained_models】 - 更新代码至远程仓库 ```shell script git pull git add . git commit -m "xxx" git push ``` - 进入atlas集群启动多卡代码开发环境 ```shell script cd ~ git config --global credential.helper store git clone -b v1.0 --depth 1 https://apulis-gitlab.apulis.cn/apulis/model-gallery.git cd ~/model-gallery # 如git pull有冲突 git reset --hard ``` - 使用tensorflow/mindspore训练模板 ~/model-gallery/models/npu/mindspore_train.sh ```shell script cp ~/model-gallery/models/npu/mindspore_train.sh ~/model-gallery/models/npu/{your_model}/train.sh ``` - 替换train.sh中的启动文件为相应的启动文件(非必须)STARTFILE="train.py " - 需要注意将py文件中`args = parse_args() `解析修改为 `args, _ = parser.parse_known_args()` - 相关数据集放在/data/dataset/storage/目录下 ```shell script cp -r mnist /data/dataset/storage/ ``` - 启动训练脚本,查看是否成功 ```shell script bash train.sh ``` ### 算法配置字段说明 - gallery_config.json ```json5 { "created_at": "2020-10-28 03:35:29", "updated_at": "2020-10-28 03:35:29", "version": "0.0.1", "status": "normal", // 默认为normal "platform": "AIArts", // 目前可选值 AIArts Avisualis Segmentation... "models": [ { "name": "LeNet_TensorFlow_GPU_scratch", "framework":"tensorflow", "model_name":"lenet", "description": "lenet-mxnet", "size": "20165368", // 默认单位为Bytes,18M "type": "CV/Classfication", // 目前可选值 CV/ObjectDetection NLP/BERT CV/Segmentation... "dataset": { "name": "mnist", "path": "mnist", // 数据集目录名 // 存储服务器真实存放路径 /data/dataset/storage/mnist // dataset path传入启动文件的命令 python train.py --dataset mnist "size":"123123", //数据集大小单位bytes "format": "TFRecord" }, "params": { "batch_size": "50", "epochs":"10", "lr":"0.1", }, // params传入启动文件的命令为 python train.py --batch_size 50 --optimizer sgd // params的值都需要使用双引号 "engine": "apulistech/mxnet:2.0.0-gpu-py3", //apulistech/tensorflow-nni-npu:1.15.0-20.2-arm //apulistech/mindspore-nni-npu:1.1.1-20.2-arm "precision": "-", // 模型评估精度 "output_path": "work_dirs/lenet_mxnet", // work_dirs/{模型名称} // 相对路径 /home/admin/work_dirs/lenet_mxnet // output_path传入启动文件的命令 python train.py --output_path work_dirs/lenet_mxnet "startup_file": "train.py", // 训练启动文件命名都为 train.py / train.sh 或者 main/train.py // 评估启动文件命名都为 eval.py / eval.py 或者 main/eval.py "device_type": "nvidia_gpu_amd64", // 目前可选值 nvidia_gpu_amd64 huawei_npu_amd64 huawei_npu_arm64 空 "device_num": 1 // 是否支持多卡、多机训练 // 目前可选值 0 1 ... } ] } ``` - 所有名称、路径名、配置参数名称、统一用下划线表示间隔 - 模型名称统一为 {模型名称}_{框架名称}{版本号}_{计算设备}_{是否从零开始训练} 如: LeNet_TensorFlow_GPU_scratch - 数据集和模型文件需要放在存储服务器上 - 利用jetkins,使用dockerfile通过pipeline生成image,提供给部署人员save后进行部署。镜像管理中,从公用harbor中导入。 ## 模型管理框架 ![Image text](./static/model_frame.png)