网站建设 常见问题,事业单位网站建设算固定资产吗,门设计的网站建设,58加盟创业网概述
昇腾#xff08;Ascend#xff09;是华为推出的人工智能处理器品牌#xff0c;其系列产品包括昇腾910和昇腾310芯片等。 生态情况
众所周知#xff0c;华为昇腾存在的意义就是替代英伟达的GPU。从事AI开发的小伙伴#xff0c;应该明白这个替代#xff0c;不仅仅是…概述
昇腾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_channels1, out_channels16,kernel_size(3, 3),stride(1, 1),padding1),# 池化层nn.MaxPool2d(kernel_size2),# 卷积层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(rootmnist,downloadTrue,trainTrue,transformtorchvision.transforms.ToTensor()
)# 定义训练相关参数
batch_size 64
model CNN().to(device) # 定义模型
train_dataloader DataLoader(train_data, batch_sizebatch_size) # 定义DataLoader
loss_func nn.CrossEntropyLoss().to(device) # 定义损失函数
optimizer torch.optim.SGD(model.parameters(), lr0.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_channels1, out_channels16,kernel_size(3, 3),stride(1, 1),padding1),# 池化层nn.MaxPool2d(kernel_size2),# 卷积层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(rootmnist,downloadTrue,trainTrue,transformtorchvision.transforms.ToTensor()
)# 定义训练相关参数
# batch_size 64
batch_size 128
model CNN().to(device) # 定义模型
train_dataloader DataLoader(train_data, batch_sizebatch_size) # 定义DataLoader
loss_func nn.CrossEntropyLoss().to(device) # 定义损失函数
optimizer torch.optim.SGD(model.parameters(), lr0.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) # 更新参数自动unscalingscaler.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