问题标签 [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.
c++ - 如何从 libtorch 输出中删除乘数并显示最终结果?
当我尝试在屏幕上显示/打印一些张量时,我面临类似以下的情况,而不是获得最终结果,似乎 libtorch 显示带有乘数的张量(即0.01*
,如下所示):
如何禁用此行为并获得最终输出?我试图将其显式转换为浮点数,希望这将导致最终输出被存储/显示,但这也不起作用。
c++ - 如何在 libtorch 中使用 torch::get_hash?
到目前为止,我一直在尝试获取 libtorch 中几个模块的哈希值,但无济于事。在 libtorch 中有几个与散列相关的函数,例如 :get_hash
和simple_hash_get
在torch/csrc/utils/hash.h
.
我试图为我的 jit 跟踪模型获取哈希,如下所示:
但这不起作用。我试图获取字符串中的底层模型表示(即 using dump_to_str
)并将其传递给get_hash()
,但这也不起作用!如何在 libtorch 中使用此功能?
笔记
我需要找到一种方法,而不是使用它可能不是一个好的/可靠的选择,因为它每次都会创建不同的哈希:
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:
但我收到以下错误:
这里有什么问题?
python - 在 PyTorch C++ 扩展中,如何访问张量中的单个元素并将其转换为标准 C++ 数据类型?
我正在为 pytorch 编写一个 c++ 扩展,其中我需要通过索引访问张量的元素,并且我还需要将元素转换为标准的 c++ 类型。这是一个简短的例子。假设我有一个 2d 张量a
,我需要访问a[i][j]
它并将其转换为浮点数。
以上内容被放入一个名为tensortest.cpp
. setup.py
在我写的另一个文件中
当我运行python setup.py install
编译器报告以下错误
我能做些什么?
c++ - 如何将 libtorch 库添加到 CLION?
我正在尝试在我的 Windows 机器上使用 libtorch(pytorch 的 C++ 版本)开始深度学习。
但是,在整个安装过程中出现了问题:即,我似乎无法在 clion 中找到我的 libtorch-library。
我得到的错误信息是:
甚至问这个问题我都有点羞愧,因为看起来错误消息非常具有描述性,但我已经尝试了几个小时并且无法解决它。到目前为止,我已经尝试过:
- 添加环境变量
- 设置模块路径(不成功)
- 将库直接解压缩到项目目录中
- 其他一些cmake的东西
看起来使用cmake有一个非常简单的解决方案,但是,我对cmake还很陌生,所以我希望有人能以我能理解的方式帮助我。
编辑:好的,我能够在你们的帮助下修复它,谢谢你们,特别是@drescherjm 帮助我的 cmake-illiterate 屁股。
cmake - 如何在 CMake 中静态链接 libtorch 库?
在https://pytorch.org/cppdocs/installing.html之后,我有
这可行,但链接到共享的 Torch 库;我怎样才能链接到静态的呢?
c++ - 从 c10::Dict 获取值在 Pytorch C++ 中
我在 Pytorch C++ 前端使用 TorchScript 模型。
Python 中的模型将output
dict 返回为 Dict[str, List[torch.Tensor]]
.
当我在 C++ 中使用它时,它返回一个c10::Dict<c10::IValue, c10::IValue>
. 这个 Python 代码的等价物是什么:
在 C++ 中获取价值c10::Dict
?
我已经尝试过了,但它不起作用。
和错误:
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.cpp
:https://paste.ee/p/pOgFk
这就是头文件的样子:
关于评论,你可以看到调用lib2_test.cpp
是好的,它使用相同的签名。
更新 2
我还需要补充一点,该项目在 Windows 中使用 Visual Studio 和 cmake 构建得很好!但是在 Linux(ubuntu 20.04)下,我面临着这些问题。所以这不仅仅是调用不同/错误的方法或使用错误的签名。这段代码应该可以很好地编译和链接,但我在这里做错了,我不确定它是什么。
笔记2
lib1 和 lib2 只是为实际文件名组成的名称(我只是选择 lib1 和 lib2 以使事情更简单并在这里替换了名称,所以如果您发现大小写不同,请不要介意,实际文件是相同的.
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 问题能够解决我遇到的问题。
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 真的很生锈。可悲的是,我仍然没有看到这个问题,但它现在正在工作,所以我要投降了。