当前位置:   article > 正文

MindSpore深度学习模型快速调优_mindinsight

mindinsight

 MindInsight 调试调优工具包

注意:如果在你的电脑上想要使用MindInsight光pip install MindInsight是不行的,还要改一个host文件里面的服务端口号改成你电脑的,具体操作流程我忘了,安装教程参考:mindinsight: A visual dashboard for model tuning. (gitee.com)

其他框架比如pytorch可以迁移到minspore通过MindConverter

生态迁移工具:

根据TensorFlow pb/ONNX模型文件生成Mindspore模型定义脚本以及权重文件。

用户只需要传入四个参数,命令示例:

 模型之间前端语言的差异是巨大的,但是计算图都是相似的,所以使用模型迁移,而迁移使用的中间转换方式是ONNX。(奥尼克斯)

        ONNX定义了开放式模型交互的一种协议,通过ONNX可以统一不同深度学习框架间模型表达,其中有几个关键的概念:

        (1)opset:算子集;graph:存储模型的计算图;

 用在推理阶段比较多,因为导出ONNX模型时训练阶段算子会丢失(比如,dropout),需要转换后用户手动补回;推荐使用opset11+保存ONNX模型,若ONNX模型版本过低可能导致MindConverter转换失败;MindConverter暂不支持包含控制流节点的模型。

MindSpore精度调试器

MindSpore调试器是为图(Graph)模式训练提供的调试工具,可以用来查看并分析计算图节点的中间结果。具体操作流程:

        我们上一节不是说过,图模式进行训练过程高效的原因是他的计算图是固定下来的,也就是说用户无法从Python层获取计算图中间节点的结果,使得训练调试变得困难。使用MindSpore调试器就饿可以:

        (1)在MindInsight调试器界面结合计算图,查看图节点的输出结果;

        (2)设置监测点,监测训练异常情况(比如检查张量溢出),在异常发生时追踪错误原因;

         (3) 查看权重参数的变化情况。

 红色线的那两个端口号要保持一致。

只能说功能太丰富了。 

案例展示(迁移BERT模型的情感分类任务,loss一直不收敛,通过调试器进行定位问题所在。

这视频把我都看晕了,有时间我自己试试吧。

性能调优工具Profiler使用

给我整懵逼了,为啥不能直接在for循环里把结果存到数组里然后画出来,有什么区别吗整这个东西。

还是有点用的,能分析每个算子耗能分析哈哈哈

训练可视化

这里要说明一下,训练可视化有两种方法,一种是调用下买你的这些Summary来记录数据,最后使用MindInsight画出来

第二种方法就是自己写回调函数Cellback,可以参考这篇文章我觉得讲的非常好华为云Mindspore实现鸢尾花分类作业_岭南香雪的博客-CSDN博客

一般来说回调函数的代码:

  1. from mindspore.train.callback import Callback
  2. # Callback function(在原有基础上添加收集了loss和accuracy随epoch的变化数据)
  3. class StepLossAccInfo(Callback):
  4. def __init__(self, model, eval_dataset, steps_loss, steps_eval, epoch_loss, epoch_eval): #通过init函数定义self的变量
  5. self.model = model
  6. self.eval_dataset = eval_dataset
  7. self.steps_loss = steps_loss
  8. self.steps_eval = steps_eval
  9. self.epoch_loss = epoch_loss
  10. self.epoch_eval = epoch_eval
  11. def step_end(self, run_context):
  12. cb_params = run_context.original_args() #Mindspore获取参数的方法
  13. cur_epoch = cb_params.cur_epoch_num #获取当前训练周期epoch
  14. cur_step = (cur_epoch - 1) * 1 + cb_params.cur_step_num #计算当前训练步数step
  15. # 每经过一步(step),添加对应的loss和accuracy
  16. self.steps_loss["loss_value"].append(str(cb_params.net_outputs))
  17. self.steps_loss["step"].append(str(cur_step))
  18. acc = self.model.eval(self.eval_dataset, dataset_sink_mode=False)
  19. self.steps_eval["step"].append(cur_step)
  20. self.steps_eval["acc"].append(acc['acc'])
  21. # 在本代码中,每个epoch包含4个steps,下面这一段的意思即是,每经过4个steps(1个epoch),添加对应的loss和accuracy
  22. if cur_step % 3 == 0:
  23. self.epoch_loss["loss_value"].append(str(cb_params.net_outputs))
  24. self.epoch_loss["epoch"].append(str(cur_epoch))
  25. acc = self.model.eval(self.eval_dataset, dataset_sink_mode=False)
  26. self.epoch_eval["epoch"].append(cur_epoch)
  27. self.epoch_eval["acc"].append(acc['acc'])

 定义好回调函数后,获得需要保存的参数(训练损失、测试准确率)之后,开始训练步骤,将回调函数带入train方法里面

  1. steps_loss = {"step": [], "loss_value": []}
  2. steps_eval = {"step": [], "acc": []}
  3. epoch_loss = {"epoch": [], "loss_value": []}
  4. epoch_eval = {"epoch": [], "acc": []}
  5. model = ms.train.Model(net, loss, opt, metrics={'acc', 'loss'})
  6. # collect the steps, epoch, loss and accuracy information
  7. step_loss_acc_info = StepLossAccInfo(model, ds_test, steps_loss, steps_eval, epoch_loss, epoch_eval)
  8. model.train(200, ds_train, callbacks=[LossMonitor(per_print_times=ds_train.get_dataset_size()), step_loss_acc_info], dataset_sink_mode=False)
  9. metrics = model.eval(ds_test)
  10. print(metrics)

可视化出来: 

  1. #损失值随训练每一步(step)的变化曲线
  2. steps = steps_loss["step"]
  3. loss_value = steps_loss["loss_value"]
  4. steps = list(map(int, steps))
  5. loss_value = list(map(float, loss_value))
  6. plt.plot(steps, loss_value)
  7. plt.xlabel("Steps")
  8. plt.ylabel("Loss_value")
  9. plt.title("Change chart of model loss value")
  10. plt.show()
  11. #损失值随训练周期数epoch的变化曲线
  12. epoch = epoch_loss["epoch"]
  13. loss_value = epoch_loss["loss_value"]
  14. epoch = list(map(int, epoch))
  15. loss_value = list(map(float, loss_value))
  16. plt.plot(epoch, loss_value)
  17. plt.xlabel("Epochs")
  18. plt.ylabel("Loss_value")
  19. plt.title("Change chart of model loss value")
  20. plt.show()

云上调试调优

MindSpore模型快速调优攻略-昇腾社区 (hiascend.com)

按照这个步骤来就差不多,先到自己的个人主页获得个人密钥:

 搜索OBS,并且创建OPS桶,可以往里面传入一些数据,预训练的模型等等:

 MindSpore IDE插件,通过插件还能访问MindInight

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/843480
推荐阅读
相关标签
  

闽ICP备14008679号