python - 哪些 python 深度学习库在运行时编译?
问题描述
我正试图围绕python中的C优化代码。我已经读过几次了,python 通过 C 扩展实现了高速计算。换句话说,每当我使用诸如 numpy 之类的库时,它基本上都会调用一个 C 扩展来计算结果并返回它。
使用 numpy 的 C 扩展
假设我想使用添加两个数字np.add(x,y)
。如果我理解正确,像 numpy 这样的库不会编译 python 代码,而是已经附带了可执行文件,这些可执行文件将简单地获取值 x 和 y 并返回结果。那是对的吗?
Theano、Tensorflow 和 PyTorch
特别是,我想知道这是否也适用于深度学习库。根据 Theano 的官方文档,它需要 g++ 和 gcc(至少强烈推荐它们)。这是否意味着 Theano 将在 Python 脚本运行时编译 C(或 C++)代码?如果是这样,PyTorch 和 Tensorflow 是否一样?
我希望有人能在这里解决我的困惑!非常感谢!
解决方案
python中的C扩展
numpy
大量使用 C 扩展。例如,您可以在此处 [2] 查看 sort() 函数 [1] 的 C 实现。
[1] https://docs.scipy.org/doc/numpy/reference/generated/numpy.sort.html
[2] https://github.com/numpy/numpy/blob/master/numpy/core/src/npysort/quicksort.c.src
深度学习库
深度学习库在其后端的很大一部分以及 CUDA 和 CUDNN 中使用 C 扩展。代码可以在运行时编译:
[3] http://deeplearning.net/software/theano/extending/pipeline.html#compilation-of-the-computation-graph
[4] https://www.tensorflow.org/xla/jit
[5] https://pytorch.org/blog/the-road-to-1_0/#production--pain-for-researchers
为了回答您的问题,theano
将在 python 脚本的运行时编译 C/C++ 代码。运行时的图形编译时间非常慢theano
:我建议您专注于pytorch
或tensorflow
而不是theano
。
如果您是深度学习的新手,您也可以快速浏览一下 [6]。
推荐阅读
- angular - 为什么我的 ngrx 操作会导致无限循环?
- python - 创建具有不同类型的嵌套列表的快速方法:numpy、pandas 或列表连接?
- sql - 如何拆分字符串并将每个值作为记录插入数据库中?
- python - 使用python将行转换为列表
- java - 使用 Easymock 进行案例测试
- powershell - Powershell 的 -split 行为因方法参数而异
- c++ - 从 'TreeNode' 到 'TreeNode* ' 没有可行的转换
- solr - 当查询词混乱时,Solr 搜索结果会发生变化
- reactjs - 我们如何传入模板文字
- java - 如何通过 Jackson 将 BigDecimals 中的零部分与 Json 中的零部分保持一致