如何使用脚本转换pytorch transformer?
How to use scripting to convert pytorch transformer?
我正在尝试用 C++ 将 pytorch 转换器编译为 运行:
from torch.nn import TransformerEncoder, TransformerEncoderLayer
encoder_layers = TransformerEncoderLayer(1000, 8, 512, 0.1)
transf = TransformerEncoder(encoder_layers, 6)
sm = torch.jit.script(transf)
但是我得到一个错误:
RuntimeError: Expected a default value of type Tensor on parameter
"src_mask": File "C:\Program Files (x86)\Microsoft Visual
Studio\Shared\Python36_64\lib\site-packages\torch\nn\modules\transformer.py",
line 271
def forward(self, src, src_mask=None, src_key_padding_mask=None):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~... <--- HERE
r"""Pass the input through the encoder layer.
pytorch 转换器模块似乎有问题。
有什么方法可以在 C++ 中 运行 pytorch 转换器吗?
您需要升级到 PyTorch 1.5.0,旧版本不支持将 Transformers 转换为 TorchScript (JIT) 模块。
pip install torch===1.5.0 -f https://download.pytorch.org/whl/torch_stable.html
在1.5.0中你会看到一些参数被声明为常量的警告,例如:
UserWarning: 'q_proj_weight' was found in ScriptModule constants, but it is a non-constant parameter. Consider removing it.
可以安全地忽略这些。
我正在尝试用 C++ 将 pytorch 转换器编译为 运行:
from torch.nn import TransformerEncoder, TransformerEncoderLayer
encoder_layers = TransformerEncoderLayer(1000, 8, 512, 0.1)
transf = TransformerEncoder(encoder_layers, 6)
sm = torch.jit.script(transf)
但是我得到一个错误:
RuntimeError: Expected a default value of type Tensor on parameter
"src_mask": File "C:\Program Files (x86)\Microsoft Visual
Studio\Shared\Python36_64\lib\site-packages\torch\nn\modules\transformer.py",
line 271
def forward(self, src, src_mask=None, src_key_padding_mask=None):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~... <--- HERE
r"""Pass the input through the encoder layer.
pytorch 转换器模块似乎有问题。
有什么方法可以在 C++ 中 运行 pytorch 转换器吗?
您需要升级到 PyTorch 1.5.0,旧版本不支持将 Transformers 转换为 TorchScript (JIT) 模块。
pip install torch===1.5.0 -f https://download.pytorch.org/whl/torch_stable.html
在1.5.0中你会看到一些参数被声明为常量的警告,例如:
UserWarning: 'q_proj_weight' was found in ScriptModule constants, but it is a non-constant parameter. Consider removing it.
可以安全地忽略这些。