How to export facebook/mbart-large-50-many-to-many-mmt to TorchScript format?
I’m not sure if I’m in the right place (if not, I apologize). Basically, I need help.I am just exported pretrained to TorchScript format , using following code:import torch
from transformers import MBartForConditionalGeneration, MBart50TokenizerFast

tokenizer = MBart50TokenizerFast.from_pretrained("d:/Install/TensorFlow/models/MBART_Base/mbart_large_50_model/", src_lang="en_XX", tgt_lang="en_XX")
example_english_phrase = "UN Chief Says There Is No Military Solution in Syria"

expected_translation_text = "UN Chief Says There Is No Military Solution in Syria"

inputs = tokenizer(example_english_phrase, text_target=expected_translation_text, return_tensors="pt")

model_path = "d:/Install/TensorFlow/models/MBART_Base/mbart_large_50_model/"
model = MBartForConditionalGeneration.from_pretrained(model_path, torchscript=True)


traced_model = torch.jit.trace(model, [inputs.input_ids, inputs.attention_mask])
torch.jit.save(traced_model, "d:/Install/TensorFlow/models/MBART_Base/TorchScript/mbart_large_50_model_traced.pt")	

#scripted_model = torch.jit.script(model)
#torch.jit.save(scripted_model, "d:/Install/TensorFlow/models/MBART_Base/TorchScript/mbart_large_50_model_scripted.pt")-Got something without errors, but when I tried to use  resulting TorchScript format in order to translate text between languages:import torch
from transformers import MBart50TokenizerFast

model_path = "d:/Install/TensorFlow/models/MBART_Base/TorchScript/mbart_large_50_model_traced.pt"
model = torch.jit.load(model_path)

tokenizer_path = "d:/Install/TensorFlow/models/MBART_Base/mbart_large_50_model/"
tokenizer = MBart50TokenizerFast.from_pretrained(tokenizer_path, src_lang="en_XX", tgt_lang="hr_HR")

example_english_phrase = "UN Chief Says There Is No Military Solution in Syria"
inputs = tokenizer(example_english_phrase, return_tensors="pt")

decoded_text = tokenizer.decode(inputs['input_ids'][0], skip_special_tokens=True)

input_ids = inputs["input_ids"]

target_lang_id = tokenizer.lang_code_to_id["hr_HR"]
attention_mask = inputs["attention_mask"]
outputs = model(input_ids=input_ids, attention_mask=attention_mask)

predicted_ids = torch.argmax(outputs[0], dim=-1)
decoded_output = tokenizer.decode(predicted_ids[0], skip_special_tokens=True)
print("Translated text:", decoded_output)I am getting the original input text, without first word:Chief Says There Is No Military Solution in SyriaSo, two questions:is this a correct way to export model to traced TorchScript?is this correct way to use that script?-Any help?
2024-12-16T14:21:14Z
1. Is this the correct way to export the model to traced TorchScript?While your approach to export the model usingtorch.jit.traceworks without errors,torch.jit.traceis not ideal for models with dynamic control flow, such as those in transformers.MBartForConditionalGenerationhas dynamic behaviors due to its attention mechanisms and token generation steps. Usingtorch.jit.scriptis generally more suitable for such models.Here’s how you can properly export the model with scripting:pythonCopy codefrom transformers import MBartForConditionalGeneration
import torch

model_path = "d:/Install/TensorFlow/models/MBART_Base/mbart_large_50_model/"
model = MBartForConditionalGeneration.from_pretrained(model_path, torchscript=True)

# Use scripting for better support of dynamic control flow
scripted_model = torch.jit.script(model)
torch.jit.save(scripted_model, "d:/Install/TensorFlow/models/MBART_Base/TorchScript/mbart_large_50_model_scripted.pt")2. Is this the correct way to use that script?Your usage approach has a few errors:Key Problems in Your Usage Code:Input Preparation:inputs["input_ids"]contains the tokenized input, not the decoder input IDs required for generation.In MBart, decoding typically requires a start token (<bos>or language-specific start-of-sequence token). You’re not providing this explicitly.Model Output Handling:torch.jit.tracerestricts how the model processes inputs because of its static behavior. This might result in missing or malformed outputs.You’re directly applyingtorch.argmaxto the outputs without ensuring they’re logits for token probabilities.Decoding Issues:Decoding your inputs (inputs['input_ids']) instead of the generated outputs from the model leads to displaying the original input text, minus potential encoding errors.
2024-12-16T14:21:30Z
import torch
from transformers import MBart50TokenizerFast

# Load TorchScript model and tokenizer
model_path = "d:/Install/TensorFlow/models/MBART_Base/TorchScript/mbart_large_50_model_scripted.pt"
model = torch.jit.load(model_path)

tokenizer_path = "d:/Install/TensorFlow/models/MBART_Base/mbart_large_50_model/"
tokenizer = MBart50TokenizerFast.from_pretrained(tokenizer_path, src_lang="en_XX", tgt_lang="hr_HR")

# Prepare inputs
example_english_phrase = "UN Chief Says There Is No Military Solution in Syria"
inputs = tokenizer(example_english_phrase, return_tensors="pt")

# Set decoder start token
decoder_start_token_id = tokenizer.lang_code_to_id["hr_HR"]

# Generate translation
outputs = model.generate(
    inputs["input_ids"],
    attention_mask=inputs["attention_mask"],
    decoder_start_token_id=decoder_start_token_id,
    max_length=50,
)

# Decode and print translation
decoded_output = tokenizer.decode(outputs[0], skip_special_tokens=True)
print("Translated text:", decoded_output)
2024-12-16T14:37:11Z
Hi@Alanturner2and thanks for response!At the line in your code:scripted_model = torch.jit.script(model)I am getting:RuntimeError: 'Tensor' object has no attribute or method 'forward'.:
  File "d:\IDEJE_ZA_AI_APP\Hugging Face Modeli\pegasus-xsum\venvs\py3.9\lib\site
-packages\transformers\models\mbart\modeling_mbart.py", line 124
    def forward(self, input_ids: torch.Tensor):
        return super().forward(input_ids) * self.embed_scale
               ~~~~~~~~~~~~~ <--- HERE-if you need any information about Python library versions I am using, I can give it to you.
2024-12-16T14:40:37Z
The error occurs becausetorch.jit.scriptattempts to compile your model into TorchScript but encounters an issue in theforwardmethod of the MBART model you’re using. The specific problem arises because thesuper().forward()call intransformers.models.mbart.modeling_mbartrefers to a parent class method that TorchScript cannot handle correctly.import torch
from transformers import MBart50TokenizerFast

# Load TorchScript model
model_path = "d:/Install/TensorFlow/models/MBART_Base/TorchScript/mbart_large_50_model_scripted.pt"
model = torch.jit.load(model_path)

# Load tokenizer
tokenizer_path = "d:/Install/TensorFlow/models/MBART_Base/mbart_large_50_model/"
tokenizer = MBart50TokenizerFast.from_pretrained(tokenizer_path, src_lang="en_XX", tgt_lang="hr_HR")

# Prepare inputs
example_english_phrase = "UN Chief Says There Is No Military Solution in Syria"
inputs = tokenizer(example_english_phrase, return_tensors="pt")

# Set decoder start token
decoder_start_token_id = tokenizer.lang_code_to_id["hr_HR"]

# Ensure inputs are TorchScript-compatible
def prepare_inputs(inputs):
    input_ids = inputs["input_ids"]
    attention_mask = inputs.get("attention_mask", None)
    return input_ids, attention_mask

input_ids, attention_mask = prepare_inputs(inputs)

# Perform inference
with torch.no_grad():
    outputs = model.generate(
        input_ids=input_ids,
        attention_mask=attention_mask,
        decoder_start_token_id=decoder_start_token_id,
        max_length=50,
    )

# Decode and print the translation
decoded_output = tokenizer.decode(outputs[0], skip_special_tokens=True)
print("Translated text:", decoded_output)
2024-12-16T17:38:13Z
HI@Alanturner2, just to be clear:The Runtime error I mentioned:RuntimeError: 'Tensor' object has no attribute or method 'forward'.:occurs when I try to generate the model in Torchscript format,  so exactly in this piece of code you posted:# Use scripting for better support of dynamic control flow
scripted_model = torch.jit.script(model)        <------ HERE
torch.jit.save(scripted_model, "d:/Install/TensorFlow/models/MBART_Base/TorchScript/mbart_large_50_model_scripted.pt")So I am unable to obtain thescripted_modelat all.I read your explanation, and the Python script you provided afterwards assumes that there is already a generatedmbart_large_50_model_scripted.ptBut I was unable to create it, due to an error that occurred…huh?
2024-12-16T23:37:27Z
How about change the python library that was installed in your computer. It is difficult but you can do it. Sometimes I met the error that I couldn’t deal with, I tried to change the code of the framework or library intentionally.
2024-12-17T06:58:18Z
Thanks, I’ll try.The thing is that I’m a Java developer, who deals with Python only as much as necessary, and I know it poorly. Namely, I need the export to this format for only one reason - to get a format that I can work with using Java libraries.Also, have you (or anyone else) tried to export this model to TorchScript?Since I’m still not sure if I’m doing something wrong, or if there’s a bug in the Python implementation…
2024-12-17T08:00:44Z
I know what you want to know.During my developing, there is sometimes so many problems. And I had to use framework that I didn’t know. At that time,First, I tried to read and scan the code of the python lib and especially use dir() function. dir()function is very useful to know the structure or parameters of the function or object.And next, I also use GPT. That is very helpful and powerful in python code. It knows only old versions but they are similar. If there isn’t in GPT, then I tried to read the documentation.I hope to help your coding.