华为昇腾系列——入门学习

概述

昇腾(Ascend)是华为推出的人工智能处理器品牌,其系列产品包括昇腾910和昇腾310芯片等。

生态情况

众所周知,华为昇腾存在的意义就是替代英伟达的GPU。从事AI开发的小伙伴,应该明白这个替代,不仅仅是 Ascend-910加速卡的算力 达到了Nvidia-A100的算力,而是需要整个AI开发生态的替代。下面简单列一下,昇腾生态与英伟达生态的一些对标项。

AscendNvidia
加速卡Ascend-910、Ascend-310Nvidia-A100、Nvidia-H100...
服务器Atlas 800 训练服务器NVIDIA DGX
计算架构CANNCUDA cuDNN NVCC
集合通信库HCCLNCCL

入门使用

假设原有基于GPU运行代码如下:

# 引入模块
import time
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
import torchvision# 初始化运行device
device = torch.device('cuda:0')   # 定义模型网络
class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.net = nn.Sequential(# 卷积层nn.Conv2d(in_channels=1, out_channels=16,kernel_size=(3, 3),stride=(1, 1),padding=1),# 池化层nn.MaxPool2d(kernel_size=2),# 卷积层nn.Conv2d(16, 32, 3, 1, 1),# 池化层nn.MaxPool2d(2),# 将多维输入一维化nn.Flatten(),nn.Linear(32*7*7, 16),# 激活函数nn.ReLU(),nn.Linear(16, 10))def forward(self, x):return self.net(x)# 下载数据集
train_data = torchvision.datasets.MNIST(root='mnist',download=True,train=True,transform=torchvision.transforms.ToTensor()
)# 定义训练相关参数
batch_size = 64   
model = CNN().to(device)  # 定义模型
train_dataloader = DataLoader(train_data, batch_size=batch_size)    # 定义DataLoader
loss_func = nn.CrossEntropyLoss().to(device)    # 定义损失函数
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)    # 定义优化器
epochs = 10  # 设置循环次数# 设置循环
for epoch in range(epochs):for imgs, labels in train_dataloader:start_time = time.time()    # 记录训练开始时间imgs = imgs.to(device)    # 把img数据放到指定NPU上labels = labels.to(device)    # 把label数据放到指定NPU上outputs = model(imgs)    # 前向计算loss = loss_func(outputs, labels)    # 损失函数计算optimizer.zero_grad()loss.backward()    # 损失函数反向计算optimizer.step()    # 更新优化器# 定义保存模型
torch.save({'epoch': 10,'arch': CNN,'state_dict': model.state_dict(),'optimizer' : optimizer.state_dict(),},'checkpoint.pth.tar')

参考华为官方文档快速体验-PyTorch 网络模型迁移和训练-模型开发(PyTorch)-...-文档首页-昇腾社区 (hiascend.com)

改造后,可以得到以下 用于在昇腾NPU上运行的训练代码(故意加多了全连接层的参数,以便看NPU使用情况):

# 引入模块
import time
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
import torchvisionimport torch_npu
from torch_npu.npu import amp # 导入AMP模块
from torch_npu.contrib import transfer_to_npu    # 使能自动迁移# 初始化运行device
device = torch.device('npu:0')   # 定义模型网络
class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.net = nn.Sequential(# 卷积层nn.Conv2d(in_channels=1, out_channels=16,kernel_size=(3, 3),stride=(1, 1),padding=1),# 池化层nn.MaxPool2d(kernel_size=2),# 卷积层nn.Conv2d(16, 32, 3, 1, 1),# 池化层nn.MaxPool2d(2),# 将多维输入一维化nn.Flatten(),nn.Linear(32*7*7, 4000), # 激活函数nn.ReLU(),nn.Linear(4000, 10000), nn.ReLU(),nn.Linear(10000, 10))def forward(self, x):return self.net(x)# 下载数据集
train_data = torchvision.datasets.MNIST(root='mnist',download=True,train=True,transform=torchvision.transforms.ToTensor()
)# 定义训练相关参数
# batch_size = 64   
batch_size = 128
model = CNN().to(device)  # 定义模型
train_dataloader = DataLoader(train_data, batch_size=batch_size)    # 定义DataLoader
loss_func = nn.CrossEntropyLoss().to(device)    # 定义损失函数
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)    # 定义优化器scaler = amp.GradScaler()    # 在模型、优化器定义之后,定义GradScalerepochs = 20  # 设置循环次数# 设置循环
for epoch in range(epochs):for imgs, labels in train_dataloader:start_time = time.time()    # 记录训练开始时间imgs = imgs.to(device)    # 把img数据放到指定NPU上labels = labels.to(device)    # 把label数据放到指定NPU上with amp.autocast(): outputs = model(imgs)    # 前向计算loss = loss_func(outputs, labels)    # 损失函数计算optimizer.zero_grad()# 进行反向传播前后的loss缩放、参数更新scaler.scale(loss).backward()    # loss缩放并反向转播scaler.step(optimizer)    # 更新参数(自动unscaling)scaler.update()    # 基于动态Loss Scale更新loss_scaling系数# 定义保存模型
torch.save({'epoch': 10,'arch': CNN,'state_dict': model.state_dict(),'optimizer' : optimizer.state_dict(),},'checkpoint.pth.tar')

 使用 "python train.py" 运行代码后,我们可以通过以下命令查看昇腾NPU的使用情况:

watch -n 1 npu-smi info

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/269857.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA切换JDK版本超详细步骤

😀 IDEA切换JDK版本详细教程,全网步骤最详细,实测可用。 文章目录 第一步、选择SDKs切换SDK版本:第二步、选择Modules切换Sources和Dependencies版本:第三步、选择Project切换SDK和Language Level版本:第四…

2195. 深海机器人问题(网络流,费用流,上下界可行流,网格图模型)

活动 - AcWing 深海资源考察探险队的潜艇将到达深海的海底进行科学考察。 潜艇内有多个深海机器人。 潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动。 深海机器人在移动中还必须沿途采集海底生物标本。 沿途生物标本由最先遇到它的深海机器人完成采…

CSS块元素,CSS的伪类和伪元素

学习建议 在你开始入手学习前,有一些小的建议。根据我自己学习的经验发现,这些建议在现在乃至我以后的岗位生涯里都是有很大帮助的。还有就是开始学习前,建议可以先花几天时间,查找一些如何入门的文章,通过对许多文章…

ArcGIS Server发布WMS影像地图服务并用Leaflet加载(附代码)

前言 滴滴滴!!!🤓🤓🤓在本系列中,博主将详细撰写WebGIS中各大主流平台发布地图服务(WMS,WTMS等)的详细图文教程。今天,我们首先演示如何使用 ArcMap 和 ArcGIS Server发布一个台湾地…

Linux 学习笔记(12)

十二、 系统服务 1 、系统服务分类,根据其使用的方法来分,可以被分为三类 a、由 init 控制的服务:基本都是系统级别的服务,运行级别这一章讲的就是这一类的服务 b、由 System V 启动脚本启动的服务:和我们打交道最多…

如何恢复已删除的华为手机图片?5 种方式分享

不幸的现实是,华为的珍贵时刻有时会因为意外删除、软件故障或其他不可预见的情况而在眨眼之间消失。在这种情况下,寻求恢复已删除的图片成为个人迫切关心的问题。 本文旨在为用户提供如何从华为恢复已删除图片的实用解决方案。我们将探索五种可行的方法…

矩阵错题本

《1800》 1 逗号中间全是0啊 2 代入转置即可证明 3 只是凭借感觉 4 线性代数真的是细节狂魔 经过若干次初等变换,秩相等 5 P1的逆为啥是P1 6 越排后的矩阵变换越排前 对角线矩阵的逆矩阵,除了对角线元素,全换号 7 根据题设给出来的矩阵求…

数据结构学习(四)高级数据结构

高级数据结构 1. 概念 之所以称它们为高级的数据结构,是因为它们的实现要比那些常用的数据结构要复杂很多,能够让我们在处理复杂问题的过程中, 多拥有一把利器,同时掌握好它们的性质,以及所适应的场合,在…

JavaWeb - 2 - HTML、CSS

什么是HTML、CSS? HTML(HyperText Markup Language):超文本标记语言 超文本:超越了文本的限制,比普通文本更强大,除了文字信息,还可以定义图片、音频、视频等内容 标记语言&…

安装mysql this application requires visual studio 2019 x64报错

提示 this application requires visual studio 2019 x64 缺少依赖 安装依赖 选择对应版本 安装 依赖安装地址 成功进入安装界面

三色标记过程

可达性分析 GC过程中需要对对象图遍历做可达性分析。使用了三色标记法进行分析。 什么三色? 白色:尚未访问过。 黑色:本对象已访问过,而且本对象 引用到 的其他对象 也全部访问过了。 灰色:本对象已访问过&#xff0…

day11_SpringCloud(Nacos注册中心,LoadBalancer,OpenFeign)

文章目录 Spring Cloud Alibaba1 系统架构演进1.1 单体架构1.2 微服务架构1.3 分布式和集群 2 Spring Cloud Alibaba概述2.1 Spring Cloud简介2.2 Spring Cloud Alibaba简介 3 微服务环境准备3.1 工程结构说明3.2 父工程搭建3.3 用户微服务搭建3.3.1 基础环境搭建3.3.2 基础代码…

SkyWalking链路追踪上下文TraceContext的traceId生成的实现原理剖析

结论先行 【结论】 SkyWalking通过字节码增强技术实现,结合依赖注入和控制反转思想,以SkyWalking方式将追踪身份traceId编织到链路追踪上下文TraceContext中。 是不是很有趣,很有意思!!! 【收获】 skywal…

WordPress 从入门到精通【设置 WordPress】

前言:为方便演示,前几张图使用 Playground 环境截取 如果你还不会部署WordPress,请看下面的链接并使用雨云可视化构建一个WordPress站点: 超简单EP面板搭建WordPress网站教程 - 风屿岛 10 (biliwind.com) 进入仪表盘 在搭建完…

uniapp实现单选框卡片选择器,支持微信小程序、H5等多端

采用uniapp-vue3实现的一款单选框卡片选择器&#xff0c;纯CSS实现样式和交互&#xff0c;提供丝滑的动画选中效果&#xff0c;支持不同主题配置&#xff0c;适配多端 可到插件市场下载尝试&#xff1a; https://ext.dcloud.net.cn/plugin?id16901 使用示例 示例代码 <te…

各中间件性能、优缺点对比

参考资料&#xff1a; Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点&#xff1f;

Golang pprof 分析程序的使用内存和执行时间

一、分析程序执行的内存情况 package mainimport ("os""runtime/pprof" )func main() {// ... 你的程序逻辑 ...// 将 HeapProfile 写入文件f, err : os.Create("heap.prof")if err ! nil {panic(err)}defer f.Close()pprof.WriteHeapProfile(f…

最新PyCharm安装详细教程及pycharm配置

目录 一、PyCharm简介及其下载网站 二、单击网站的Downloads&#xff0c;进入二级页面&#xff0c;选择对应的操作系统下载PyCharm 三、PyCharm的安装程序的安装及其配置(configuration) 1、运行PyCharm Setup 2、安装位置设置 3、安装选项设置 4、开始菜单中PyCharm快捷方式的…

Android 签名机制

V1是内部文件单个签 但是增加apk文件目录下面随意增加文件并不会有影响,它只关心meta-info文件 mf汇总清单的各个文件sha256 V2 整个APK文件,按文件进行hash 那么便不能随便在这里面增加文件了,增加了签名分块&#xff08;不然签名信息存哪里&#xff09;这里涉及一个文件概念 …

H12-821_131

131.如图所示&#xff0c;R1、R2、R3和R4运行OSPF&#xff0c;缺省情况下该网络中选举________个DR。&#xff08;请填写阿拉伯数字&#xff09; 答案&#xff1a;3 注释&#xff1a; DR是链路上的概念&#xff0c;使用路由器接口的IP地址表示。链路的网络类型是广播网络类型或…