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

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

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

同样的结果只要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 · 头条号签约

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

    推荐阅读
  • 和丈母娘交谈注意事项(怎么和丈母娘交谈)

    和丈母娘交谈注意事项?以下内容大家不妨参考一二希望能帮到您!和丈母娘交谈注意事项嘴甜:人嘴甜,有礼貌,少说话,讨人喜欢,不掺合事情,尽量少发表自己的意见,除非你有独到的见解,有自己的原则底线。

  • 基围虾和什么一起吃好(基围虾和哪些一起吃好)

    我们一起去了解并探讨一下这个问题吧!基围虾和什么一起吃好丝瓜:基围虾和丝瓜一起食用可以润肺补肾,对肾不太好或肺热的人有良好的帮助,同时可以美容养颜,排毒等功效。

  • 辛弃疾李清照对比(武林高手辛弃疾)

    苏东坡是当仁不让的大文豪,入选“最佳吃货”,似乎有些委屈。历经“杯酒释兵权”、王安石变法后,到“靖康之难”发生,自此,北宋完结。大宋的疆土一直不大,长期受周边少数民族的困扰。一张张大数据表,从各个方面向孩子们讲述大宋的发展。而赵匡胤更害怕自己的权力被分散,通过“杯酒释兵权”收归兵权后更加注重科举考试。宋朝官办学校亦或私学一度超过以前。“最佳吃货”苏轼属豪放派代表,叛经逆道的李清照成了婉约派的代表。

  • 孕妇梦见鳄鱼(怀孕梦见鳄鱼什么意思)

    接下来我们就一起去了解一下吧!孕妇梦见鳄鱼孕妇梦见鳄鱼咬自己:孕妇做梦梦见鳄鱼咬自己,是吉祥的梦,预示着你将会受到贵人相助,在工作上可能会得到提升。孕妇梦见鳄鱼吃人:说明你可能会被人背叛在与敌人的斗争中失败了,因此会损失一些东西。孕妇梦见鳄鱼被自己打死:孕妇如果梦见鳄鱼被自己,预示着将来的生活会更加幸福美满。

  • 儿童节作文(六一儿童节作文范文)

    儿童节作文六月一日是我们儿童们的节日,今年的这一天与以往不同,我们是和一年级的小朋友一起搞活动。活动开始,第一个节目是击鼓传花。这小花在同学们的手中迅速地传递着,简直成一条美丽的红色线条。接着,游戏在继续进行。这一次,我和一年级的那一位小朋友一起看图讲《陌生人》的这一图的故事,并且表演其中的内容。后来,他知道我是陌生人,不但不让我进去,还说要打110电话报警。

  • 英语连词组词大全(英语五感单词词组)

    五感英语单词词组1.Senseoftouch触觉,现在小编就来说说关于英语连词组词大全?下面内容希望能帮助到你,我们来一起看看吧!

  • 芝麻炒之前没洗怎么办(芝麻炒之前没洗的解决办法)

    如果炒制之后发现芝麻中的杂质较多,则需要将芝麻清洗一次。将炒过的芝麻用白纱布包裹起来,用水冲洗2至3遍。之后要将黑芝麻中较大的杂质挑出,放在一旁晾干。切记芝麻一定要晾干,不然保存的时候会导致发霉。炒芝麻时芝麻中杂质较少是可以不用清洗的。芝麻经过高温的处理,芝麻上大部分细菌都已经被消灭。炒芝麻后是否需要清洗,是根据观察芝麻的清洁程度来判断的。如果杂质过多被食用,是对人体是不利的。

  • (立马加速器周年庆)

    曾经有一个Switch摆在我面前,我没有去珍惜,直到我发现立马加速器周年庆,抽取万元豪礼,我才发现,哎呀喂,我不需要追悔莫及!神马Switch、免费年卡、免费终身卡、都不是事,每周抽奖嗨翻全场,让你体验成为锦鲤的快感。作为一款又快又稳,还有点小不正经的加速器。立马除周年庆万元豪礼免费送,还有终身卡限量抢购,充值折上折8月/元特惠。【微信关注太平洋游戏网有意外惊喜等你。。。

  • 曼莎珠华的盆栽养护方法(曼莎珠华简介)

    曼莎珠华的盆栽养护方法土壤:疏松、肥沃、富含腐殖质的土壤。温度:15℃—25℃。一般认为是生长在三途河边的接引之花。传说花香有魔力,能唤起死者生前的记忆。在日本,曼莎珠华的花语是“悲伤回忆”,而在中国,它的花语是“优美纯洁”。

  • 中秋节送客户祝福语(送给客户的祝福语精选)

    中秋节送客户祝福语祝你的事业和生活像那中秋的圆月一样,亮亮堂堂,圆圆满满!以真诚为半径,用尊重为圆心,送您一个中秋圆圆的祝福……中秋佳节到了,衷心的祝愿你,我的朋友:生活开心,学业进步,身体健康。中秋节中秋的喜悦渲染着美丽大地,月亮的柔美感动着灿烂星空。十五月,圆又圆,打制的月饼甜又甜。