肥宅钓鱼网
当前位置: 首页 钓鱼百科

python工具方法和算法模型(胡渊鸣import一个太极)

时间:2023-07-14 作者: 小编 阅读量: 5 栏目名: 钓鱼百科

同样的结果只要0.363s,快了将近6倍。我们以经典教材《算法导论》中的经典动态规划案例“最长公共子序列问题”为例。反应-扩散方程,效果惊人自然界中,总有一些动物身上长着一些看起来无序但实则并非完全随机的花纹。图灵机的发明者艾伦·图灵是第一个提出模型来描述这种现象的人。拉普拉斯算子数值的计算需要访问相邻网格。而且和只能达到30fps左右的Numba实现比起来,Taichi实现由于可以选择GPU作为后端,轻松超过了300fps。

丰色 发自 凹非寺

量子位 | 公众号 QbitAI

众所周知,Python的简单和易读性是靠牺牲性能为代价的——

尤其是在计算密集的情况下,比如多重for循环。

不过现在,大佬胡渊鸣说了:

只需import 一个叫做“Taichi”的库,就可以把代码速度提升100倍

不信?

来看三个例子。

计算素数的个数,速度x120

第一个例子非常非常简单,求所有小于给定正整数N的素数。

标准答案如下:

我们将上面的代码保存,运行。

当N为100万时,需要2.235s得到结果:

现在,我们开始施魔法。

不用更改任何函数体,import“taichi”库,然后再加两个装饰器:

Bingo!同样的结果只要0.363s,快了将近6倍。

如果N=1000万,则只要0.8s;要知道,不加它可是55s,一下子又快了70倍

不止如此,我们还可以在ti.init()中加个参数变为ti.init(arch=ti.gpu) ,让taich在GPU上进行计算。

那么此时,计算所有小于1000万的素数就只耗时0.45s了,与原来的Python代码相比速度就提高了120倍

厉不厉害?

什么?你觉得这个例子太简单了,说服力不够?我们再来看一个稍微复杂一点的。

动态规划,速度x500

动态规划不用多说,作为一种优化算法,通过动态存储中间计算结果来减少计算时间。

我们以经典教材《算法导论》中的经典动态规划案例“最长公共子序列问题(LCS)”为例。

比如对于序列a = [0, 1, 0, 2, 4, 3, 1, 2, 1]和序列b = [4, 0, 1, 4, 5, 3, 1, 2],它们的LCS就是:

LCS(a, b) = [0, 1, 4, 3, 1, 2]。

用动态规划的思路计算LCS,就是先求解序列a的前i个元素和序列b的前j个元素的最长公共子序列的长度,然后逐步增加i或j的值,重复过程,得到结果。

我们用f[i, j]来指代这个子序列的长度,即LCS((prefix(a, i), prefix(b, j)。其中prefix(a, i) 表示序列a的前i个元素,即a[0], a[1], …, a[i - 1],得到如下递归关系:

完整代码如下:

现在,我们用Taichi来加速:

结果如下:

胡渊鸣电脑上的程序最快做到了0.9秒内完成,而换成用NumPy来实现,则需要476秒,差异达到了超500倍!

最后,我们再来一个不一样的例子。

反应 - 扩散方程,效果惊人

自然界中,总有一些动物身上长着一些看起来无序但实则并非完全随机的花纹。

图灵机的发明者艾伦·图灵是第一个提出模型来描述这种现象的人。

在该模型中,两种化学物质(U和V)来模拟图案的生成。这两者之间的关系类似于猎物和捕食者,它们自行移动并有交互:

  1. 最初,U和V随机分布在一个域上;
  2. 在每个时间步,它们逐渐扩散到邻近空间;
  3. 当U和V相遇时,一部分U被V吞噬。因此,V的浓度增加;
  4. 为了避免U被V根除,我们在每个时间步添加一定百分比 (f) 的U并删除一定百分比 (k) 的V。

上面这个过程被概述为“反应-扩散方程”:

其中有四个关键参数:Du(U的扩散速度),Dv(V的扩散速度),f(feed的缩写,控制U的加入)和k(kill的缩写,控制V的去除)。

如果Taichi中实现这个方程,首先创建网格来表示域,用vec2表示每个网格中U, V的浓度值。

拉普拉斯算子数值的计算需要访问相邻网格。为了避免在同一循环中更新和读取数据,我们应该创建两个形状相同的网格W×H×2。

每次从一个网格访问数据时,我们将更新的数据写入另一个网格,然后切换下一个网格。那么数据结构设计就是这样:

一开始,我们将U在网格中的浓度设置为 1,并将V放置在50个随机选择的位置:

那么实际计算就可以用不到10行代码完成:

@ti.kerneldef compute(phase: int):for i, j in ti.ndrange(W, H):cen = uv[phase, i, j]lapl = uv[phase, i1, j]uv[phase, i, j1]uv[phase, i - 1, j]uv[phase, i, j - 1] - 4.0 * cendu = Du * lapl[0] - cen[0] * cen[1] * cen[1]feed * (1 - cen[0])dv = Dv * lapl[1]cen[0] * cen[1] * cen[1] - (feedkill) * cen[1]val = cen0.5 * tm.vec2(du, dv)uv[1 - phase, i, j] = val

在这里,我们使用整数相位(0或1)来控制我们从哪个网格读取数据。

最后一步就是根据V的浓度对结果进行染色,就可以得到这样一个效果惊人的图案

有趣的是,胡渊鸣介绍,即使V的初始浓度是随机设置的,但每次都可以得到相似的结果。

而且和只能达到30fps左右的Numba实现比起来,Taichi实现由于可以选择GPU作为后端,轻松超过了 300fps。

pip install即可安装

看完上面三个例子,你这下相信了吧?

其实,Taichi就是一个嵌入在Python中的DSL(动态脚本语言),它通过自己的编译器将被 @ti.kernel 装饰的函数编译到各种硬件上,包括CPU和GPU,然后进行高性能计算。

有了它,你无需再羡慕C/CUDA的性能。

正如其名,Taichi就出自太极图形胡渊鸣的团队,现在你只需要用pip install就能安装这个库,并与其他Python库进行交互,包括NumPy、Matplotlib和PyTorch等等。

当然,Taichi用起来和这些库以及其他加速方法有什么差别,胡渊鸣也给出了详细的优缺点对比,感兴趣的朋友可以戳下面的链接详细查看:

https://docs.taichi-lang.org/blog/accelerate-python-code-100x

— 完 —

量子位 QbitAI · 头条号签约

关注我们,第一时间获知前沿科技动态

    推荐阅读
  • 信托产品有收益吗(信托消费者可以通过哪些渠道了解信托产品的信息)

    信托产品有收益吗?下面更多详细答案一起来看看吧!这种方法能够深入地了解产品的风险情况和盈利预期,但信息获取的成本也相对偏高。在实际购买过程中,信托消费者可以根据自己的情况,选择合适的渠道去了解信托产品,为后续的投资决策提供参考。

  • 化妆品禁止添加的成分有哪些(仟佰草等知名化妆品非法添加禁用物质)

    国家食药监总局指出,汞可通过皮肤吸收,并蓄积在体内,长期使用含汞化妆品会引发慢性中毒,损害人体肾脏等器官。问题产品下架召回,企业停止生产针对上述问题产品,广东省、上海市、黑龙江省食品药品监管局正在对上述标称生产企业违法行为进行调查。国家食药监总局要求各地商业企业应立即停销问题产品,就地下架封存上述60批次不合格产品,并将有关情况报告当地县级以上食品药品监管部门。

  • 曹刿论战译文(曹刿论战翻译)

    曹刿论战译文鲁庄公十年的春天,齐国军队攻打我们鲁国。鲁庄公和曹刿同坐一辆战车,在长勺和齐军作战。鲁庄公将要下令击鼓进军。鲁庄公又要下令驾车马追逐齐军。打了胜仗后,鲁庄公问他取胜的原因。

  • 沃柑的作用(吃沃柑的好处是什么)

    沃柑的作用保健身体,沃柑中富含大量的维生素、膳食纤维、葡萄糖、果糖和钙、铁、磷等多种无机盐机器它营养物质,经常吃具有健身益体促进生长发育的功效,加快人体内免疫细胞再生,可以增强人体自身的抗病能力,还能促进大脑发育,保护眼睛。促进消化,膳食纤维和果胶也是沃柑中的重要营养物质,能够促进肠胃蠕动,清除人体内堆积的毒素和垃圾,加快人体代谢,有促进通便的功效,还有清胃热、生津止渴消食顺气的作用。

  • 适合女生学的专业且就业前景好(女生学习这些专业)

    随着社会的进步和时代的发展,人们的意识得到了解放,女性早已成为职场中不可或缺的存在。女生的性格更加的温和,更容易和学生亲近,在当今的教师队伍当中,女教师的比重也远远高于男教师。中国语言文学专业随着我国国际地位的提升,国民的民族文化自信感也得到大幅度的提升,和外语的学习相比,学生和家长也越发的重视对汉语的研究和学习,这是一个很好的现象。

  • 我为卿狂的主演都有谁(我为卿狂的主演都有哪些)

    我为卿狂的主演都有谁《我为卿狂》是由何藩执导,叶玉卿、村上丽奈、郭秀云、曹查理等主演的香港三级电影,该片于1991年8月12日上映中国香港。影片主要讲述发生在办公室的混乱恋情。婷婷办事极为能干,人又美丽大方,大维与婷婷通过工作互相了解,渐生情愫。与此同时,大维又邂逅祖儿,祖儿是个卖车经纪,性感热情,她是一个情欲女神,为大维提供一个感官世界,令大维俯首称臣,大维一时迷失在祖儿的欲焰之中而不可自拔。

  • 菊花能吃吗(菊花能不能吃呢)

    接下来我们就一起去了解一下吧!可以制作成菊花粥、菊花羹和菊花酒,还可制作成菊花饮和菊花糕点,比较清新爽口,而且有独特的风味。日常在烹饪肉制品的时候,也可适当的加入一些菊花,能够起到具有解腻和清新爽口的作用。干燥的秋冬季节容易出现咽喉肿痛的情况,适当的喝一些菊花茶,能够帮助治疗风热上亢和头晕目眩。还有疏风平肝的功效。

  • 新年唯美祝福语 新年唯美祝福语简短10个字

    短信一条,问友平安,天气转寒,加衣保暖,合理膳食,记在心间。

  • 地球史上最大的生物排名(地球上最水火不容的生物)

    最水火不容的动物天敌,是指在自然界中天然存在的仇敌。而恐龙最终以鸟类的形式保留了下来,成为了新的物种。鸟类中也有很大一部分的种族被称为猛禽。猛禽包括鹰、雕、、鸢、鹫、鹞、鹗、隼、鸮、鸺鹠等次级生态类群,均为掠食性鸟类。在那时候,就算是恐龙这样的动物作为食物链的顶层动物,食物链中也有猫头鹰的一席之地。这样的猛禽类动物,不在于谁更加厉害,而是拥有更高的体型就会有更强大的战斗力。

  • 微博哪些词被屏蔽(微博昵称含低俗或侮辱性词汇的限时整改)

    下面希望有你要的答案,我们一起来看看吧!微博哪些词被屏蔽为深化落实网络文明建设相关要求,持续推进“清朗”行动,优化社区氛围环境。依据《微博社区公约》相关规定,站方要求昵称中带有明显低俗或侮辱性词汇组合的,即日起限时一周内更改昵称,截止日期为12月8日。未按要求更改的账号,将予以删除昵称及阶段性禁言处罚。