Skip to content

❓ Questions / Help / Support #255

Description

@jeannekamikaze

I am getting the following error when trying to do inference in C++ Pytorch using a Silero TTS model:

Expected at most 11 argument(s) for operator 'forward', but received 13 argument(s). Declaration: forward(__torch__.silero_vocoder.jit_model.___torch_mangle_138.TTSSystem self, str[] sentences, str[] clean_sentences, int?[] break_lens, float[] prosody_rates, float[] prosody_pitches, Tensor speaker_ids, int sr=48000, str device="cpu", Tensor? gt_durs=None, Tensor? gt_pitch=None) -> ((Tensor, Tensor))
Exception raised from checkAndNormalizeInputs at ../aten/src/ATen/core/function_schema_inl.h:393 (most recent call first):
frame #0: c10::Error::Error(c10::SourceLocation, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) + 0x6b (0x7fa48aac71fb in /home/jeanne/src/contrib/libtorch/lib/libc10.so)
frame #1: c10::detail::torchCheckFail(char const*, char const*, unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) + 0xbf (0x7fa48aac1d6f in /home/jeanne/src/contrib/libtorch/lib/libc10.so)
frame #2: void c10::FunctionSchema::checkAndNormalizeInputs<c10::Type>(std::vector<c10::IValue, std::allocator<c10::IValue> >&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, c10::IValue, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, c10::IValue> > > const&) const + 0x6ae (0x7fa475ffa13e in /home/jeanne/src/contrib/libtorch/lib/libtorch_cpu.so)
frame #3: torch::jit::Method::operator()(std::vector<c10::IValue, std::allocator<c10::IValue> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, c10::IValue, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, c10::IValue> > > const&) const + 0x173 (0x7fa479270433 in /home/jeanne/src/contrib/libtorch/lib/libtorch_cpu.so)
frame #4: torch::jit::Module::forward(std::vector<c10::IValue, std::allocator<c10::IValue> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, c10::IValue, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, c10::IValue> > > const&) + 0xc7 (0x5612bafde75b in /home/jeanne/src/cmake-build-debug/tts/src/tts-bin/tts-bin)

To get there, first I exported the model in a way that torch::jit::load() can read:

model, example_text = torch.hub.load(
        repo_or_dir='snakers4/silero-models',
        model='silero_tts',
        language='en',
        speaker='v3_en')

traced = torch.jit.trace(model.model, example_text)
traced.save(output_file)

(The model.model part is intentional; see my other issue: #254).

Then I prepare TTS input based off of tts_utils.py. Given a const char* text and the symbols in model.symbols, I transform the input characters to their index in the symbol table and forward() the result to the model:

torch::jit::script::Module mod = torch::jit::load(path); // From the export above.

const char* text = ....;
size_t length = strlen(text);

std::vector<torch::jit::IValue> input(length);
encode_symbols(text, length, input.data()); // Character to symbol index

at::Tensor output = mod.forward(input).toTensor();
std::cout << output << std::endl;

But somehow the Silero vocoder's TTSSystem is called with 13 arguments when it expects 11.

If anybody has tried TTS inference in C++ before, any help would be greatly appreciated. Thank you.

Metadata

Metadata

Assignees

Labels

help wantedExtra attention is needed

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions