关于 Taichi你最想搞懂的问题都在这了!
时间:2022-10-22 15:42:23 阅读:100
「Taichi有哪些应用场景?」,「Taichi能否在其它平台运行?」,「编程新人如何快速上手Taichi?」等一系列问题,让不少对Taichi有兴趣的人感到好奇。
前不久,我司两位全能高手——资深研究科学家刘天添和技术布道师赵亮,详细聊了聊Taichi的设计,使用方法和应用案例,分享中,正有对这些问题最直接的回答。
以下为精华版文字实录
分为四个部分
Taichi是什么Taichi提供了哪些功能
大家都在用Taichi做什么/新手如何快速入门
使用Taichi仿真7亿个四面体的犰狳
Taichi是什么?
Taichi是一种嵌入在Python中的并行编程语言。通过即时编译的方式将Python编译成高性能的并行机器代码来执行,并且可以让每个Python程序员都可以轻松玩转这些高性能的计算代码,尤其是在数值计算上。
Taichi的前端在设计时保留了和Python非常接近的语法,几乎可以让用户简单地添加一个ti.kernel修饰符就可以无缝地把自己的Python函数变成高效的Taichi Kernel。每个Kernel被Taichi编译器接管即时编译并进行编译器优化,编译完成的Taichi Kernel会选择用户指定的后端转译成可执行的机器代码,被部署到CPU或GPU上运行。
虽然Taichi的前端在Python中,并可以让用户通过pip来直接安装,但是它拥有独立中间表示和编译系统。所以理论上来说,Taichi也可以被镶嵌到不同的前端当中进行调用。没错,Taichi是一种支持多平台运行,代码量少、运行还快的编程语言。
Taichi提供了哪些功能?
早期,大部分的Taichi程序是被用来做仿真的,比如粒子和网格系统,下图这是一个MLS-MPM系统,这个系统拥有1,000万个粒子在屏幕中同时运行。
#自动并行和解耦数据排布和计算
Automatic Parallelization&
Data-oriented Language Design
Taichi程序之所以能被高效运行,除了编译器优化之外,主要是得益于它的两个设计理念:第一是Taichi可以自动并行每个Taichi kernel最外层的for循环,这使得每个Taichi程序可以最大化调用计算硬件的性能;第二则是解耦数据排布和计算,这可以让用户在不修改计算代码的同时,测试不同的数据排布产生的影响,提高内存访问的效率。
#稀疏计算
Sparse Computing
除此之外,Taichi还包含很多更加复杂的功能。比如稀疏计算,在下面这个多物理的仿真系统里面,可以看到有沙子、流体、弹性物体,但这些仿真的粒子并不会占满整个空间。在2D系统中,它们可能只占了屏幕中的一半左右的空间;在3D系统中,它们占用的空间比例会更少。Taichi为此自动提供了稀疏计算,对无用的Grid Space不进行存储和操作,从而降低内存消耗,大幅提升运算效率。
#量化计算
Quantization
什么是量化计算?平时我们用的整型或浮点型通常是固定位数的,比如说16位、32位、64位。但是很多时候,我们需要在程序性能、精确度、内存占用方面做一些权衡,比如用更低的精确度换取更高的分辨率和性能。量化计算就能通过操作基础数据类型的位数,实现上述目标。下面的Stable Fluids仿真,正是经过量化计算,生成了超高分辨率的仿真系统。
#非结构网格的并行
Efficient Computing for Meshes
Taichi还可以被用来进行非结构网格的并行,上面我们看到的所有网格都是结构化的(Grid),而在很多图形学程序中,我们也需要使用非结构的网格,通常我们叫它Mesh。非结构网格会定义诸如节点-节点,边-节点,面-节点的连接关系,通过一种显式的方式去构造网格,而Taichi也可以在这样的网格上进行并行加速。如下图中,我们把一个拥有19万个顶点的弹性小鹿模型随机打乱,并采用隐式积分来完成有限元仿真,最终的结果可以被加速到34 FPS供用户实时交互。
#自动微分
Automatic Differentiation
taichi还有一些有意思的功能,比如自动微分。我们可以使用Taichi的自动微分系统,把仿真器和渲染器的导数传给机器学习框架进行训练。下面这个程序,我们使用Taichi做了一个可微的流体仿真和渲染系统。我们把一个水波的仿真,盖在一张松鼠图片上,结果就能作为对抗网络骗过一个机器学习的框架,让它认为这是一条金鱼(🐟❓🐿)而且可能性高达99.91%。taichi https://taichi-lang.cn/
前不久,我司两位全能高手——资深研究科学家刘天添和技术布道师赵亮,详细聊了聊Taichi的设计,使用方法和应用案例,分享中,正有对这些问题最直接的回答。
以下为精华版文字实录
分为四个部分
Taichi是什么Taichi提供了哪些功能
大家都在用Taichi做什么/新手如何快速入门
使用Taichi仿真7亿个四面体的犰狳
Taichi是什么?
Taichi是一种嵌入在Python中的并行编程语言。通过即时编译的方式将Python编译成高性能的并行机器代码来执行,并且可以让每个Python程序员都可以轻松玩转这些高性能的计算代码,尤其是在数值计算上。
Taichi的前端在设计时保留了和Python非常接近的语法,几乎可以让用户简单地添加一个ti.kernel修饰符就可以无缝地把自己的Python函数变成高效的Taichi Kernel。每个Kernel被Taichi编译器接管即时编译并进行编译器优化,编译完成的Taichi Kernel会选择用户指定的后端转译成可执行的机器代码,被部署到CPU或GPU上运行。
虽然Taichi的前端在Python中,并可以让用户通过pip来直接安装,但是它拥有独立中间表示和编译系统。所以理论上来说,Taichi也可以被镶嵌到不同的前端当中进行调用。没错,Taichi是一种支持多平台运行,代码量少、运行还快的编程语言。
Taichi提供了哪些功能?
早期,大部分的Taichi程序是被用来做仿真的,比如粒子和网格系统,下图这是一个MLS-MPM系统,这个系统拥有1,000万个粒子在屏幕中同时运行。
#自动并行和解耦数据排布和计算
Automatic Parallelization&
Data-oriented Language Design
Taichi程序之所以能被高效运行,除了编译器优化之外,主要是得益于它的两个设计理念:第一是Taichi可以自动并行每个Taichi kernel最外层的for循环,这使得每个Taichi程序可以最大化调用计算硬件的性能;第二则是解耦数据排布和计算,这可以让用户在不修改计算代码的同时,测试不同的数据排布产生的影响,提高内存访问的效率。
#稀疏计算
Sparse Computing
除此之外,Taichi还包含很多更加复杂的功能。比如稀疏计算,在下面这个多物理的仿真系统里面,可以看到有沙子、流体、弹性物体,但这些仿真的粒子并不会占满整个空间。在2D系统中,它们可能只占了屏幕中的一半左右的空间;在3D系统中,它们占用的空间比例会更少。Taichi为此自动提供了稀疏计算,对无用的Grid Space不进行存储和操作,从而降低内存消耗,大幅提升运算效率。
#量化计算
Quantization
什么是量化计算?平时我们用的整型或浮点型通常是固定位数的,比如说16位、32位、64位。但是很多时候,我们需要在程序性能、精确度、内存占用方面做一些权衡,比如用更低的精确度换取更高的分辨率和性能。量化计算就能通过操作基础数据类型的位数,实现上述目标。下面的Stable Fluids仿真,正是经过量化计算,生成了超高分辨率的仿真系统。
#非结构网格的并行
Efficient Computing for Meshes
Taichi还可以被用来进行非结构网格的并行,上面我们看到的所有网格都是结构化的(Grid),而在很多图形学程序中,我们也需要使用非结构的网格,通常我们叫它Mesh。非结构网格会定义诸如节点-节点,边-节点,面-节点的连接关系,通过一种显式的方式去构造网格,而Taichi也可以在这样的网格上进行并行加速。如下图中,我们把一个拥有19万个顶点的弹性小鹿模型随机打乱,并采用隐式积分来完成有限元仿真,最终的结果可以被加速到34 FPS供用户实时交互。
#自动微分
Automatic Differentiation
taichi还有一些有意思的功能,比如自动微分。我们可以使用Taichi的自动微分系统,把仿真器和渲染器的导数传给机器学习框架进行训练。下面这个程序,我们使用Taichi做了一个可微的流体仿真和渲染系统。我们把一个水波的仿真,盖在一张松鼠图片上,结果就能作为对抗网络骗过一个机器学习的框架,让它认为这是一条金鱼(🐟❓🐿)而且可能性高达99.91%。taichi https://taichi-lang.cn/
郑重声明:文章内容来自互联网,纯属作者个人观点,仅供参考,并不代表本站立场 ,版权归原作者所有!
下一篇:测序方法4种早餐伤肝比较厉害
相关推荐