1*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates. 2*523fa7a6SAndroid Build Coastguard Worker# All rights reserved. 3*523fa7a6SAndroid Build Coastguard Worker# 4*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 5*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 6*523fa7a6SAndroid Build Coastguard Worker 7*523fa7a6SAndroid Build Coastguard Worker# Example script for exporting simple models to flatbuffer 8*523fa7a6SAndroid Build Coastguard Worker 9*523fa7a6SAndroid Build Coastguard Workerimport logging 10*523fa7a6SAndroid Build Coastguard Worker 11*523fa7a6SAndroid Build Coastguard Workerfrom executorch.backends.cadence.aot.ops_registrations import * # noqa 12*523fa7a6SAndroid Build Coastguard Worker 13*523fa7a6SAndroid Build Coastguard Workerimport torch 14*523fa7a6SAndroid Build Coastguard Worker 15*523fa7a6SAndroid Build Coastguard Workerfrom executorch.backends.cadence.aot.export_example import export_model 16*523fa7a6SAndroid Build Coastguard Workerfrom torchaudio.models.wav2vec2.model import wav2vec2_model, Wav2Vec2Model 17*523fa7a6SAndroid Build Coastguard Worker 18*523fa7a6SAndroid Build Coastguard WorkerFORMAT = "[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s" 19*523fa7a6SAndroid Build Coastguard Workerlogging.basicConfig(level=logging.INFO, format=FORMAT) 20*523fa7a6SAndroid Build Coastguard Worker 21*523fa7a6SAndroid Build Coastguard Worker 22*523fa7a6SAndroid Build Coastguard Workerdef main() -> None: 23*523fa7a6SAndroid Build Coastguard Worker # The wrapper is needed to avoid issues with the optional second arguments 24*523fa7a6SAndroid Build Coastguard Worker # of Wav2Vec2Models. 25*523fa7a6SAndroid Build Coastguard Worker class Wav2Vec2ModelWrapper(torch.nn.Module): 26*523fa7a6SAndroid Build Coastguard Worker def __init__(self, model: Wav2Vec2Model): 27*523fa7a6SAndroid Build Coastguard Worker super().__init__() 28*523fa7a6SAndroid Build Coastguard Worker self.model = model 29*523fa7a6SAndroid Build Coastguard Worker 30*523fa7a6SAndroid Build Coastguard Worker def forward(self, x): 31*523fa7a6SAndroid Build Coastguard Worker out, _ = self.model(x) 32*523fa7a6SAndroid Build Coastguard Worker return out 33*523fa7a6SAndroid Build Coastguard Worker 34*523fa7a6SAndroid Build Coastguard Worker _model = wav2vec2_model( 35*523fa7a6SAndroid Build Coastguard Worker extractor_mode="layer_norm", 36*523fa7a6SAndroid Build Coastguard Worker extractor_conv_layer_config=None, 37*523fa7a6SAndroid Build Coastguard Worker extractor_conv_bias=False, 38*523fa7a6SAndroid Build Coastguard Worker encoder_embed_dim=768, 39*523fa7a6SAndroid Build Coastguard Worker encoder_projection_dropout=0.1, 40*523fa7a6SAndroid Build Coastguard Worker encoder_pos_conv_kernel=128, 41*523fa7a6SAndroid Build Coastguard Worker encoder_pos_conv_groups=16, 42*523fa7a6SAndroid Build Coastguard Worker encoder_num_layers=12, 43*523fa7a6SAndroid Build Coastguard Worker encoder_num_heads=12, 44*523fa7a6SAndroid Build Coastguard Worker encoder_attention_dropout=0.1, 45*523fa7a6SAndroid Build Coastguard Worker encoder_ff_interm_features=3072, 46*523fa7a6SAndroid Build Coastguard Worker encoder_ff_interm_dropout=0.0, 47*523fa7a6SAndroid Build Coastguard Worker encoder_dropout=0.1, 48*523fa7a6SAndroid Build Coastguard Worker encoder_layer_norm_first=False, 49*523fa7a6SAndroid Build Coastguard Worker encoder_layer_drop=0.1, 50*523fa7a6SAndroid Build Coastguard Worker aux_num_out=None, 51*523fa7a6SAndroid Build Coastguard Worker ) 52*523fa7a6SAndroid Build Coastguard Worker _model.eval() 53*523fa7a6SAndroid Build Coastguard Worker 54*523fa7a6SAndroid Build Coastguard Worker model = Wav2Vec2ModelWrapper(_model) 55*523fa7a6SAndroid Build Coastguard Worker model.eval() 56*523fa7a6SAndroid Build Coastguard Worker 57*523fa7a6SAndroid Build Coastguard Worker # test input 58*523fa7a6SAndroid Build Coastguard Worker audio_len = 1680 59*523fa7a6SAndroid Build Coastguard Worker example_inputs = (torch.rand(1, audio_len),) 60*523fa7a6SAndroid Build Coastguard Worker 61*523fa7a6SAndroid Build Coastguard Worker export_model(model, example_inputs) 62*523fa7a6SAndroid Build Coastguard Worker 63*523fa7a6SAndroid Build Coastguard Worker 64*523fa7a6SAndroid Build Coastguard Workerif __name__ == "__main__": 65*523fa7a6SAndroid Build Coastguard Worker main() 66