问题标签 [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.
neural-network - 将 torch.nn.DataParallel 与自定义 CUDA 扩展一起使用
据我了解,内置的 PyTorch 操作都通过隐式矢量化自动处理批处理,允许跨多个 GPU 进行并行处理。
但是,当根据文档在 CUDA 中编写自定义操作时,给出的 LLTM 示例执行批量不变的操作,例如逐元素计算 Sigmoid 函数的梯度。
但是,我有一个不是批处理元素不变且不可矢量化的用例。在单个 GPU 上运行,我目前(效率低下)循环遍历批处理中的每个元素,为每个元素执行内核启动,如下所示(在浏览器中编写,只是为了演示):
但是,我希望通过批处理元素将此操作拆分到多个 GPU 上。
output
在多 GPU 场景中,张量的分配如何工作?
当然,可以在启动适当的内核之前在每个 GPU 上创建中间张量,但是,将输入数据复制到每个 GPU 并再次返回的开销将是有问题的。
有没有一种更简单的方法来启动内核而无需先探测环境以获取 GPU 信息(# GPU 等)?
最终目标是让 CUDA 操作与torch.nn.DataParallel一起使用。
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 GCC
CMAKE_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
文件的步骤。我感谢任何帮助或评论。
谢谢, 阿夫辛
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
。
pytorch - Torch C++:检查 NAN 的 API
我正在使用 libtorch C++。在 python 版本中,我们可以通过调用张量的值来轻松检查张量的numpy
值,在numpy
我们有np.isnan()
. 我想知道是否有内置函数libtorch
C++
来检查张量是否有任何NAN
价值?
谢谢, 阿夫辛
torch - 在 C++ 火炬中设置神经网络初始权重值
我正在寻找一个 API 来在 libtorch 中设置初始权重值。在 python 版本中,(即pytorch
)可以很容易地使用torch.nn.functional.weight.data.fill_(xx)
和torch.nn.functional.bias.data.fill_(xx)
。但是,在 C++ 中似乎还没有这样的 API。对于实现此类功能的任何帮助或评论,我将不胜感激。
谢谢, 阿夫辛
cmake - CMake - 链接我不使用的其他库时未定义的引用
我一直从这里关注 cmake 示例,在链接时遇到了一个奇怪的问题
项目结构:
CMakeLists.txt
:
链接时出现错误:
make VERBOSE=1
完整输出:
https ://pastebin.com/tqrLVjZE
test.cpp
:
请注意,我没有libtorch
在代码中的任何地方使用,我只链接它,并得到链接错误。但是,如果我libtorch
从链接库中删除,问题就会消失。
如果我AudioFile.cpp
直接添加到mainapp
inadd_executable
并去掉audiofile
in ,它也会消失CMakeLists.txt
AudioFile<T>
定义在AudioFile.cpp
- 一个模板类,其中和 in 具有显式double
实例float
化AudioFile.cpp
。它来自这个库。所需的符号似乎出现在objdump -t -C
:
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。因此,如果您不想要这个,请不要安装该软件包。
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,而是返回一个函数:
其中,当我运行时:
然后导致以下错误:
关于我做错了什么的任何想法?
libtorch - 在 libtorch-C++ 中裁剪梯度范数
是否有任何 API 来剪辑网络的梯度?或者,我需要发展自己?
最好的,阿夫辛
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 的易用性。
谢谢, 阿夫辛