问题标签 [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.
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 实现。我该如何克服这个问题?
这是我要注释的类:
pytorch - 导出一个 torchscript 模型
我正在尝试将 torchscript 模型转换为 ONNX 格式。我正在使用 Pytorch 1.8.0。但是,当我尝试运行以下代码时出现错误。
错误是:
当我尝试用 torch.jit.load 替换 torch.load 时,出现以下错误:
基本上如何加载模型中保存的权重以将它们导出为 onnx 格式?Pytorch 文档涵盖了普通的 pytorch 模型,但是当我尝试为 torxhscript 模型执行相同的步骤时,它失败了。
tensorflow - Torch JIT Trace = TracerWarning:将张量转换为 Python 布尔值可能会导致跟踪不正确
我正在关注本教程:https ://huggingface.co/transformers/torchscript.html
来创建我的自定义 BERT 模型的跟踪,但是在运行完全相同时dummy_input
我收到错误:
在我的模型和标记器中加载后,创建跟踪的代码如下:
这dummy_input
是张量列表,所以我不确定该Boolean
类型在哪里发挥作用。有谁了解为什么会发生此错误以及是否发生布尔转换?
非常感谢
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不熟悉,如何解决这个问题?
提前致谢。
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 属性,不能调用。
那么我做错了什么?它显然“认为”它产生了一个正确的脚本。
pytorch - TorchScript 模型导出中的重复分支
我正在尝试通过脚本将 PyTorch 模型导出到 TorchScript,但我被卡住了。我创建了一个玩具类来展示这个问题:
它基本上只包含一个线性层和一个可选的跳过连接。如果我尝试使用脚本编写模型
我收到以下错误:
因此,基本上 TorchScript 无法识别出任何一条语句mod1
的True
分支if
都不会被使用。此外,如果我们创建一个实际使用跳过连接的实例,
我们会得到另一个错误:
因此,在这种情况下,TorchScript 不理解两个if
s 都将始终为真,并且实际上x_input
已明确定义。
为了避免这个问题,我可以将这个类分成两个子类,如下所示:
但是,我正在处理一个庞大的代码库,我必须为许多类重复该过程,这既费时又可能引入错误。此外,我正在处理的模块通常是巨大的卷积网络,而if
s 只是控制额外批量标准化的存在。在我看来,除了单个批次规范层之外,99% 的块中必须具有相同的类似乎是不可取的。
有没有办法可以帮助 TorchScript 处理分支?
编辑:添加了一个最小可行示例。
更新use_skip
:即使我将提示输入为常量也不起作用
python - 使用 Pytorch JIT 修改跟踪模型
我有一组 pytorch 模型,它们是简单的全连接神经网络,并且都具有相同的架构。
其中之一是主模型,并通过反向传播进行训练。其他是仅用于推理的工人。
不时地,主模型被复制到工作模型中,以便它们与主模型保持同步(通过反向传播不断发展)。
使用标准 pytorch 一切正常,但我认为“编译”所有模型可以提高性能。
- 考虑到我的用例,是否可以使用 JIT 跟踪来做到这一点?
- 我该如何处理从主人到工人的定期副本?(即我应该能够从编译模型中获取和设置参数)
pytorch - 在 TorchScript 中跟踪张量大小
我正在通过 TorchScript 跟踪导出 PyTorch 模型,但我遇到了问题。具体来说,我必须对张量大小执行一些操作,但是 JIT 编译器将变量形状硬编码为常量,从而与不同大小的张量兼容。
例如,创建类:
并运行测试代码:
我可以通过编写脚本来解决这个问题,但在这种情况下,我真的需要使用跟踪。此外,我认为追踪应该能够正确处理张量大小的操作。
python - 如何将 PyTorch 中的 torchscript 模型转换为普通的 nn.Module?
我正在通过以下方式加载torchscript模型:
该模型的子模块被标识为RecursiveScriptModule
。我想微调上传的权重,以使其更简单并将它们torch.float32
转换为最好将所有这些东西转换为普通的 PyTorch nn.Module
。
在官方文档https://pytorch.org/docs/stable/jit.html中,它被告知如何转换nn.Module
为torchscript
,但我没有找到任何相反方向的示例。有没有办法做到这一点?
PS这里给出加载模型预训练模型的示例: https ://github.com/openai/CLIP/blob/main/notebooks/Interacting_with_CLIP.ipynb