可微分编程语言Taichi初尝试:在win10环境下从头编译

最近五一放假总算有时间沉淀一下,今天偶然知乎上刷到有MIT胡大神开发了一种可微分式编程语言,觉得这块应用前景非常广阔,故决定尝试从头编译whl安装包并学习一下(注意就是从头编译,而不是什么pip install 之类的,那样就没啥可折腾的了) 由于没连服务器,家里只有一个安了win的笔记本,那么就尝试在win平台编译吧!

一 参考链接

https://zhuanlan.zhihu.com/p/97700605
https://zhuanlan.zhihu.com/p/101398681?from_voters_page=true
可微分编程语言Taichi初尝试:在win10环境下从头编译_第1张图片
具体原理参照上述链接和流程图,taichi实际上是把数据结构和算法给解耦开了,因此可以让计算机图形研究者关注于数据结构本身,繁杂的计算被屏蔽掉,底层求解系统动力学方程采用MLS-MPM方法(Lagrangian particle和Eulerian grid,这里拉格朗日其实是指粒子运动符合拉格朗日经典力学的方程,也就是那个二阶常微分方程,和哈密顿力学可以相互转化,这里突然想能不能仿真出符合薛定谔方程的量子体系CG),且有自己的可微分引擎做优化,速度比tensorflow和torch快得多,大大降低了计算机图形学的门槛。。。具体细节后面慢慢研究

二 编译开始

1.taichi的项目地址:

主要有三个:
(1)repo 1:只实现物质点法的源码,简单编译就可看到效果
https://github.com/yuanming-hu/taichi_mpm

(2)repo 2:taichi编程语言项目地址,这个是核心
https://github.com/taichi-dev/taichi

(3)repo3 :10种可微分物理场景的taichi实现的py代码demo
https://github.com/yuanming-hu/difftaichi

这里是要从头编译出taichi,因此所记录片段基于repo 2

2.编译准备

从项目的issues可以看到 v-0.6.0的taichi已经release了,查看一下依赖环境,看作者说正在从LLVM8转到LLVM10,转化期间会通过宏进行一定兼容。
可微分编程语言Taichi初尝试:在win10环境下从头编译_第2张图片
这里为了求稳定,同时参照appveyor里的命令,我的配置如下:
VS2017 + llvm8.0.1+ clang8.0.1 + python36 + cuda10.0 + opengl
注意1:如果环境为VS2019,那么clang必须要大于9.0.0,否则不兼容
注意2:python需要装好git

(1)LLVM-8.0.1 + 前端clang 8.0.1

项目地址:https://github.com/llvm/llvm-project
直接clone下来,注意选择是8.0.1分支

// llvm 8.0.1 + clang 8.0.1 安装命令
git clone --branch llvmorg-8.0.1 https://github.com/llvm/llvm-project.git
cd llvm && git checkout

然后利用cmake生成vs工程文件

mkdir build && cd build
cmake -DLLVM_ENABLE_PROJECTS=clang -G "Visual Studio 15 2017" -A x64 -Thost=x64  ..\llvm

这里要注意设置 clang随同llvm一起编译,而且 -A和 -Host都要选x64,否则就会比较慢,因为win系统会默认选择host86的。。。

生成完毕后用vs打开llvm.sln,批生成 ->Install Release就行了
(注意默认install位置为 C:\Program Files (x86)\LLVM 因此要以管理员方式启动VS,否则Install时候会出错,当然Build时候不会!!)

编译安装完毕后如下图所示
可微分编程语言Taichi初尝试:在win10环境下从头编译_第3张图片
然后自然要把clang添加到系统环境变量里面,然后打开cmd测试
成功!!
可微分编程语言Taichi初尝试:在win10环境下从头编译_第4张图片
至此llvm + clang准备完毕

(2)克隆taichi源码

git clone --branch v0.6.0 https://github.com/taichi-dev/taichi.git
cd taichi && git checkout

克隆完毕后最好直接把整个project拉入python IDE,这样修改方便些

然后重点来了,\external\glad \external\glfw \external\spdlog都是空的,这个需要先下好,而且通过查看源码,发现glad需要如下配置
可微分编程语言Taichi初尝试:在win10环境下从头编译_第5张图片
地址:
glad:https://glad.dav1d.de/
glfw: https://www.glfw.org/download.html
spdlog:https://github.com/gabime/spdlog

如果不想自己一个一个下,还是参考appveyor里的命令,直接运行
python misc\ci_setup.py 会自动帮你git clone上面三个依赖的源码和后面打包成whl需要的pip包,当然里面的脚本可能需要修改一下,加快速度
比如下面最好加个镜像源加快pip install速度,否则难以忍受。。。。
可微分编程语言Taichi初尝试:在win10环境下从头编译_第6张图片
OK准备完毕

3. 编译

上述的llvm和依赖包处理完毕后,就开始编译吧

cd taichi && mkdir build && cd build
cmake .. -G "Visual Studio 15 2017"-A x64 -Thost=x64  -DPYTHON_EXECUTABLE="你的python.exe路径" -DLLVM_DIR="llvm的cmake-config路径,一般是**\instal\lib\cmake\llvm"

如图为cmake结果
可微分编程语言Taichi初尝试:在win10环境下从头编译_第7张图片

然后vs打开taichi.sln,直接Build Release
注意:如果Build Release那么python下面需要如下修改
在这里插入图片描述
直接build就行了,最后成功了
可微分编程语言Taichi初尝试:在win10环境下从头编译_第8张图片
得到了taichi_core.dll

4. 绑python

这里按照misc\windows_build.py里面样子直接调用下面几个命令
可微分编程语言Taichi初尝试:在win10环境下从头编译_第9张图片

第一个命令将dll变成pyd
第二个命令进行laplace测试
第三个命令进行大量测试((这个最耗时)
第五个命令发布包

执行后结果输出如下
在这里插入图片描述
可微分编程语言Taichi初尝试:在win10环境下从头编译_第10张图片
可微分编程语言Taichi初尝试:在win10环境下从头编译_第11张图片
最后一条命令生成了whl包
可微分编程语言Taichi初尝试:在win10环境下从头编译_第12张图片
可微分编程语言Taichi初尝试:在win10环境下从头编译_第13张图片

5.测试编好的包

直接选取exampls下面的几个例子测试下自己编的包

(1)分形测试可微分编程语言Taichi初尝试:在win10环境下从头编译_第14张图片
(2)生命游戏
可微分编程语言Taichi初尝试:在win10环境下从头编译_第15张图片

(3)物质点法88
可微分编程语言Taichi初尝试:在win10环境下从头编译_第16张图片
(4)物质点法
可微分编程语言Taichi初尝试:在win10环境下从头编译_第17张图片
(5)台球 difftaichi
可微分编程语言Taichi初尝试:在win10环境下从头编译_第18张图片

然后还可以把vs附加到进程里面进行调试,这样就可以更好理解源码。
后面有时间再仔细研究学习下底层的细节

你可能感兴趣的:(杂项)