| import json, os, time, numpy as np, onnx, onnxruntime as ort |
| from onnxruntime.quantization import quantize_dynamic, QuantType |
| from transformers import AutoProcessor, AutoConfig |
|
|
| OUT = '/work/out' |
| for name in ('encoder', 'decoder'): |
| src, dst = f'{OUT}/{name}.onnx', f'{OUT}/{name}.int8.onnx' |
| quantize_dynamic(src, dst, weight_type=QuantType.QInt8, extra_options={'MatMulConstBOnly': True}) |
| print(f'{name}: fp32 {os.path.getsize(src) + os.path.getsize(src + ".data" if os.path.exists(src + ".data") else src):,}' |
| f' -> int8 {os.path.getsize(dst):,} bytes') |
|
|
| |
| proc = AutoProcessor.from_pretrained('moonshine-ai/moonshine-tiny-uk') |
| tok = proc.tokenizer |
| vocab = tok.get_vocab() |
| with open(f'{OUT}/tokens.txt', 'w', encoding='utf-8') as f: |
| for piece, idx in sorted(vocab.items(), key=lambda kv: kv[1]): |
| f.write(f'{idx}\t{piece}\n') |
| print('tokens.txt:', len(vocab), 'entries,', os.path.getsize(f'{OUT}/tokens.txt'), 'bytes') |
| cfg = AutoConfig.from_pretrained('moonshine-ai/moonshine-tiny-uk') |
| json.dump({'decoder_start_token_id': cfg.decoder_start_token_id, 'eos_token_id': cfg.eos_token_id, |
| 'bos_token_id': cfg.bos_token_id, 'vocab_size': cfg.vocab_size, 'sampling_rate': 16000}, |
| open(f'{OUT}/decode_config.json', 'w'), indent=2) |
| print('decode_config.json written') |
|
|