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

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

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

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

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

    推荐阅读
  • 空腹吃苹果能伤胃吗(晚上吃苹果会伤胃吗)

    一般来说吃苹果的时间应该选择在晚餐过后的半个小时左右。如果在吃完苹果后有条件的话还可以运动一下,这样可以促进肠胃的消化吸收,可以使苹果中的糖分被更好地利用,这样也会减轻一些肠胃的负担。如果照此做法晚上食用苹果的话,其实是对身体没有什么大碍的。

  • 空降利刃电视剧演员表 空降利刃电视剧演员表大全

    经过一段时间的适应和磨合,“锅盖头”开始了征战南北、挑战四方的魔鬼生涯。历经一系列的战斗演习、行动,“锅盖头”部队的战士再次被分配到各部队,他们成为王牌部队的骨干教员,星星之火已成燎原之势,在坎坷中前行,在磨练中成熟的战士们开始了新的任务。

  • 险资举牌增加频繁(险资野蛮举牌伤害企业家创业精神)

    从万科到南玻,再到伊利和格力,险资所到之处无不一片惊涛骇浪,引起业界的高度关注,甚至连中国建筑这样的巨无霸都难逃毒手。对于险资这种有恃无恐的冒进,保监会副主席对外公开放风,将来有可能会对险资的激进投资进行适当干预。从长远来看,对险资的出格行为进行适当的必要干预,不仅事关投资者保护问题,更事关企业家精神和实业精神保护以及创业环境净化的问题。

  • 坚持稳中求进坚持新发展理念(初心印记⑫木桶理论)

    那次考察后,下决心推动福建与宁夏对口帮扶。亲自为移民村命名“闽宁村”。2019年,全镇人均可支配收入13970元,贫困发生率降为0.197%。2020年6月8日至10日,在宁夏考察。2016年1月和2018年4月,两次主持召开推动长江经济带发展座谈会,强调一定要从整体出发,树立“一盘棋”思想,把自身发展放到协同发展的大局之中。2016年7月,在银川主持召开东西部扶贫协作座谈会。2021年,我国即将开始实施“十四五”规划。

  • 冰箱如何快速除异味(冰箱有异味如何去除异味)

    以下内容希望对你有帮助!冰箱如何快速除异味把新鲜干净的柠檬或橘子皮切成小块放进冰箱,柠檬和橘子的味道会盖过冰箱异味。利用活性炭疏松多孔的结构,可将冰箱里的异味吸收进孔隙里面,达到去除异味的目的。将毛巾放置苏打水中,用浸湿的毛巾擦拭冰箱内部,再打开冰箱门,苏打水的味道得到挥发,异味就会去除。

  • 诗经名句经典语录赏析(诗经精选之风雨)

    既见君子,云胡不瘳?风雨如晦,鸡鸣不已。既已见到君子来,心病怎能治不得?风雨交加天昏暗,鸡儿一直叫不停。“喈喈”、“胶胶”都是鸡叫的声音。“瘳”是病愈的意思。诗人先以风雨交加,鸡声四起的凄惨之景起兴,这种描写很容易勾起读者的离情别绪。然而紧接着,诗人笔锋一转,却描写了女子在凄风苦雨中,与久别的丈夫重逢后的喜悦。以哀景写乐,这种反衬的手法,使得艺术效果大增。#阅读的温度##读书##文化##诗词##古诗词#

  • 蝙蝠侠10大终极形态(蝙蝠侠大战超人蝙蝠侠正面照上线)

    本片的超庞大主演阵容包括「超人」亨利·卡维尔、「露易丝连恩」艾米·亚当斯、「蝙蝠侠」本·阿弗莱克、「神力女超人」盖尔·加朵、「钢骨」雷·费舍尔、超人头号敌人「雷克斯路瑟」杰西·艾森伯格、管家「阿福」杰瑞米·艾恩斯、霍利·亨特、卡兰·马尔韦、日本女星冈本多绪,以及「水行侠」的杰森·莫玛,预计2016年3月25日上映。

  • 美宝莲柔雾粉底液120测评(美宝莲梦幻丝柔呼吸粉底液评测)

    质地点评:这次小编使用的是美宝莲梦幻丝柔呼吸粉底液01号。从测试结果看,美宝莲梦幻丝柔呼吸粉底液的清爽度是相当不错的,吸油纸上毫无油份。美宝莲梦幻丝柔呼吸粉底液乳脂般柔软细腻的质地,给予肌肤柔和匀润的光泽感,轻盈又服帖,滋润又持久,将肌肤定格在最完美的瞬间。

  • 二级响应是什么意思(看完你就明白了)

    符合上述情境之一的,由民政部部长决定进入二级响应状态。灾情发生24小时内,以民政部名义向灾区发慰问电。民政部协调有关部门向灾区派出由民政部部级领导带队的抗灾救灾工作组,慰问灾民,核查灾情,指导抗灾救灾工作。根据灾区省级政府或民政厅(局)与财政厅(局)申请,24小时内制定中央救灾应急救助资金补助方案并商财政部,按照拨款程序及时下拨到灾区。

  • 形容腊月十分寒冷的谚语(盘点形容腊月十分寒冷的谚语)

    形容腊月十分寒冷的谚语腊月二十三糖瓜儿粘;二十四扫房日;二十五糊窗户;二十六炖大肉;二十七杀公鸡;二十八把面发;二十九蒸馒头;三十儿晚上熬一宿;大年初一扭一扭。冬天麦盖三层被,来年枕着馒头睡。大雪半溶加一冰,明年虫害一扫空。伏里西北风,腊月船不通(低温)。十月十五阴,三冬腊月暖盈盈;十月十五睛,三冬腊月冷冰冰。腊里暖,六月旱;腊里寒,六月水。腊月打雷回暖早。头九冷,三春暖洋详。