专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

TVM学习资料TensorIR快速入门

  本篇文章译自英文文档BlitzCoursetoTensorI作者是冯思远。更多TVM中文文档可访问TVM中文站https:hyper。ai
  TensorIR是深度学习领域的特定语言,主要有两个作用:在各种硬件后端转换和优化程序。自动tensorized程序优化的抽象。importtvmfromtvm。ir。moduleimportIRModulefromtvm。scriptimporttirasTimportnumpyasnpIRModule
  IRModule是TVM的核心数据结构,它包含深度学习程序,并且是IR转换和模型构建的基础。
  编辑切换为居中
  添加图片注释,不超过140字(可选)
  上图展示的是IRModule的生命周期,它可由TVMScript创建。转换IRModule的两种主要方法是TensorIR的schedule原语转换和pass转换。此外,也可直接对IRModule进行一系列转换。注意,可以在任何阶段将IRModule打印到TVMScript。完成所有转换和优化后,可将IRModule构建为可运行模块,从而部署在目标设备上。
  基于TensorIR和IRModule的设计,可创建一种新的编程方法:基于PythonAST语法,用TVMScript编写程序。使用PythonAPI转换和优化程序。使用命令式转换API交互检查和提高性能。创建IRModule
  IRModule是TVMIR的一种可往返语法,可通过编写TVMScript来创建。
  与通过张量表达式创建计算表达式(使用张量表达式操作算子)不同,TensorIR允许用户通过TVMScript(一种嵌在PythonAST中的语言)进行编程。新方法可以编写复杂的程序并进一步调度和优化。
  下面是向量加法的示例:tvm。script。irmoduleclassMyModule:T。primfuncdefmain(a:T。handle,b:T。handle):我们通过T。handle进行数据交换,类似于内存指针T。funcattr({globalsymbol:main,tir。noalias:True})通过handle创建BufferAT。matchbuffer(a,(8,),dtypefloat32)BT。matchbuffer(b,(8,),dtypefloat32)foriinrange(8):block是针对计算的抽象withT。block(B):定义一个空间(可并行)block迭代器,并且将它的值绑定成iviT。axis。spatial(8,i)B〔vi〕A〔vi〕1。0irmoduleMyModuleprint(type(irmodule))print(irmodule。script())
  输出结果:classtvm。ir。module。IRModulefromtvm。scriptimporttirasTtvm。script。irmoduleclassModule:T。primfuncdefmain(A:T。Buffer〔8,float32〕,B:T。Buffer〔8,float32〕)None:functionattrdictT。funcattr({globalsymbol:main,tir。noalias:True})bodywithT。block(root)foriinT。serial(8):withT。block(B):viT。axis。spatial(8,i)T。reads(A〔vi〕)T。writes(B〔vi〕)B〔vi〕A〔vi〕T。float32(1)
  此外,我们还可以使用张量表达式DSL编写简单的运算符,并将它们转换为IRModule。fromtvmimportteAte。placeholder((8,),dtypefloat32,nameA)Bte。compute((8,),lambdai:A(i)1。0,nameB)functe。createprimfunc(〔A,B〕)irmodulefromteIRModule({main:func})print(irmodulefromte。script())
  输出结果:fromtvm。scriptimporttirasTtvm。script。irmoduleclassModule:T。primfuncdefmain(A:T。Buffer〔8,float32〕,B:T。Buffer〔8,float32〕)None:functionattrdictT。funcattr({globalsymbol:main,tir。noalias:True})bodywithT。block(root)fori0inT。serial(8):withT。block(B):i01T。axis。spatial(8,i0)T。reads(A〔i01〕)T。writes(B〔i01〕)B〔i01〕A〔i01〕T。float32(1)构建并运行IRModule
  可将IRModule构建为特定target后端的可运行模块。modtvm。build(irmodule,targetllvm)CPU后端的模块print(type(mod))
  输出结果:classtvm。driver。buildmodule。OperatorModule
  准备输入数组和输出数组,然后运行模块:atvm。nd。array(np。arange(8)。astype(float32))btvm。nd。array(np。zeros((8,))。astype(float32))mod(a,b)print(a)print(b)
  输出结果:〔0。1。2。3。4。5。6。7。〕〔1。2。3。4。5。6。7。8。〕转换IRModule
  IRModule是程序优化的核心数据结构,可通过Schedule进行转换。schedule包含多个primitive方法来交互地转换程序。每个primitive都以特定方式对程序进行转换,从而优化性能。
  上图是优化张量程序的典型工作流程。首先,用TVMScript或张量表达式创建一个初始IRModule,然后在这个初始IRModule上创建schedule。接下来,使用一系列调度原语来提高性能。最后,我们可以将其降低并构建成一个可运行模块。
  上面只演示了一个简单的转换。首先,在输入irmodule上创建schedule:schtvm。tir。Schedule(irmodule)print(type(sch))
  输出结果:classtvm。tir。schedule。schedule。Schedule
  将嵌套循环展开成3个循环,并打印结果:通过名字获取blockblockbsch。getblock(B)获取包围block的循环(i,)sch。getloops(blockb)展开嵌套循环i0,i1,i2sch。split(i,factors〔2,2,2〕)print(sch。mod。script())
  输出结果:fromtvm。scriptimporttirasTtvm。script。irmoduleclassModule:T。primfuncdefmain(A:T。Buffer〔8,float32〕,B:T。Buffer〔8,float32〕)None:functionattrdictT。funcattr({globalsymbol:main,tir。noalias:True})bodywithT。block(root)fori0,i1,i2inT。grid(2,2,2):withT。block(B):viT。axis。spatial(8,i04i12i2)T。reads(A〔vi〕)T。writes(B〔vi〕)B〔vi〕A〔vi〕T。float32(1)
  还可对循环重新排序。例如,将循环i2移到i1之外:sch。reorder(i0,i2,i1)print(sch。mod。script())
  输出结果fromtvm。scriptimporttirasTtvm。script。irmoduleclassModule:T。primfuncdefmain(A:T。Buffer〔8,float32〕,B:T。Buffer〔8,float32〕)None:functionattrdictT。funcattr({globalsymbol:main,tir。noalias:True})bodywithT。block(root)fori0,i2,i1inT。grid(2,2,2):withT。block(B):viT。axis。spatial(8,i04i12i2)T。reads(A〔vi〕)T。writes(B〔vi〕)B〔vi〕A〔vi〕T。float32(1)转换为GPU程序
  要在GPU上部署模型必须进行线程绑定。幸运的是,也可以用原语来增量转换。sch。bind(i0,blockIdx。x)sch。bind(i2,threadIdx。x)print(sch。mod。script())
  输出结果:fromtvm。scriptimporttirasTtvm。script。irmoduleclassModule:T。primfuncdefmain(A:T。Buffer〔8,float32〕,B:T。Buffer〔8,float32〕)None:functionattrdictT。funcattr({globalsymbol:main,tir。noalias:True})bodywithT。block(root)fori0inT。threadbinding(2,threadblockIdx。x):fori2inT。threadbinding(2,threadthreadIdx。x):fori1inT。serial(2):withT。block(B):viT。axis。spatial(8,i04i12i2)T。reads(A〔vi〕)T。writes(B〔vi〕)B〔vi〕A〔vi〕T。float32(1)
  绑定线程后,用cuda后端来构建IRModule:ctxtvm。cuda(0)cudamodtvm。build(sch。mod,targetcuda)cudaatvm。nd。array(np。arange(8)。astype(float32),ctx)cudabtvm。nd。array(np。zeros((8,))。astype(float32),ctx)cudamod(cudaa,cudab)print(cudaa)print(cudab)
  输出结果:〔0。1。2。3。4。5。6。7。〕〔1。2。3。4。5。6。7。8。〕
  下载Python源代码:tensorirblitzcourse。py
  下载JupyterNotebook:tensorirblitzcourse。ipynb
  以上就是该文档的全部内容,查看更多TVM中文文档,请访问

中国足球和日本比赛结束,日本媒体说中国队出线率为零,可能吗?他们说比预想要差,国际网站说0。28,事实上和0差不多,我们已经被淘汰,剩下的就是为了面子我们应该承认这都是懂球的人,看似没有输澳大利亚那么多,事实上这就猫戏鼠的比赛,森保一就要赢如果联想一直坚持百分之百国有控股!今天的联想会什么样?我想说的是,联想的决策层没有用心去做好联想,像任正非这样的国宝级企业家真的少之又少啊!地产企业都是投机取巧的主,马某都是玩一劳永逸玩垄断做最大的中间商,放高利贷了,就连联想这样的企公司提前解除劳动合同该怎么补偿员工?劳动合同签订了3年,实际工作1年零8个月,基本工资3500元,平均工资5900元,现在公司想解除劳动合同,并表示可以给一定的经济补偿,那么这个补偿究竟要怎么算呢?这个要从协商解除或我今年五十了,社保才交了六年多,能补交吗?不能补缴,如果是中间断缴可以补缴,往前往后都不能补缴。今年50岁,社保交了6年,按照退休的规定,男性要达到60岁,女性达到50或55岁,社保缴费达到15年以上,才能办理退休。如果你什么家庭选择加价去买雷克萨斯,是真心喜欢还是被洗脑了?买雷克萨斯的人都是喜欢雷克萨斯的人,本人就挺喜欢,只是觉得尺寸有点大,所以买了其他车。那些说洗脑的人,思维是不是不通电了,谁给我3040万来给我洗洗脑?我家是被洗脑了才去买的。辛辛日产的楼兰值得购买吗?打算买个20万左右的SUV,刚开始的时候是比较中意丰田荣放的,外观感觉很硬派,丰田车的口碑也是顶呱呱。但看到价格之后,感觉丰田现在确实有点飘了,溢价比大众还要严重。于是就退而求次考居住在楼房,如何存放白酒?说起藏酒必然要选择一款优质的纯粮酒,众所周知酱香型白酒就是纯粮酿造以酒勾酒的独特工艺。酱香酒贮藏时间越长越香是因为酒中醇类会和有机酸起化学反应,产生多种酯类物质,然而酯类物质就是酱准备带一人摩旅,江苏到拉萨然后入新疆,有哪些合资或大贸车推荐?预算十万的话可以看下本田的NC750S,如图。这款车是一款主打长途摩旅的车型,分为两个版本,分别是DCT版本(双离合器版本),价格为115000元,MT版本(常规脚动换挡版本),价有人说突然戒烟会致癌,你觉得这有科学依据吗?为什么?顿断法戒烟,会有比较严重的戒断综合征,但致癌并无科学依据。突然戒烟会致癌这种传闻,大多来自这样的生活现象。一部分老烟民,在患上肺癌但尚未去医院检查前,就会因为肺部的某些不适,而主动大学生想到孵化器创业,会有优势吗?作为一名IT行业的从业者,同时也是一名教育工作者,我来回答一下这个问题。首先,对于大学生创业者来说,选择一个孵化器对于自身的创业还是有一定辅助作用的,一方面孵化器会有各种扶持创业者盐城幼儿师范高等专科学校怎么样?盐城幼儿师范高等专科学校怎么样?盐城幼儿师范高等专科学校坐落于江苏省盐城市亭湖区,学校分为南北两个校区,是经省政府批准教育部备案的全日制公办普通高等学校。2016年1月7日,江苏省
浙江村民盖房挖出南宋棺材,专家紧急打开,发现国家级文物这名男子像往常一样,悠然自得的躺在床上刷着手机,一个考古视频推送到了他的手机。当他看到墓主人名字的时候,嘴上不停念叨着这个名字很眼熟,而后打了个冷颤,这不就是自己家的祖坟嘛!男子慌赵丽蓉人生婚姻沧桑有泪,逝世22年后她的3个儿子现状如何?头条创作挑战赛点击关注,每天都有名人故事感动您!赵丽蓉赵丽蓉是德艺双馨的著名评剧小品影视表演艺术家,她主演的评剧电影花为媒杨三姐告状堪称经典。她还主演了田野又是青纱帐红楼梦西游记孝8对丁克的港星夫妻各有各的原因,有2位背着老婆有了孩子随着人们思想观念的改变,越来越多的人选择丁克,尤其是很多香港的明星夫妻,虽然他们有着别人无法拥有的名和利,但是很多却都选择了丁克,一生都没有生育。梁朝伟刘嘉玲作为一代影帝影后,梁朝组织1万家企业出国抢单?浙江直接把别的城市干懵了过去三年,相信很多人都憋着一口气,也有很多人倒在了黎明前的黑暗里。而现在,松动的风气一吹,已经有城市开始抢跑,已经有人开始抢跑!近期,浙江传来消息,省商务厅等相关部门将组织超100人生就是一场不断学习的旅程丨给孩子的一封信图来源网络如需转载请后台留言亲爱的宝贝,抱歉,今年忙于各种工作事务,给你的这封信有点晚了,不过还算赶上了年底前能把它写完。今年由于疫情封控的缘故,你一半的学习时间只能在线上完成,而当年轻人开始精神离职,踩点上下班无视老板责骂为简历打工大家好,这里是每日人物的新栏目每日新语。在这个时代,新词层出不穷。一个当下走红的新词,或许没有机会收录进入正式词典,但它们是值得记录的。因为每一个广泛流传的新词,都是时代和社会在某昆仑万维正式发布AIGC全系列算法与模型12月15日,昆仑万维在北京举行AIGC技术发布会,会上昆仑万维CEO方汉正式发布了昆仑天工AIGC全系列算法与模型,并宣布模型开源。昆仑天工旗下模型包括天工巧绘SkyPaint天韩媒关注从太空站到月球,中国发力太空水稻的原因来源环球时报韩国韩民族新闻12月14日文章,原题从太空站到月球,中国发力太空水稻的原因10月底,在中国中南部湖北省武汉市的科研示范基地,太空稻在试验田中收获。这些水稻种子于去年6月世间难免憾事,多少意难平头条创作挑战赛万事如意,心想事成,是人们从小听到大的祝福之语。然而人世间,多的是美好的心愿,多的是满心的热爱,却亦总是无法摆脱命运的无常,造化的弄人。谁的人生,能一直顺风顺水,而从白忙一场!湖人加时惜败绿军,詹姆斯空砍准三双,浓眉又掉链子2022生机大会NBA常规赛黄绿大战,湖人118122加时惜败绿军,紫金军团白忙一场,詹姆斯空砍准三双,浓眉又掉链子。比赛伊始,绿军反客为主率先发力很快取得两位数领先,湖人不断冲击我们前往山西,找寻华夏文明的源头孙绿某年春季,我与数位友人发起了一场华夏文明寻根之旅。中华文明早期是由众多地域文化相互融合而成,而在这众多地域中,河洛地区与汾河河谷占据着重要地位。我们这趟旅程的目的正在于考察与体
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网