🚀 INT4 Whisper large-v2 ONNX模型
Whisper是一個用於自動語音識別(ASR)和語音翻譯的預訓練模型。該模型在68萬小時的標註數據上進行訓練,展現出了強大的泛化能力,無需微調即可適用於多種數據集和領域。本倉庫提供了採用ONNX格式的Whisper large v2模型的INT4僅權重量化版本,由英特爾®神經壓縮器和英特爾®Transformer擴展提供支持。
此INT4 ONNX模型由英特爾®神經壓縮器的僅權重量化方法生成。
✨ 主要特性
模型詳情
屬性 |
詳情 |
模型作者 - 公司 |
Intel |
日期 |
2023年10月8日 |
版本 |
1 |
類型 |
語音識別 |
論文或其他資源 |
- |
許可證 |
Apache 2.0 |
問題或評論 |
社區板塊 |
預期用途
屬性 |
詳情 |
主要預期用途 |
可使用原始模型進行自動語音識別推理 |
主要預期用戶 |
任何進行自動語音識別推理的人員 |
超出範圍的用途 |
大多數情況下,該模型需要針對特定任務進行微調。不得使用該模型故意為他人營造敵對或疏離的環境。 |
📦 安裝指南
導出為ONNX模型
使用openai/whisper-large-v2
導出FP32模型:
optimum-cli export onnx --model openai/whisper-large-v2 whisper-large-v2-with-past/ --task automatic-speech-recognition-with-past --opset 13
安裝ONNX運行時
安裝onnxruntime>=1.16.0
以支持MatMulFpQ4
運算符:
pip install onnxruntime>=1.16.0
💻 使用示例
運行量化
從主分支構建英特爾®神經壓縮器並運行INT4僅權重量化。
僅權重量化配置如下:
數據類型 |
分組大小 |
方案 |
算法 |
INT4 |
32 |
sym |
RTN |
以下是關鍵代碼,完整腳本請參考whisper示例:
from neural_compressor import quantization, PostTrainingQuantConfig
from neural_compressor.utils.constant import FP32
import os
model_list = ['encoder_model.onnx', 'decoder_model.onnx', 'decoder_with_past_model.onnx']
for model in model_list:
config = PostTrainingQuantConfig(
approach="weight_only",
calibration_sampling_size=[8],
op_type_dict={".*": {"weight": {"bits": 4,
"algorithm": ["RTN"],
"scheme": ["sym"],
"group_size": 32}}},)
q_model = quantization.fit(
os.path.join("/path/to/whisper-large-v2-with-past", model),
config,
calib_dataloader=dataloader)
q_model.save(os.path.join("/path/to/whisper-large-v2-onnx-int4", model))
評估
運算符統計
以下展示了INT4 ONNX模型中的運算符統計信息:
模型 |
運算符類型 |
總數 |
INT4權重 |
FP32權重 |
encoder_model |
MatMul |
256 |
192 |
64 |
decoder_model |
MatMul |
449 |
321 |
128 |
decoder_with_past_model |
MatMul |
385 |
257 |
128 |
WER評估
使用以下代碼在librispeech_asr
數據集上評估模型:
import os
from evaluate import load
from datasets import load_dataset
from transformers import WhisperForConditionalGeneration, WhisperProcessor, AutoConfig
model_name = 'openai/whisper-large-v2'
model_path = 'whisper-large-v2-onnx-int4'
processor = WhisperProcessor.from_pretrained(model_name)
model = WhisperForConditionalGeneration.from_pretrained(model_name)
config = AutoConfig.from_pretrained(model_name)
wer = load("wer")
librispeech_test_clean = load_dataset("librispeech_asr", "clean", split="test")
from optimum.onnxruntime import ORTModelForSpeechSeq2Seq
from transformers import PretrainedConfig
model_config = PretrainedConfig.from_pretrained(model_name)
predictions = []
references = []
sessions = ORTModelForSpeechSeq2Seq.load_model(
os.path.join(model_path, 'encoder_model.onnx'),
os.path.join(model_path, 'decoder_model.onnx'),
os.path.join(model_path, 'decoder_with_past_model.onnx'))
model = ORTModelForSpeechSeq2Seq(sessions[0], sessions[1], model_config, model_path, sessions[2])
for idx, batch in enumerate(librispeech_test_clean):
audio = batch["audio"]
input_features = processor(audio["array"], sampling_rate=audio["sampling_rate"], return_tensors="pt").input_features
reference = processor.tokenizer._normalize(batch['text'])
references.append(reference)
predicted_ids = model.generate(input_features)[0]
transcription = processor.decode(predicted_ids)
prediction = processor.tokenizer._normalize(transcription)
predictions.append(prediction)
wer_result = wer.compute(references=references, predictions=predictions)
print(f"Result wer: {wer_result * 100}")
📚 詳細文檔
指標(模型性能)
模型 |
模型大小(GB) |
WER |
FP32 |
15.2 |
2.87 |
INT4 |
1.9 |
2.99 |
📄 許可證
本項目採用Apache 2.0許可證。