pytorch使用nimtorch通过nim对接ATen实现与C++的结合

Song • 461 次浏览 • 0 个回复 • 2018年09月26日

pytorchNim前端,主要用于自动生成并在内部使用ATen(C++11张量运算库,AtenPytorch现在使用的C++拓展专用库,Pytorch的设计者想去重构这个库以去适应caffe2)。

因为Nim编译为C ++,所以这不是包装器wrapper或绑定库。它生成1对1的原生ATen代码。

pytorch的唯一要求是ATen的核心张量库。因此,nimtorch非常通用,可以在任何类型的设备上编译。

一、当前状态

早期

  • Declarations.yaml自动生成完整的ATen API
  • 支持Cuda(在使用nim编译时添加-d:cuda
  • 支持WASM(使用nim编译时添加-d:wasm
  • derivatives.yaml自动生成梯度过程
  • Autograd
  • 添加导数的缺失
  • 更高级别的pytorch API(模块,模型等) ... 最终目标是尽可能与pytorch API兼容。

二、为什么使用这个包

易于使用python语言,同时保持完全裸机的本机C++性能

1、Python代码

# GRUCell
gi = x.matmul(w_input.t()) + b_input
gh = hidden.matmul(w_recur.t()) + b_recur
i_r, i_i, i_n = gi.chunk(3, 1)
h_r, h_i, h_n = gh.chunk(3, 1)
resetgate = (i_r + h_r).sigmoid()
inputgate = torch.sigmoid(i_i + h_i)
newgate = (i_n + resetgate * h_n).tanh()
hy = newgate + inputgate * (hidden - newgate)

2、Nim代码

# GRUCell
let
  gi = x.matmul(w_input.t()) + b_input
  gh = hidden.matmul(w_recur.t()) + b_recur
  (i_r, i_i, i_nn) = gi.chunk(3, 1)
  (h_r, h_i, h_n)  = gh.chunk(3, 1)
  resetgate = (i_r + h_r).sigmoid()
  inputgate = torch.sigmoid(i_i + h_i)
  newgate = (i_nn + resetgate * h_n).tanh()
  hy = newgate + inputgate * (hidden - newgate)

python也是一团糟......

pytorch使用nimtorch通过nim对接ATen实现与C++的结合

三、快速开始

1、方法一

下载ATen二进制文件或构建它

2、方法二

确保您的路径中有最新版本的NimNimble;使用choosenim安装nim参考地址

  • choosenim devel
  • nimble install nimtorch

3、方法三

git clone https://github.com/fragcolor-xyz/nimtorch.git
cd nimtorch
nimble develop

最后

  • 1、设置$ATEN环境变量以指向ATen的文件夹(请参阅下面的说明) -(可选)运行自检nim cpp -r torch.nim

四、ATen构建说明

Windows经过测试可以正常运行,方法与linux类似。

1、简单的方法

构建ATen库,在本例中为本机linux系统(只要核心库是最新的,也可以在其他发行版上工作)

  • 确保您的系统安装了docker
  • cd docker && cd docker-aten-native
  • docker build -t docker_aten_native .
  • docker run --name docker_aten_native-temp -d docker_aten_native /bin/bash
  • docker cp docker_aten_native-temp:/root/pytorch/aten/built/output output
  • docker rm docker_aten_native-temp
  • 检索输出文件夹

2、复杂的方法

检查dockerfiles的内容是否有requirementscmake命令


原创文章,转载请注明 :pytorch使用nimtorch通过nim对接ATen实现与C++的结合 - pytorch中文网
原文出处: https://ptorch.com/news/210.html
问题交流群 :168117787
提交评论
要回复文章请先登录注册
用户评论
  • 没有评论
Pytorch是什么?关于Pytorch! python获取音频(WAV/MP3)的方法汇总