微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tensor Comprehensions 将数学符号快速转换为高性能机器学习代码

程序名称:Tensor Comprehensions

授权协议: Apache

操作系统: 跨平台

开发语言: C/C++

Tensor Comprehensions 介绍

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 官网

https://facebookresearch.github.io/TensorComprehensions/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐