vasyadeva's picture
Upload folder using huggingface_hub
66d1170 verified
Raw
History Blame Contribute Delete
2.1 kB
import torch
from torch.export import Dim
from transformers import AutoProcessor, MoonshineForConditionalGeneration
MODEL, OUT = 'moonshine-ai/moonshine-tiny-uk', '/work/out'
model = MoonshineForConditionalGeneration.from_pretrained(MODEL, attn_implementation='eager').eval()
cfg = model.config
print('params:', round(sum(p.numel() for p in model.parameters())/1e6, 1), 'M',
'| start:', cfg.decoder_start_token_id, '| eos:', cfg.eos_token_id)
class Encoder(torch.nn.Module):
def __init__(self, m):
super().__init__(); self.enc = m.model.encoder
def forward(self, input_values):
return self.enc(input_values).last_hidden_state
class Decoder(torch.nn.Module):
def __init__(self, m):
super().__init__(); self.m = m
def forward(self, input_ids, encoder_hidden_states):
out = self.m.model.decoder(input_ids=input_ids,
encoder_hidden_states=encoder_hidden_states,
use_cache=False)
return self.m.proj_out(out.last_hidden_state)
audio = torch.zeros(1, 16000 * 3)
enc = Encoder(model).eval()
with torch.no_grad():
hs = enc(audio)
print('encoder out:', tuple(hs.shape))
samples = Dim('samples', min=2000, max=16000 * 30)
frames = Dim('frames', min=4, max=2000)
tokens = Dim('tokens', min=1, max=512)
torch.onnx.export(enc, (audio,), f'{OUT}/encoder.onnx', dynamo=True,
input_names=['input_values'], output_names=['encoder_hidden_states'],
dynamic_shapes={'input_values': {1: samples}})
print('encoder exported')
dec = Decoder(model).eval()
ids = torch.tensor([[cfg.decoder_start_token_id, 100, 200]], dtype=torch.long)
with torch.no_grad():
logits = dec(ids, hs)
print('decoder out:', tuple(logits.shape))
torch.onnx.export(dec, (ids, hs), f'{OUT}/decoder.onnx', dynamo=True,
input_names=['input_ids', 'encoder_hidden_states'], output_names=['logits'],
dynamic_shapes={'input_ids': {1: tokens},
'encoder_hidden_states': {1: frames}})
print('decoder exported')