问题标签 [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 投票
1 回答
94 浏览

c++ - 如何从 libtorch 输出中删除乘数并显示最终结果?

当我尝试在屏幕上显示/打印一些张量时,我面临类似以下的情况,而不是获得最终结果,似乎 libtorch 显示带有乘数的张量(即0.01*,如下所示):

如何禁用此行为并获得最终输出?我试图将其显式转换为浮点数,希望这将导致最终输出被存储/显示,但这也不起作用。

0 投票
0 回答
80 浏览

c++ - 如何在 libtorch 中使用 torch::get_hash?

到目前为止,我一直在尝试获取 libtorch 中几个模块的哈希值,但无济于事。在 libtorch 中有几个与散列相关的函数,例如 :get_hashsimple_hash_gettorch/csrc/utils/hash.h.

我试图为我的 jit 跟踪模型获取哈希,如下所示:

但这不起作用。我试图获取字符串中的底层模型表示(即 using dump_to_str)并将其传递给get_hash(),但这也不起作用!如何在 libtorch 中使用此功能?

笔记

我需要找到一种方法,而不是使用它可能不是一个好的/可靠的选择,因为它每次都会创建不同的哈希:

0 投票
1 回答
108 浏览

c++ - 尝试构建 torchscript 扩展会导致 INVALID TYPE: Only int64_t and bool is supported as an integer argument type 错误

我正在关注torch_script_custom_classes以便在 Python 中公开我的 C++ dll。我目前拥有的大部分代码如下:

这是我使用的 cmake 文件:

我这样称呼cmake:

但我收到以下错误:

这里有什么问题?

0 投票
1 回答
1243 浏览

python - 在 PyTorch C++ 扩展中,如何访问张量中的单个元素并将其转换为标准 C++ 数据类型?

我正在为 pytorch 编写一个 c++ 扩展,其中我需要通过索引访问张量的元素,并且我还需要将元素转换为标准的 c++ 类型。这是一个简短的例子。假设我有一个 2d 张量a,我需要访问a[i][j]它并将其转换为浮点数。

以上内容被放入一个名为tensortest.cpp. setup.py在我写的另一个文件中

当我运行python setup.py install编译器报告以下错误

我能做些什么?

0 投票
2 回答
774 浏览

c++ - 如何将 libtorch 库添加到 CLION?

我正在尝试在我的 Windows 机器上使用 libtorch(pytorch 的 C++ 版本)开始深度学习。

但是,在整个安装过程中出现了问题:即,我似乎无法在 clion 中找到我的 libtorch-library。

我得到的错误信息是:

甚至问这个问题我都有点羞愧,因为看起来错误消息非常具有描述性,但我已经尝试了几个小时并且无法解决它。到目前为止,我已经尝试过:

  • 添加环境变量
  • 设置模块路径(不成功)
  • 将库直接解压缩到项目目录中
  • 其他一些cmake的东西

看起来使用cmake有一个非常简单的解决方案,但是,我对cmake还很陌生,所以我希望有人能以我能理解的方式帮助我。

编辑:好的,我能够在你们的帮助下修复它,谢谢你们,特别是@drescherjm 帮助我的 cmake-illiterate 屁股。

0 投票
0 回答
528 浏览

cmake - 如何在 CMake 中静态链接 libtorch 库?

https://pytorch.org/cppdocs/installing.html之后,我有

这可行,但链接到共享的 Torch 库;我怎样才能链接到静态的呢?

0 投票
1 回答
1091 浏览

c++ - 从 c10::Dict 获取值在 Pytorch C++ 中

我在 Pytorch C++ 前端使用 TorchScript 模型。

Python 中的模型将outputdict 返回为 Dict[str, List[torch.Tensor]].

当我在 C++ 中使用它时,它返回一个c10::Dict<c10::IValue, c10::IValue>. 这个 Python 代码的等价物是什么:

在 C++ 中获取价值c10::Dict

我已经尝试过了,但它不起作用。

和错误:

0 投票
1 回答
821 浏览

c++ - 尽管在 CMake 中指定了库,但未定义的引用错误(与 libtorch 链接的问题(C++11 ABI?)

我正在尝试从我制作的库中创建一个测试可执行文件。让我们将它们命名为 lib1 和 lib2。lib1 与它的测试一起构建得很好。lib2 的构建也没有任何问题。但是,每当我尝试将 lib2 与其测试可执行文件(即使用 lib2 的示例程序)链接时,我都会收到以下错误:

readelf -d我尝试使用和使用命令查看标题ldd,这两个库似乎都有所有必要的引用。但是 lib1 没有任何问题,而 lib2 在链接到使用它的可执行文件时会生成未引用的相关错误。

下面是我为它们制作的 cmakeLists,后来我还包括了readelf.

CMakelist.txt 用于lib1

这是 CMakeList.txt 的lib1_test

这是 CMakeList.txt 的lib2

最后是 CMakeList lib2_test

运行readelf -d lib1这是我得到的输出:

这是输出lib2

然而,lib1构建和链接都很好,虽然lib2这取决于lib1,但在链接到其测试或任何其他库时会出现问题。在这一点上我一无所知,也不知道是什么原因造成的。我错过了什么?

更新 1

这是lib2_test.cpphttps://paste.ee/p/pOgFk 这就是头文件的样子:

关于评论,你可以看到调用lib2_test.cpp是好的,它使用相同的签名。

更新 2

我还需要补充一点,该项目在 Windows 中使用 Visual Studio 和 cmake 构建得很好!但是在 Linux(ubuntu 20.04)下,我面临着这些问题。所以这不仅仅是调用不同/错误的方法或使用错误的签名。这段代码应该可以很好地编译和链接,但我在这里做错了,我不确定它是什么。

笔记2

lib1 和 lib2 只是为实际文件名组成的名称(我只是选择 lib1 和 lib2 以使事情更简单并在这里替换了名称,所以如果您发现大小写不同,请不要介意,实际文件是相同的.

0 投票
0 回答
1046 浏览

cmake - 使用 CMake 构建使用 Emscripten 将 libtorch 编译为 WebAssembly

我正在尝试使用 WebAssembly 在浏览器中运行我的 PyTorch 模型(导出到 TorchScript)。为此,我需要使用 Emscripten 编译 libtorch。正如 PyTorch 文档建议的那样,我坚持使用 CMake 作为编译器。

我已经设法使用 CMake 编译 libtorch,没有出现此处指定的问题。其次,我还设法使用 Emscripten 和 CMake 将一个简单的测试程序编译为 WASM(为了简洁并专注于手头的问题,我没有包含其中任何一个的 CMakeLists.txt 文件)

当我尝试将两者一起编译时,问题就开始了,这是我的 CMake 文件:

请注意,我使用的是 libtorch 的仅 CPU 发行版,启用 CUDA 的版本会导致更多问题,因为 cuda 是仅动态的。

cmake ..src通过,但是make会引发几个错误:

显然 Emscripten 在 libtorch 的动态特性方面遇到了一些问题,所以我的第一个问题是是否可以使用 Emscripten 编译动态库?如果可能的话,尝试使用 Emscripten 编译支持 GPU 的 libtorch 会很有趣。


更新

我尝试使用 libtorch 的静态 CPU 发行版进行编译,但这会导致完全相同的错误。然而,Pytorch github 上的一个旧 GitHub问题刚刚复活,指出我不是唯一一个遇到这个问题的人。希望这个 GitHub 问题能够解决我遇到的问题。

0 投票
0 回答
446 浏览

pytorch - 为 iOS 导出时 Python 和 LibTorch C++ 之间的输出不一致

我已经为我的数据训练了 HuggingFace RoBERTa 模型(这是一个非常特殊的用法——因此是小型模型/词汇表!)并在 Python 上成功测试。我将跟踪模型导出到 iOS 的 LibTorch,但设备上的预测结果与 Python 中的预测结果不匹配(给出不同的 argmax 令牌索引)。我的转换脚本:

过去,我在使用 Python+GPU 训练并转换为 iOS 的 LibTorch 的另一个(视觉)模型时遇到了问题,通过在我的转换脚本中添加调用map_location={'cuda:0': 'cpu'}来解决这些问题。所以我想知道:1)在这种情况下作为可能的解释是否有意义?2)在使用语法加载时torch.load()如何添加map_location选项?.from_pretrained()

以防万一我的 Obj-C++ 处理预测结果是罪魁祸首,这里是设备上运行的 Obj-C++ 代码:

请注意,我在 iOS 中的初始化代码确实调用eval()了 TorchScript 模型。

更新:一项观察;我在加载上面的训练模型时尝试使用我的方式config导致torchscript未设置标志 - 我认为它config完全忽略了我并从预训练文件中获取它。from_pretrained('./trained_RoBERTa', torchscript=True)因此,如文档中所述,我已将其移至。iOS上的输出也有同样的问题,请注意...

更新 2:我想我会尝试在 Python 中测试跟踪模型。不确定这是否应该起作用,但输出确实与原始模型中的相同测试匹配:

这让我觉得 iOS Obj-C++ 执行有问题。加载跟踪模型/导出的代码确实调用.eval()了模型,顺便说一句(我意识到这是对不同输出的可能解释):

更新 3:Uhhhmmm ......这绝对是一个面对面的时刻(在浪费了一个周末之后)......我决定从 Obj-C 返回一个平面 NSArray 并在 Swift 中进行 2D 数组重塑,除了转变一个令牌(我认为它只是 [CLS]),输出现在是正确的。我猜我的 Obj-C 真的很生锈。可悲的是,我仍然没有看到这个问题,但它现在正在工作,所以我要投降了。