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

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

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

    推荐阅读
  • 用火锅底料做的麻辣拌(火锅底料麻辣拌的做法)

    接下来我们就一起去研究一下吧!用火锅底料做的麻辣拌材料:丸子、时蔬、豆腐、大虾、花椒、八角、葱花、蒜片、青红椒圈、金针菇、菜花。准备一个锅,锅热后加入少许油,把花椒、八角、葱花、蒜片下锅爆香,再加入一块麻辣火锅料搅拌均匀即可。

  • 山南社保查询指南 山南市人力资源和社会保障局官网

    山南本地宝山南社保卡专题为你解答这些问题。

  • 自动挡坡道起步怎么加油门(自动挡坡道起步)

    自动挡汽车相对于手动挡汽车来说,操作简单明了,很多新手司机和女司机都非常喜欢自动挡汽车。但其实上坡起步这样操作并不是最正确的,真正的老司机会采用另一种更合理的方式起步。其实,这样的操作并不能说算错,对于坡度不大的上坡来说,这样起步完全够用了。自动挡车型一般除了D档之外,还有M/S/L档等。这样在遇到不同的情况时才能灵活应对,例如高速上超大车,一定要换到M/S/L档,可以迅速提升车速,缩短超车时间,减少事故隐患。

  • 如何从动作上看猪病 怎么观察猪生病

    看动作健康的猪,不停地摆动着尾巴,可快速灵敏地对外界刺激的反应。健康成年猪的食欲过盛的睡眠。如果你给的食物来满足卧昏睡后翻滚,在陌生人接近的情况下,站在不断抬头摇尾巴。如果你找到一个猪的冷漠,行动迟缓,常常沮丧,拒绝进食,背部僵硬,行走摇晃,下垂的头和尾现象,与猪。

  • 月经不规则会导致子宫息肉吗(月经白带异常不规则出血)

    月经不规则会导致子宫息肉吗子宫内膜息肉其实是女性妇科的常见疾病,主要是因为子宫内膜局部过度增生所致,其表现为突出子宫腔内的单个或多个光滑肿物,蒂长度不一。子宫内膜息肉的主要症状是月经量增多、经期延长或不规则子宫出血、绝经后阴道出血。其次在确诊后,也应该积极治疗,避免息肉过度生长影响患者的身心健康。子宫息肉的病机有内外二因。

  • 帮助您摆脱情绪痛苦的最有效方法(如何从痛苦的情绪中走出来)

    当你不能站在光明的一面时,我将在黑暗中与你同坐。 〜未知我走进去做每月的按摩,立即感觉有些不适。一层苍白的空气像无形的雾气笼罩在空

  • 福州福山郊野公园入口汇总(福州福山郊野公园导览图)

    全线贯通的福山郊野公园共有7个入口:■福康广场1号入口■五凤公园2号入口■保福境3号入口■福榕园4号入口■西岭福田5号入口■义井佳园6号入口■义北路7号入口彩虹步道从哪个入口进去?想走彩虹步道的游客可从入口进入。游客中心在哪里?位于福州软件园89号福康广场1号入口。福山郊野公园导览图

  • 有水杉树的水杉树可以活多久(不打扰不涉足是对)

    据新京报报道,10月9日上午,中国巨树科考队发布了目前“中国第一高树”云南黄果冷杉的准确高度——83.4米,同时发布了巨树等身照。昨天由中国巨树科考队公布的83.4米,比此前无人机测量的高度多了20厘米。此次测量的高度是采用攀爬方式测得,符合国际标准。最新的研究成果表明,中国的高等植物数量已超过37000种。据悉,北美红杉“亥伯龙神”的具体位置始终未对公众发布,原因便是担心游客会破坏大树的周围环境以及树木的生长。

  • 芒种一般吃什么食物(芒种吃什么食物好呢)

    芒种一般吃什么食物推荐扁豆。因此,芒种节气适量食用扁豆,对身体有益。从芒种节气开始,适量食用能消暑解腻,预防各种湿热引起的不适。如果芒种节气吃得过于油腻,容易出现烦躁口渴、咽喉肿痛、痰多等不适,此时食用黄瓜能缓解这些症状。

  • 2022四川达州中小学生安全教育日直播课怎么收看?

    播出平台:1、“四川教育发布”视频号2、“川教观察SCTV”视频号3、“川教之声”视频号4、四川广播电视台科教频道等平台同步播出。播出时间:3月28日20:00推荐阅读:特邀嘉宾大英县郪江外国语学校学生、大英县郪江外国语学校教师、眉山药科职业学院心理健康教育咨询中心教授等等