问题标签 [libtorch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
850 浏览

neural-network - 将 torch.nn.DataParallel 与自定义 CUDA 扩展一起使用

据我了解,内置的 PyTorch 操作都通过隐式矢量化自动处理批处理,允许跨多个 GPU 进行并行处理。

但是,当根据文档在 CUDA 中编写自定义操作时,给出的 LLTM 示例执行批量不变的操作,例如逐元素计算 Sigmoid 函数的梯度。

但是,我有一个不是批处理元素不变且不可矢量化的用例。在单个 GPU 上运行,我目前(效率低下)循环遍历批处理中的每个元素,为每个元素执行内核启动,如下所示(在浏览器中编写,只是为了演示):

但是,我希望通过批处理元素将此操作拆分到多个 GPU 上。

output在多 GPU 场景中,张量的分配如何工作?

当然,可以在启动适当的内核之前在每个 GPU 上创建中间张量,但是,将输入数据复制到每个 GPU 并再次返回的开销将是有问题的。

有没有一种更简单的方法来启动内核而无需先探测环境以获取 GPU 信息(# GPU 等)?

最终目标是让 CUDA 操作与torch.nn.DataParallel一起使用。

0 投票
1 回答
588 浏览

c++ - 在 Windows 中通过 Eclipse 使用 CMake 的 LibTorch:终止退出值 390

我使用 cmake4eclipse 在 Windows 10 中构建了稳定的 Torch C++ 1.0 版。基本上,我有以下CMakeLists.txt构建mnist示例:

然后,我将其mnist.cpp与文件夹中的 和 文件一起加载,并在, versiondownload_mnist.py中启动一个项目。在project_properties->C/C++ Build->Tool Chain Editor中,我设置并选择. 然后,在project_properties->C/C++ General->Preprocessor Include Paths Macros etc.->Providers中,我选择并将其向上移动,如此处所述eclipse IDE for C/C++2018-09 (4.9.0)CMake Builder (GNU Make)MinGW GCCCMAKE_EXPORT_COMPILE_COMMANDS Parser [Shared]

然后,我可以编译mnist项目而不会出现任何错误。但是,当我运行它时,得到<terminated> (exit value 390) a.exe [some address]. 我试图调试此代码以找出问题,但我看不到调试屏幕,而是得到:

在此处输入图像描述

将调试模式运行到最后会导致相同的错误。我可以mnist.cpp毫无问题地在 Linux 中运行,尽管我cmake -G "Eclipse CDT4 - Unix Makefiles" ./是用来创建eclipse项目的。我不知道如何cmake -G "Eclipse CDT4 - Unix Makefiles" ./在 Windows 中使用,并且我使用过cmake4eclipse并且我相信我错过了在 Windows 中处理CMakeLists.txt文件的步骤。我感谢任何帮助或评论。

谢谢, 阿夫辛

0 投票
1 回答
9261 浏览

c++ - Torch C++:使用 *.data 获取 int 张量的值()

在 C++ 版本的 Libtorch 中,我发现我可以通过 获取浮点张量的值*tensor_name[0].data<float>(),而不是0我可以使用任何其他有效索引。但是,当我通过在张量创建中int添加选项来定义张量时at::kInt,我无法使用此结构来获取张量的值,即类似*tensor_name[0].data<at::kInt>()or*tensor_name[0].data<int>()不起作用并且调试器一直说Couldn't find method at::Tensor::data<at::kInt>or Couldn't find method at::Tensor::data<int>。我可以通过 获取值auto value_array = tensor_name=accessor<int,1>(),但它更易于使用*tensor_name[0].data<int>()。你能告诉我如何使用data<>()来获取int张量的值吗?

我的类型也有同样的问题bool

0 投票
2 回答
648 浏览

pytorch - Torch C++:检查 NAN 的 API

我正在使用 libtorch C++。在 python 版本中,我们可以通过调用张量的值来轻松检查张量的numpy值,在numpy我们有np.isnan(). 我想知道是否有内置函数libtorch C++来检查张量是否有任何NAN价值?

谢谢, 阿夫辛

0 投票
2 回答
739 浏览

torch - 在 C++ 火炬中设置神经网络初始权重值

我正在寻找一个 API 来在 libtorch 中设置初始权重值。在 python 版本中,(即pytorch)可以很容易地使用torch.nn.functional.weight.data.fill_(xx)torch.nn.functional.bias.data.fill_(xx)。但是,在 C++ 中似乎还没有这样的 API。对于实现此类功能的任何帮助或评论,我将不胜感激。

谢谢, 阿夫辛

0 投票
1 回答
765 浏览

cmake - CMake - 链接我不使用的其他库时未定义的引用

我一直从这里关注 cmake 示例,在链接时遇到了一个奇怪的问题

项目结构:

CMakeLists.txt

链接时出现错误:

make VERBOSE=1完整输出: https ://pastebin.com/tqrLVjZE

test.cpp

请注意,我没有libtorch在代码中的任何地方使用,我只链接它,并得到链接错误。但是,如果我libtorch从链接库中删除,问题就会消失。

如果我AudioFile.cpp直接添加到mainappinadd_executable并去掉audiofilein ,它也会消失CMakeLists.txt

AudioFile<T>定义在AudioFile.cpp- 一个模板类,其中和 in 具有显式double实例floatAudioFile.cpp。它来自这个库。所需的符号似乎出现在objdump -t -C

0 投票
2 回答
330 浏览

c++ - 使用 Rcpp 在 Ubuntu Xenial 上抛出 std::runtime_error 时出现段错误

我对 Rcpp 和 libtorch 有一个非常奇怪的行为。

我有一个具有 2 个功能的文件:

当我打电话时,test_error()我得到一个段错误(g++):

clang++ 错误是:

test_error2按预期工作。

此错误仅在 Ubuntu Xenial 上发生。我用 Ubuntu Trusty 和 MacOS 进行了测试,没有段错误。

如果我test_error2从文件中删除代码,我没有任何错误,即使我没有删除该#include <torch/torch.h>行。

还测试了使用 clang++ 和 g++ 编译。同样的错误。

我在这里用我能做的最小例子创建了一个 smalll repo 。

有谁知道这可能是什么?

注意配置文件将自动从 pytorch 的网站下载并安装 libtorch。因此,如果您不想要这个,请不要安装该软件包。

0 投票
1 回答
1393 浏览

python - pytorch torch.jit.trace 返回函数而不是 torch.jit.ScriptModule

我需要在 C++ 中运行一个预训练的 pytorch nn 模型(在 python 中训练)来进行预测。

为此,我按照此处给出的关于如何在 c++ 中加载 pytorch 模型的说明进行操作:https ://pytorch.org/tutorials/advanced/cpp_export.html

但是,当我尝试按照教程第一步中所述通过跟踪获取 torch.jit.ScriptModule 时:

它不是返回一个 torch.jit.ScriptModule,而是返回一个函数:

其中,当我运行时:

然后导致以下错误:

关于我做错了什么的任何想法?

0 投票
1 回答
167 浏览

libtorch - 在 libtorch-C++ 中裁剪梯度范数

是否有任何 API 来剪辑网络的梯度?或者,我需要发展自己?

最好的,阿夫辛

0 投票
1 回答
159 浏览

c++ - 线性、Conv1d、Conv2d、...、LSTM、

是否有任何类torch::nn::Linear, torch::nn::Conv1d, torch::nn::Conv2d, ... torch::nn::GRU, ....都继承自该类?torch::nn::Module似乎是一个不错的选择,尽管有一个名为 的中产阶级torch::nn::Cloneable,所以这torch::nn::Module不起作用。此外,torch::nn::Cloneable它本身就是一个模板,因此需要在声明中键入。我想创建一个 general class model,它有std::vector<the common class> layers,以便以后我可以填充layers我想要的任何类型的层,例如Linear, LSTM,等。当前的 API 中是否有这样的功能?这可以在 python 中轻松完成,尽管在这里我们需要声明,这阻碍了 python 的易用性。

谢谢, 阿夫辛