Ascend910ProB计算速度比两块TselaP40跑的慢
收藏回复举报
Ascend910ProB计算速度比两块TselaP40跑的慢
t('forum.solved') 已解决
发表于2024-04-01 13:40:40
0 查看

cke_249.png

训练一个epoch约为一个半小时以上,而两块P40需要约40分钟,和了解到的算力不符

自己安装的镜像为昇腾镜像仓库中ascend-mindspore,具体版本如下图:

cke_11576.png

之前安装服务器的时候工作人员已经安装过另外两个版本的镜像:

cke_25983.png

运行任务时服务器的状态为:(不知道为什么Memory-Usage一直不高

cke_32715.jpeg

网络为wavenet

下面是改写的训练代码

import mindspore

from md_model1 import Wave

import mindspore as md

import mindspore.dataset as ds

from mindspore import nn

from mindspore.train import Model, CheckpointConfig, ModelCheckpoint, LossMonitor

# 模型的基本参数

class ModelConfig:

input_channels: int = 2

residual_layers: int = 10

residual_channels: int = 64

dilation_cycle_length: int = 10

cfg = ModelConfig()

# 设置一些超参

lr = 0.0003

batch_size = 1

maxpatience = 100

maxepochs = 1000

log_batch = 2

# 数据准备

mindrecord_files = ["md.mindrecord"] # contains 1 or multiple MindRecord files

dataset = ds.MindDataset(dataset_files=mindrecord_files) # 已经自带shuffle

train_dataset, test_dataset = dataset.split([0.8, 0.2])

train_loader = train_dataset.batch(batch_size)

test_loader = test_dataset.batch(batch_size)

# 实例化网络

model = Wave(cfg)

# 损失函数和优化器

loss_fn = nn.MSELoss(reduction="mean")

optimizer = nn.Adam(params=model.trainable_params(), learning_rate=lr)

# 定义前向传播过程

def forward_fn(train_mix, train_soi):

logits = model(train_mix)

loss = loss_fn(logits, train_soi)

return loss

# 实例化梯度话函数

grad_fn = md.value_and_grad(forward_fn, None, optimizer.parameters, has_aux=False)

def train_step(train_mix, train_soi):

loss, grads = grad_fn(train_mix, train_soi)

optimizer(grads)

return loss

def train(model, train_dataset):

size = train_dataset.get_dataset_size()

model.set_train()

for batch, (train_mix, train_soi) in enumerate(train_dataset.create_tuple_iterator()):

loss = train_step(train_mix, train_soi)

if batch % log_batch == 0:

loss, current = loss.asnumpy(), batch

print(f"loss: {loss:>7f} [{current:>3d}/{size:>3d}]")

def test(model, dataset, loss_fn):

num_batches = dataset.get_dataset_size()

model.set_train(False)

total, test_loss, correct = 0, 0, 0

for test_mix, test_soi in dataset.create_tuple_iterator():

pred = model(test_mix)

test_loss += loss_fn(pred, test_soi).asnumpy()

test_loss /= num_batches

print(f"Test: \n Avg MSE loss: {test_loss:>8f} \n")

return test_loss

epochs = maxepochs

min_loss = float('inf')

patience = 0

for t in range(epochs):

print(f"Epoch {t + 1}\n-------------------------------")

train(model, train_loader)

current_loss = test(model, test_loader, loss_fn)

if current_loss < min_loss:

min_loss = current_loss

else:

patience += 1

if patience > maxpatience:

mindspore.save_checkpoint(model, f"Wave_epoch_{t+1}_loss_{current_loss:.4f}.ckpt.ckpt")

print("model has been saved")

break

本帖最后由 匿名用户2024/04/07 15:50:07 编辑

我要发帖子