PyTorch环境搭建与使用MindStudio进行PyTorch模型开发

本次实验的视频链接如下:​https://www.bilibili.com/video/BV1iA4y1f7o1/

本次实验在MindStudio上进行,请先按照教程配置环境,安装MindStudio。

​ MindStudio的是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,该IDE上功能很多,涵盖面广,可以进行包括网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。MindStudio除了具有工程管理、编译、调试、运行等一般普通功能外,还能进行性能分析,算子比对,可以有效提高工作人员的开发效率。除此之外,MIndStudio具有远端环境,运行任务在远端实现,对于近端的个人设备的要求不高,用户交互体验很好,可以让我们随时随地进行使用。

1、pytorch编译/安装介绍

  • 1) 从gitee获取Pytorch源码。
git clone https://gitee.com/ascend/pytorch.git

在这里插入图片描述

​ 如果clone命令失败,可以使用以下命令重新安装git。

apt update; apt install git

​ 此外,也可以在Ascend仓库中查看Pytorch源码,链接为:https://gitee.com/ascend/pytorch

  • 2) 根据需要切换分支并获取PyTorch源代码。

    AscendPytorch版本 CANN版本 支持PyTorch版本
    2.0.2 CANN 5.0.2 1.5.0
    2.0.3 CANN 5.0.3 1.5.0/1.8.1(1.8.1仅支持resnet50模型)
    2.0.4 CANN 5.0.4 1.5.0/1.8.1(1.8.1仅支持resnet50模型)

    ​ 从上表来看,我们的CANN版本是5.0.4,安装的Pytorch版本为1.5.0。因此切换到2.0.4的分支,具体有哪些分支可在gitee源码查看。

    ​ 分别执行以下命令:

    cd pytorch
    git checkout -b 2.0.4.tr5 remotes/origin/2.0.4.tr5
    git clone -b v1.5.0 --depth=1 https://github.com/pytorch/pytorch.git
    

  • 3)获取Pytorch被动依赖代码

​ 分别运行以下命令

cd  pytorch
git submodule sync
git submodule update --init --recursive

​ 获取代码时,因为代码是位于GitHub上,受网络影响,获取时间可能较长,并且在获取过程中可能报错,如:

在这里插入图片描述

​ 出现这种情况时,我们需要删除该报错路径的文件,重新运行后面两条代码,直到执行git submodule update --init --recursive不再报错为止。如下图没有任何报错信息:
在这里插入图片描述

​ PS:重新运行时需要将报错信息的文件夹删除再重新运行,删除时要看清楚完整的文件夹路径,比如说报错的路径“/third_party/benchmark/”有完整路径可能是在“pytorch/third_party/onnx/third_party/benchmark/”,不要与“pytorch/third_party/benchmark/”搞混。

​ PS:如果一直有某个包克隆失败,我们可以手动添加。如third_party/QNNPACK/克隆失败,我们先在GitHub上搜索QNNPACK,然后再手动下载zip文件,再上传至服务器相关目录并解压。或者使用gitee将其导入,再从gitee中克隆。

  • 4)编译生成适配昇腾AI处理器的PyTorch安装包

    (1) 回退一级目录,进入pytorch/scrips文件夹下,执行转换脚本,生成适配昇腾AI处理器的全量代码。运行截图如下:

cd ../scripts
bash gen.sh

在这里插入图片描述
(2) 进入pytorch/pytorch目录下,安装依赖库

cd ../pytorch
pip3 install -r requirements.txt

​ (3) 运行build.sh,编译生成pytorch的二进制安装包

bash build.sh --python=3.7

​ 编译成功如下图,并可以在路径./pytorch/pytorch/dist/下找到对应的whl文件。如果失败,请重新检查第3)步-获取Pytorch被动依赖代码的操作。
在这里插入图片描述

  • 5)安装Pytorch

​ 进入生成的whl包的目录dist下,使用pip命令进行安装

cd dist
pip3 install --upgrade torch-1.5.0+ascend.post3-cp37-cp37m-linux_aarch64.whl

在这里插入图片描述

​ PS:因为之前服务器环境存在pytorch,所以截图中先卸载后安装。

  • 6)配置环境变量

安装完软件包后,需要配置环境变量才能正常使用昇腾PyTorch

进入pytorch/pytorch目录下,运行env.sh

cd ../
source env.sh

​ 这样,我们的pytorch就安装完毕了。

2、 模型简介

​ 本次实验我们的目标是在MindStudio上使用ResNet进行图像分类任务。ResNet曾在ILSVRC2015比赛中取得冠军,在图像分类上具有很大的潜力。 ResNet的主要思想是在网络中增加了直连通道,使得原始输入信息能够直接传输到后面的层中,ResNet的残差块的结构如下图所示。
在这里插入图片描述

​ ResNet会重复将残差块串联,形成多层网络。一般常见的ResNet根据层数的大小有ResNet-18,ResNet-34,ResNet-50,ResNet-101等等。后面的数字代表网络的层数。在本次实验中,我们选用的数据集是tiny-imagenet。该数据集是斯坦福大学提供的图像分类数据集,其中包含200个类别,每个类别包含500张训练图像,50张验证图像及50张测试图像。可以在此链接下载。因为数据集不是很大,这里我们选用的模型是较小的ResNet-18。

3、训练工程创建,工程功能以及相关菜单介绍

3.1 训练过程创建

  • 打开MindStudio,点击New Project,进入新建工程界面。

  • 选择Ascend Training。填入项目名。首次新建训练工程时,需要配置CANN的版本。点击install。
    在这里插入图片描述

  • 首先,点击 + 配置远程连接,然后根据选项填入自己服务器的ip地址、端口号、用户名和密码等。
    在这里插入图片描述
    在这里插入图片描述

  • 配置Remote CANN location。该参数需要填入ascend-toolkit在服务器上的路径地址。在这里,我们toolkit的路径如下:/usr/local/Ascend/ascend-toolkit/5.0.4/。点击finishing进行配置。初次配置时时间稍长,请耐心等待。
    在这里插入图片描述

  • 点击Next,选择Pytorch Project。
    在这里插入图片描述

  • 点击Finish,完成工程创建,进入工程主界面。
    在这里插入图片描述

  • 配置Module SDK,便于编码。

​ 右键点击项目名,选择Open Module Settings。
在这里插入图片描述
​ 因为我们的模型任务都是基于Python编程的,本机环境也是Python3.7.5,因此我们选择Python 3.7
在这里插入图片描述

3.2 工程功能及相关菜单介绍

​ MindStudio是基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,具有非常丰富的功能。在该IDE上可以进行包括网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。接下来我们简单介绍MindStudio中我们会用到的功能。

​ 新建Pytorch工程后,我们可以进行普通Pytorch框架下的所有开发任务,如模型构建,模型训练等。还有很多便捷的功能。

菜单栏

​ 如上图所示,MindStudio的菜单栏除了包含IDEA,Pycharm等IDE的File,Edit,View,Navigate,Code,Refactor,Run,Tools,VCS,Windows,Help等常规菜单按钮外。还多出了Ascend的特色菜单按钮。
在这里插入图片描述

在该菜单栏下,有很多便捷的功能。其相关选项,对应于上图中用红框表示的图标,可以快速点击使用。具体功能见下表所示。

名称 功能
AutoML AI初学者可以通过AutoML工具结合数据集,生成满足需求的模型
Framework Trans 包含三种工具,X2MindSpore,Pytorch GPU2Ascend,TensorFlow GPU2Ascedn。其功能分别为:将PyTorch脚本文件、ONNX模型文件TensorFlow模型文件转换到MindSpore脚本;将基于GPU训练的Pytorch训练脚本转换到支持NPU训练的脚本;将基于GPU训练的TensorFlow训练脚本转换到支持NPU训练的脚本
Model Converter 将训练好的模型转换为离线模型
Model Visualizer 将转换的模型进行可视化
Dump 精度比对功能
System Profiler 性能采集和分析功能

4、模型迁移

因为MindStudio是在NPU上进行网络训练的,因此对于基于GPU训练的代码需要进行稍微的修改。

  • 首先,将已经在GPU上正常训练的Pytorch训练代码拷贝至新建好的工程目录下。本次实验的代码文件及其实现功能可见下表。
文件名 功能
config.py 配置训练的相关参数,如学习率,数据集路径,模型存储路径等等
dataset.py 数据集读入文件
main.py 网络定义以及网络训练的主函数入口
train.py 网络训练
test.py 结果测试文件
util.py 通用函数文件
pt2onnx.py 将pt文件转为onnx模型
  • 代码大致讲解

1)网络构建

​ ResNet在torchvision中自带有网络架构和预训练的网络参数。在这里我们使用其网络架构代码,并且修改其最后的全连接层(因为分类的物品只有200个类别),并使用预训练的参数来初始化网络,再根据数据集微调。

import torchvision
model = torchvision.models.resnet18(pretrained=True)
## torchvision默认的ResNet输出维度为1000,本次使用的数据集总共只有200个类别,对模型的最后一层进行修改
fc_inputs = model.fc.in_features
model.fc = nn.Sequential(nn.Linear(fc_inputs, 200))

​ PS:如果想要查看ResNet-18的网络构建源码,可以在Pytorch的官方文档中查看:torchvision.models.resnet — Torchvision 0.12 documentation (pytorch.org)

2)数据读入和预处理

​ 我们下载tiny-imagenet后,解压文件后的目录架构如下:

tiny-imagenet-200
├── train
│   ├── class1
│   │   ├── images
│   │   │   ├── img1.JPEG
│   │   │   ├──
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值