问题标签 [torchscript]

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 回答
586 浏览

python - TorchScript 需要访问源代码才能对 collections.deque 进行编译

我正在尝试将PyTorch FOMM模型转换为TorchScript。一旦我开始注释一些类,@torch.jit.script我就有一个错误:

OSError: Can't get source for <class 'collections.deque'>. TorchScript requires source access in order to carry out compilation, make sure original .py files are available.

据我了解,在CPython中实现的类因此无法被TorchScript编译器读取。我没有找到任何纯 Python 实现。我该如何克服这个问题?

这是我要注释的类:

0 投票
0 回答
1389 浏览

pytorch - 导出一个 torchscript 模型

我正在尝试将 torchscript 模型转换为 ONNX 格式。我正在使用 Pytorch 1.8.0。但是,当我尝试运行以下代码时出现错误。

错误是:

当我尝试用 torch.jit.load 替换 torch.load 时,出现以下错误:

基本上如何加载模型中保存的权重以将它们导出为 onnx 格式?Pytorch 文档涵盖了普通的 pytorch 模型,但是当我尝试为 torxhscript 模型执行相同的步骤时,它失败了。

0 投票
1 回答
3867 浏览

tensorflow - Torch JIT Trace = TracerWarning:将张量转换为 Python 布尔值可能会导致跟踪不正确

我正在关注本教程:https ://huggingface.co/transformers/torchscript.html 来创建我的自定义 BERT 模型的跟踪,但是在运行完全相同时dummy_input我收到错误:

在我的模型和标记器中加载后,创建跟踪的代码如下:

dummy_input是张量列表,所以我不确定该Boolean类型在哪里发挥作用。有谁了解为什么会发生此错误以及是否发生布尔转换?

非常感谢

0 投票
1 回答
441 浏览

pytorch - 将detectron2模型导出到torchscript时得到“无法导出Python函数调用'_ScaleGradient'”

通过 Detectron2 训练了一个模块后,我尝试将模型导出到 TorchScript,然后出现以下错误:

无法导出 Python 函数调用“_ScaleGradient”。删除对 Python 函数的调用 > 在导出之前。您是否忘记添加 @script 或 @script_method 注释?如果这是 > nn.ModuleList,请将其添加到 __constants__

我发现代码在detectron2/modeling/roi_heads/cascade_rcnn.py

所以我将@statcmethod annos 更改为@torch.jit.script_method,之后出现“'ScriptMethodStub' 对象不可调用”错误。

我对torchscript不熟悉,如何解决这个问题?

提前致谢。

0 投票
0 回答
223 浏览

torchscript - 无法让 torch.jit.script 与 pytorch RNN 一起正常工作

好的,我需要编写 pytorch LSTM 脚本,因为当我跟踪它时,它会通过不同的输入得到不同的答案。但是当我这样做时:

script_module=torch.jit.script(torch.nn.modules.rnn.LSTM(768, 256, num_layers=2, batch_first=True, bidirectional=True))

生成的 script_module 打印为:RecursiveScriptModule(original_name=LSTM),但与其他递归脚本模块不同(例如,此处生成:https ://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.html ,并由我成功复制)它没有.code 或 .graph 属性,不能调用。

那么我做错了什么?它显然“认为”它产生了一个正确的脚本。

0 投票
1 回答
62 浏览

pytorch - TorchScript 模型导出中的重复分支

我正在尝试通过脚本将 PyTorch 模型导出到 TorchScript,但我被卡住了。我创建了一个玩具类来展示这个问题:

它基本上只包含一个线性层和一个可选的跳过连接。如果我尝试使用脚本编写模型

我收到以下错误:

因此,基本上 TorchScript 无法识别出任何一条语句mod1True分支if都不会被使用。此外,如果我们创建一个实际使用跳过连接的实例,

我们会得到另一个错误:

因此,在这种情况下,TorchScript 不理解两个ifs 都将始终为真,并且实际上x_input已明确定义。

为了避免这个问题,我可以将这个类分成两个子类,如下所示:

但是,我正在处理一个庞大的代码库,我必须为许多类重复该过程,这既费时又可能引入错误。此外,我正在处理的模块通常是巨大的卷积网络,而ifs 只是控制额外批量标准化的存在。在我看来,除了单个批次规范层之外,99% 的块中必须具有相同的类似乎是不可取的。

有没有办法可以帮助 TorchScript 处理分支?

编辑:添加了一个最小可行示例。

更新use_skip:即使我将提示输入为常量也不起作用

0 投票
0 回答
58 浏览

python - 使用 Pytorch JIT 修改跟踪模型

我有一组 pytorch 模型,它们是简单的全连接神经网络,并且都具有相同的架构。

其中之一是主模型,并通过反向传播进行训练。其他是仅用于推理的工人。

不时地,主模型被复制到工作模型中,以便它们与主模型保持同步(通过反向传播不断发展)。

使用标准 pytorch 一切正常,但我认为“编译”所有模型可以提高性能。

  • 考虑到我的用例,是否可以使用 JIT 跟踪来做到这一点?
  • 我该如何处理从主人到工人的定期副本?(即我应该能够从编译模型中获取和设置参数)
0 投票
1 回答
728 浏览

pytorch - 在 TorchScript 中跟踪张量大小

我正在通过 TorchScript 跟踪导出 PyTorch 模型,但我遇到了问题。具体来说,我必须对张量大小执行一些操作,但是 JIT 编译器将变量形状硬编码为常量,从而与不同大小的张量兼容。

例如,创建类:

并运行测试代码:

我可以通过编写脚本来解决这个问题,但在这种情况下,我真的需要使用跟踪。此外,我认为追踪应该能够正确处理张量大小的操作。

0 投票
0 回答
69 浏览

pytorch - Pytorch 为 nn.Module 函数添加自定义反向传递

我正在重新实现可逆残差网络架构。

我想为inverse函数添加一个自定义的反向传递。由于它是定点迭代,因此可以利用隐函数定理来避免循环展开,而是通过求解线性系统来计算梯度。例如,这是在深度平衡模型架构中完成的。

如何为此功能注册我的自定义反向通行证?我希望,当我稍后定义一些损失时 r = loss(y, model.inverse(other_model(model(x))))r.backwards()正确地使用我的自定义渐变进行反向调用。

理想情况下,解决方案应该是torchscript兼容的。

0 投票
1 回答
688 浏览

python - 如何将 PyTorch 中的 torchscript 模型转换为普通的 nn.Module?

我正在通过以下方式加载torchscript模型:

该模型的子模块被标识为RecursiveScriptModule。我想微调上传的权重,以使其更简单并将它们torch.float32转换为最好将所有这些东西转换为普通的 PyTorch nn.Module

在官方文档https://pytorch.org/docs/stable/jit.html中,它被告知如何转换nn.Moduletorchscript,但我没有找到任何相反方向的示例。有没有办法做到这一点?

PS这里给出加载模型预训练模型的示例: https ://github.com/openai/CLIP/blob/main/notebooks/Interacting_with_CLIP.ipynb