Tensor Comprehensions

将数学符号快速转换为高性能机器学习代码
授权协议 Apache
开发语言 C/C++
所属分类 神经网络/人工智能、 机器学习/深度学习
软件类型 开源软件
地区 不详
投 递 者 端木兴国
操作系统 跨平台
开源组织 Facebook
适用人群 未知
 软件概览

Tensor Comprehensions 是 Facebook AI  研究院开源的  C++  库及数学语言,功能齐全,能有效填补研究人员于数学运算领域的沟通鸿沟,并基于各种硬件后端上大规模运行工程模型。

Tensor Comprehensions 采用了 Just-In-Time 的编译自动生成机器学习社区所需的高性能代码,并被设计为高度可移植的。通过 Tensor Comprehensions,研究人员能够以数学符号的方式进行编写,系统能够根据需求进行编译调整,并输出专业的代码。

示例:

  #include <ATen/ATen.h>
  #include "tc/aten/aten_compiler.h"
  #include "tc/core/mapping_options.h"

  // 1. Define and setup the TC compilation unit with CUDA memory management backed by ATen.
  std::string tc = R"TC(
  def TensorDot(float(N, C1, C2, H, W) I0, float(N, C2, C3, H, W) I1) -> (O) {
    O(n, c1, c3, h, w) +=! I0(n, c1, c2, h, w) * I1(n, c2, c3, h, w)
  })TC";

  // 2. Allocate tensors with random data
  at::Tensor I0 = at::CUDA(at::kFloat).rand({32, 512, 8, 28, 28});
  at::Tensor I1 = at::CUDA(at::kFloat).rand({32,   8, 2, 28, 28});
  std::vector<at::Tensor> outputs;

  // 3. Run autotuning with evolutionary search starting from a naive option
  auto options = tc::MappingOptions::makeNaiveMappingOptions();
  auto bestOption = autotune(cacheFilename, tc, "TensorDot", {I0, I1}, options, {options});

  // 4. Compile and run the TC with the best option.
  tc::ATenCompilationUnit atCompl;
  atCompl.define(tc);
  auto handle = atCompl.compile("TensorDot", {I0, I1}, bestOption);
  atCompl.run("TensorDot", {I0, I1}, outputs, handle);

  // 5. Perform precision checks against an ATen reference implementation
  check({I0, I1}, outputs, [&I0, &I1](){ return ...; });
  • 背景 Tensor Comprehensions 是一种可以构建 just in time(JIT)系统的语言,程序员可通过该语言用高级编程语言去高效的实现 GPU 等底层代码。该项目由face book开源发布。 我的理解是我们通过该语言可以更加有效的理解张量、运算图等。虽然tensorflow已经有了tensorboard这样的可视化工具,但是在运算图的理解方面还是有些困难。 语法示例 下面给

  • 初衷 其实, 有时候你会很难受. 因为你有一些想法, 在python端写会很慢, 写成cuda代码又有难度, 还要想着各种优化. 这时候你就不爽了,好不容易想到骚操作, 竟然因为写不来代码, 就泯灭这个想法吗. 这时候, 你可以看看Tensor Comprehesions(TC)这个包. 先吹一波: TC是一个让你不用写高性能代码的包, 它会直接根据简单的语法来生成GPU代码. 如果你还在为一下事

  • def conv(self, input, outchannel, k_size, stride = 1, padding = 0):         LANG = """         def convolution(float(N,C,H,W) I, float(M,C,KH,KW) W1) -> (O) {{             O(n, m, h, w) +=! I(n, c, {s

  • 总说 使用方式: 1. 定义TC语言, 然后传入 tc.define 2. 创建torch tensors(用不用Variable包起来都不影响, pytorch0.4版本都没必要加Variable, 直接tensor即可) 3. 跑这一层就行 import tensor_comprehensions as tc import torch MATMUL_LANG = """ def matmul(

  • 本文列举的框架源码基于PyTorch1.0,交互语句在0.4.1上测试通过 import torch 在PyTorch中,Tensor和tensor都能用于生成新的张量: >>> a=torch.Tensor([1,2]) >>> a tensor([1., 2.]) >>> a=torch.tensor([1,2]) >>> a tensor([1, 2]) 但是这二者的用法有什么区别呢?我

  • 在Pytorch中,Tensor和tensor都用于生成新的张量。 >>> a = torch.Tensor([1, 2]) >>> a tensor([1., 2.]) >>> a=torch.tensor([1,2]) >>> a tensor([1, 2]) 首先我们从根源上来看看torch.Tensor()和torch.tensor()区别。 torch.Tensor torch.T

  • 介绍 在PyTorch 中,torch.Tensor是主要的tensor类,所有的tensor都是torch.Tensor的实例。torch.Tensor是torch.FloatTensor的别名。 而torch.tensor是一个函数,返回的是一个tensor,在PyTorch官方文档中,描述如下: torch.tensor(data, dtype=None, device=None, requ

  • tensor学习 学习 tensorflow数据类型 2,网易课程 网易云课堂 1、tf.constant 创建一个常量 2、tf.range 创建一个序列 1)三参数 tf.rang(开始,结束,步长) 开始<= 范围是 <结束 步长>0,正向,<0负向 2)一参数 tf.rang(结束),例子:rang(5) 【0,1,2,3,4】 3、ndim shape device 分别用于显示数据的:

  • Returns a contiguous tensor containing the same data as self tensor. If self tensor is contiguous, this function returns the self tensor. 普通的张良在内存中都是连续存放的,然而有些张量经过一些处理后(如permute)后就不是连续的了,此时这些张量无法用基于连续

  • 示例文件 test.py import torch cor1 = torch.arange(5).float() cor2 = torch.arange(4).float() print(cor1) print(cor2) X, Y = torch.meshgrid(cor1, cor2) print(X) print(X.permute(0, 1)) print(X.permute(1, 0

  • Tensor类应该是最基本最核心的数据结构了,他表示的是一个操作的输出,但是他并不接收操作输出的值,而是提供了在TensorFlow的Session中计算这些值的方法。 Tensor类主要有两个目的: 1.一个Tensor能够作为一个输入来传递给其他的操作(Operation),由此构造了一个连接不同操作的数据流,使得TensorFLow能够执行一个表示很大,多步骤计算的图。 ​ 2.在图被“投放

  • welcome to my blog tensor.any()功能: 如果张量tensor中存在一个元素为True, 那么返回True; 只有所有元素都是False时才返回False import torch a = torch.tensor([True,True,False]) print(a.any()) # 打印结果 tensor(True) b = torch.tensor([False

  • 主题 记录有关tensor操作的进阶版,有一个初级版,可以在此参考。 后续用到之后进行更新 梯度相关 torch.stack;通常而言我们在拿到一个list of tensors的时候,需要通过将内部tensor进行detach clone cpu numpy等系列操作后才能通过构造函数 torch.tensor 得到一个数据相同的tensor of tensors。但是其中的操作detach 与

 相关资料
  • Shell是Linux下经典的文本互动方式,而Bash是现在最常用的一种Shell。我在这里总结了Bash的要点知识。 Shell综述 Linux图形化桌面算不上精美。幸好,Linux提供了更好的与树莓派互动的方式:Shell。打开终端(Terminal),桌面上就会出现一个黑色背景的窗口,里面就运行着一个Shell。如果你敲击键盘,会发现字符会显示在$提示符的后面,形成一串文本形式的命令。所谓的

  • 如何将日期字段从科学符号转换为freemarker中的数字,然后根据该日期字段的值进行sort_by? 如果我能从Freemarker文档注释中获得一些指针或任何特定的参考,我将很高兴。

  • 问题内容: 我正在尝试让Apple的示例核心ML模型在2017年WWDC上演示以正常运行。我正在使用GoogLeNet尝试对图像进行分类(请参阅Apple机器学习页面)。该模型将CVPixelBuffer作为输入。我有一个用于本演示的名为imageSample.jpg的图像。我的代码如下: 我总是在输出而不是图像分类中遇到意外的运行时错误。我的转换图像的代码如下: 我从以前的帖子中获得了此代码。我

  • 我们录制了一个简短的视频来展示如何开始使用Ansible,当你阅读文档时可以用到它。 快速学习视频 长度大概为30分钟,介绍了刚开始使用Ansible的一些基本知识。 欢迎观看本视频,请确保阅读剩余的文档来进行进一步的学习。

  • 时长70分钟左右,主要在问项目,其他八股挺常规的 八股: transfromers和RNN, LSTM的区别 解释一下梯度爆炸和解决方法 BN和LN的区别 讲讲了解的激活函数 怎么识别 / 解决过拟合问题 XGBoost和随机森林的区别 算法题: 最长公共子串 面完第二天秒挂,可能是笔试做得太烂了

  • 自我介绍 介绍项目 介绍实习,面试官问的内容和ML的关系不太大,可能是和部门的工作比较契合所以就没为难我。 面试官向我介绍部门的工作内容,了解到和我目前实习工作相关性较强。 手撕:比较版本号 反问,因为投的是深圳+北京,所以问了一下base地。

  • 今天下午面了快手的机器学习,部门是做搜广推的,面试官小哥哥介绍了一下部门情况,看到我是做图像的,感觉有点不太匹配,然后问我愿不愿意面试,我当然愿意了 时长:50min 1.自我介绍2分钟 2.介绍一下自己的项目,面试小哥不太懂我的这个项目,这里讲了比较多 3.二分类问题常用的评估指标?其中提到了召回率,出了个场景题说一下怎么计算 4.AUC怎么计算? 5.AUC接近1可能的原因是什么? 6.手撕:

  • 左侧CSV文件有五列列有几个应用程序类型,用