函擎 发自 凹非寺
量子位 报道 | 公众号 QbitAI

模型吭哧吭哧训练了半天,结果发现张量形状定义错了,这一定没少让你抓狂吧。

那么针对这种情况,是否存在较好的解决方法呢?

这不最近,韩国首尔大学的研究者就开发出了一款“利器”——PyTea

据研究人员介绍,它在训练模型前,能几秒内帮助你静态分析潜在的张量形状错误。

那么PyTea是如何做到的,到底靠不靠谱,让我们一探究竟吧。

PyTea的出场方式

为什么张量形状错误这么重要?

神经网络涉及到一系列的矩阵计算,前面矩阵的列数必需匹配后面矩阵的行数,如果维度不匹配,那后面的运算就都无法运行了。

上图代码就是一个典型的张量形状错误,[B x 120] * [80 x 10]无法进行矩阵运算。

无论是PyTorch,TensorFlow还是Keras在进行神经网络的训练时,大多都遵循图上的流程。

首先定义一系列神经网络层(也就是矩阵),然后合成神经网络模块……

那么为什么需要PyTea呢?

以往我们都是在模型读取大量数据,开始训练,代码运行到错误张量处,才可以发现张量形状定义错误。

由于模型可能十分复杂,训练数据非常庞大,所以发现错误的时间成本会很高,有时候代码放在后台训练,出了问题都不知道……

PyTea就可以有效帮我们避免这个问题,因为它能在运行模型代码之前,就帮我们分析出形状错误。

网友们已经在热烈讨论了。

PyTea是如何运作的,它能否有效地检查出错误呢?

受各种约束条件的影响,代码可能的运行路径有很多,不同的数据会走向不同的路径。

所以PyTea需要静态扫描所有可能的运行路径,跟踪张量变化,推断出每个张量形状精确而保守的范围。

上图就是PyTea的整体架构,一共分为翻译语言收集约束条件求解器判断给出反馈四步。

首先PyTea将原始的Python代码翻译成一种内核语言。PyTea内部表示法(PyTea IR)。

接着PyTea追踪PyTea IR每个可能的执行路径,并收集有关张量形状的约束条件。

判断约束条件是否被满足,分为线上分析离线分析两步:

  • 线上分析 node.js(TypeScript / JavaScript):查找张量形状数值上的不匹配和误用API函数的情况。如果PyTea发现问题,就会停止在当前位置,然后给用户报错。

  • 离线分析 Z3/Python:如果线上分析没有问题,PyTea将收集到的约束条件传给SMT(Satisfiability Modulo Theories)求解器 Z3,求解器负责查看每条路径的约束条件是否都能被满足,如果不能,返回给用户第一条出错路径的约束条件。

如果求解器过久没有反应,PyTea会返回不知道是否存在问题。

然而追踪所有可能的路径是指数级别的任务,对于复杂的神经网络来说,一定会发生路径爆炸这个问题。

比如说在这个例子中,网络的最终结构是由24个相同模块块构成的(第17行),那么可能的路径就有16M之多。

所以路径爆炸是一定要处理的,PyTea是怎么做的?

PyTea选择保守的地对路径剪枝和超时判断来处理这种路径爆炸。

什么样的路径可以被剪枝?

PyTea给出的答案是,如果该前馈函数不改变全局值,并且它的输出值不受分支条件影响,对于每条路径都是相等的,我们就可以忽略许多完全一致的路径,来节约计算资源。

如果路径剪枝还是不行,那么就只能按超时处理了。

原理就介绍这么多了,感觉还是值得一试的,现在代码已经在GitHub上面开源了,快去看看吧!

使用方法

依赖库:

安装方法:

运行命令:

参考链接:
[1]https://github.com/ropas/pytea
[2]https://arxiv.org/abs/2112.09037

秒秒钟揪出张量形状错误,这个工具能防止ML模型训练白忙一场相关推荐

  1. 实践指南 | 用PyTea检测 PyTorch 中的张量形状错误

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨陈萍.泽南 来源丨机器之心 编辑丨极市平台 导读 韩国首尔大学 ...

  2. 揪出MySQL延迟上千秒的元凶

    揪出MySQL延迟上千秒的元凶 背景 Part1:写在最前 MySQL的延迟告警想必大家一定不陌生,MySQL引起从库延迟的原因有很多,从硬件上讲可能是网卡,磁盘,内存达到瓶颈,从数据库层面来讲,可能 ...

  3. 杭州萧山机场使用阿里云ET航空大脑 ,人证安检只用3秒、一月揪出5人

    7月13日,记者从杭州萧山国际机场了解到,目前机场已全面引入阿里云ET航空大脑,25个国内安检通道全部上线人脸识别技术,人脸判断准确率超99.6%,旅客身份甄别速度提升3倍以上.上线一个多月来,已经成 ...

  4. 装mysql最后一步没响应_每天14点遭遇惊魂时刻,如何一步一步揪出真凶?

    " 笔者所在的公司有一款大 DAU(日活)的休闲游戏.这款游戏的后端架构很简单,可以简单理解为通讯-逻辑-存储三层结构.其中存储层大量使用了 Redis 和 MySQL. 图片来自 Pexe ...

  5. oracle如何查看某个时间段调用的函数的异常信息_每天14点遭遇惊魂时刻,如何一步一步揪出真凶?...

    笔者所在的公司有一款大 DAU(日活)的休闲游戏.这款游戏的后端架构很简单,可以简单理解为通讯-逻辑-存储三层结构.其中存储层大量使用了 Redis 和 MySQL. 图片来自 Pexels 随着存量 ...

  6. 揪出“凶手”——实战WinDbg分析电脑蓝屏原因

    http://www.appinn.com/blue-screen-search-code/ 蓝屏代码查询器 – 找出蓝屏的元凶 11 文章标签: windows / 系统 / 蓝屏. 蓝屏代码查询器 ...

  7. MariaDB日志审计 帮你揪出内个干坏事儿的小子

    Part1:谁干的? 做DBA的经常会遇到,一些表被误操作了,被truncate.被delete.甚至被drop.引起这方面的原因大多数都是因为人为+权限问题导致的.一些公共账户,例如ceshi账户, ...

  8. 请检查下面的程序,找出其中的错误并改正,然后上机调试,使之能正常运行,从键盘输入,检查输出

    1.请检查下面的程序,找出其中的错误(先不要上机,在纸面上作人工检查),并改正.然后 上机调试,使之能正常运行.运行时从键盘输入时.分.秒的值,检查输出是否正确 2. 改写 1 中程序,要求: (1) ...

  9. 图解ARP协议(三)ARP防御篇-如何揪出“内鬼”并“优雅的还手”?

    一.ARP防御概述 通过之前的文章,我们已经了解了ARP攻击的危害,黑客采用ARP软件进行扫描并发送欺骗应答,同处一个局域网的普通用户就可能遭受断网攻击.流量被限.账号被窃的危险.由于攻击门槛非常低, ...

最新文章

  1. UVa661 Blowing Fuses
  2. 【机器视觉】 endswitch算子
  3. 思维+multiset ZOJ Monthly, July 2015 - H Twelves Monkeys
  4. Angular rxjs Subject笔记
  5. MySQL学习【第十二篇事务中的锁与隔离级别】
  6. 如何调整反光镜和座椅的位置 为您支招
  7. php网站开发项目实战,PHP动态网站开发项目实战
  8. 生成图片_GitHub Star 3.2K Java 图片缩略图生成库
  9. CentOS图形界面和命令行切换
  10. Linux内核模块自动加载机制 .
  11. Lena.jpg 与图像处理的渊源
  12. 如何实现高性能的在线 PDF 预览
  13. JST日本压着端子XH系列线对板连接器PCB封装库(2.5mm间距)
  14. 川大计算机系1999级高伟,四川大学计算机系主任魏骁勇研发人脸识别无人机课堂点名...
  15. mysql数据库西里尔文乱码_使用Python从MySQL读取西里尔文utf8符号不正确
  16. Sketch 一 -- Sketch快捷键
  17. codeforces19E Fairy
  18. 小车手app安卓版下载_小车手app安卓版下载
  19. 18年华为没有1项原创发明
  20. 谷歌浏览器翻译插件使用不了,替代品 AnyTranslation

热门文章

  1. 为什么indexOf在数组IE8上不起作用?
  2. 离线数据处理与流数据处理的区别
  3. [Winform]检测exe是否已经运行,并将其置顶
  4. excel用vlookup查询的值存在两个相同数值的时候,如何都显示出来?
  5. Linq-ToList与ToArray
  6. TOJ-1036.Rails STL-栈
  7. delphi usb 读写_写作论语 | 崔嵘:写我所读——国外整本书阅读中读写结合的理论与实践(上)...
  8. Xamarin Essentials教程构建共享请求
  9. Xamarin Essentials教程发送邮件Email
  10. 网络数据修改工具netsed