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

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 · 头条号签约

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

    推荐阅读
  • 值得入手的8款男士包(好看又值得入手的男盆友手提包)

    经典包形搭配趣味元素,让老牌变年轻,同时也更受年轻人的喜欢。编织款式的公文包款式很适合上班族,包形也非常的复古。而下面这两款黑白配色的包包非常值得推荐,皮革优质,包形正,没有那么街头也不会过于成熟,简约大方,非常值得入手。最后给大家的一点建议是,手提包并不是越大越好,尤其对小个子男士而言,包形一定要选好,像那种向下过长的款式是一定要避免的,一定要根据自己的身高选择合适的大小。

  • 十道让人百吃不腻的家常菜(教你10道有着绝世好味道的家常菜)

    藕皮包裹双管齐下锁住藕的脆爽口感。增加卤藕的甘甜口感。汤汁要略咸于自己习惯的咸度;中途可以将锅中的辣椒段捞出,用捣臼捣出红油来满足自己喜辣的口感,将捣出的红油再倒入锅中继续煮。

  • 如何选购笔记本(选购笔记本的方法)

    前者为英伟达公司设计,后者为AMD公司设计。电脑处理数据中枢机构。分为两类IU和AU.前者为英特尔公司生产,后者为AMD。总体而言英特尔处理器好于AMD。最新IU分为i3i5i7,后者为A4A6A8A10。单论处理器性能,标压i5性能基本完胜AU最好的A10了。后者自带的核显性能较好。英特尔为了降功耗推出的,判断即是型号末尾带U而非M,低压版本处理器性能稍弱,大部分为双核。

  • 三国杀斗地主输出技巧(斗地主地狱级难度农民组合)

    马钧栓狗马钧自上线以来就是超一流辅助将,完全对得起史诗的名号。三号位的张绣,如果二号位队友是个补牌将,杀伤力是非常惊人的。马良和马钧一样,起到为张绣补牌的作用,但马良与马钧相比,虽然缺少自保手段,但如果队友先手被地主秒掉进入单挑马良依然很有战斗力。且马良的平民价格让他在低分局斗地主中出现比马钧更加频繁。神甘宁众人皆知神甘宁地主的强度,但神甘宁即使做农民,强度也是一流的。

  • 关于文化重要性的名言名句(关于文化的经典名言)

    文化不能从上向下压,因为它应该是从下面高涨起来的——里德,今天小编就来说说关于关于文化重要性的名言名句?——里德文化的进步乃是历史的规律。——马大·安诺德文化开启了对美的感知。——爱默生文化是,或者说应该是,对完美的研究和追求;而文化所追求的完美以美与智为主要品质。有如语言之于批评家,望远镜之于天文学家,文化就是指一切给精神以力量的东西。——黑塞智慧是知识凝结的宝石,文化是智慧放出的异彩。

  • 奇瑞新能源5座电动车(奇瑞推出旗下低速电动车品牌)

    3月16日,奇瑞商用车旗下的低速电动车品牌瑞特思电动汽车及Q2车型上市发布会在2018第十二届山东国际电动车新能源汽车展览会举行,其中瑞特思Q2指导价3.18万起,瑞特思Q1市场指导价2.98万起。对于奇瑞为何设立瑞特思电动汽车品牌,刘开军表示,原因之一是为了满足市场的刚性需求,二是在低速电动车国标出台前期进行布局,为未来全面向市场发力进行储备。

  • dnf90级装备可以刻印吗(有什么条件吗)

    dnf90级装备可以刻印吗?我们一起去了解并探讨一下这个问题吧!dnf90级装备可以刻印吗可以的,装备刻印是一个打造转移的系统,可以将防具的一切打造继承给超界装备,当然这个功能仅限于同种防具使用,同时需要消耗原防具以及一些材料。全部同步到这件新装备上了,当然老装备消失。

  • 青椒怎么保存不会烂(青椒保存小技巧)

    青椒怎么保存不会烂?以下内容大家不妨参考一二希望能帮到您!青椒怎么保存不会烂方法一:首先我们准备一个塑料袋,把辣椒放进去封上口,把里面的空气放出来,再准备一根牙签在塑料袋上扎一些小孔,让它可以进行呼吸作用,之后把它放在水盆里面,然后再放到阴凉通风处,如果袋子里有水珠的话,记得每周打开袋子通风一次,就可以了。这样保存一个多星期左右都很新鲜,也不会坏掉。

  • 如何尽量避免鱼缸养鱼死亡(如何尽量避免鱼缸养鱼死亡)

    养鱼之前要考虑好要养什么鱼,选择什么样的鱼缸,饲养前要注意哪些问题。所以在家庭养鱼的中,鱼缸的选择就是一个较为关键的问题。在饲料的选择上也要注意,不同鱼的品种,食性都是不一样的,比如金鱼和孔雀鱼都是杂食性鱼类,对食物的要求就不是很大。另外要注意的就是喂食频率不用过高,量也不要太大。

  • 14岁学生七天速成腹肌(14岁学生七天速成腹肌 13岁)

    尽量抬高躯干,并且加快频率。对上腹、中间核心起到锻炼。次数:每侧各60次。增加频率;或者每次完成动作在打开处停留2秒。对中腹起到锻炼。