AWS Trainium & Inferentia 文件
Whisper
並獲得增強的文件體驗
開始使用
Whisper
概述
Whisper 是一個編碼器-解碼器(序列到序列)Transformer,在 680,000 小時帶標籤的音訊資料上進行了預訓練。如此大量的預訓練資料使得 Whisper 在英語和許多其他語言的音訊任務上實現了零樣本效能。解碼器使 Whisper 能夠將編碼器學習到的語音表示對映到有用的輸出,例如文字,而無需額外的微調。Whisper 可以直接開箱即用。
您可以在 Whisper 集合中找到所有原始的 Whisper 檢查點。
匯出到 Neuron
要在 Neuron 裝置上部署 🤗 Transformers 模型,您首先需要編譯模型並將其匯出為序列化格式以進行推理。下面有兩種編譯模型的方法,您可以選擇最適合您需求的一種:
選項 1:CLI
您可以使用 Optimum 命令列介面匯出模型,如下所示:
optimum-cli export neuron --model openai/whisper-tiny --task automatic-speech-recognition --batch_size 1 --sequence_length 128 --auto_cast all --auto_cast_type bf16 whisper_tiny_neuronx/
執行 optimum-cli export neuron --help
以顯示所有命令列選項及其描述。
選項 2:Python API
from optimum.neuron import NeuronWhisperForConditionalGeneration
compiler_args = {"auto_cast": "all", "auto_cast_type": "bf16"}
input_shapes = {"batch_size": 1, "sequence_length": 128}
neuron_model = NeuronWhisperForConditionalGeneration.from_pretrained(
"openai/whisper-tiny",
export=True,
inline_weights_to_neff=False,
**compiler_args,
**input_shapes,
)
# Save locally
neuron_model.save_pretrained("whisper_tiny_neuronx")
# Upload to the HuggingFace Hub
neuron_model.push_to_hub(
"whisper_tiny_neuronx", repository_id="my-neuron-repo" # Replace with your repo id, eg. "Jingya/whisper_tiny_neuronx"
)
使用示例
要使用我們剛剛匯出的模型,有兩種選擇。我們可以使用 NeuronWhisperForConditionalGeneration 類或使用 Pipeline
。下面的示例演示瞭如何使用這兩種方法自動將語音轉錄為文字。
使用 NeuronWhisperForConditionalGeneration
from datasets import load_dataset
from transformers import AutoProcessor
from optimum.neuron import NeuronWhisperForConditionalGeneration
# Select an audio file and read it:
ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
audio_sample = ds[0]["audio"]
# Use the model and processor to transcribe the audio:
processor = AutoProcessor.from_pretrained("Jingya/whisper_tiny_neuronx")
input_features = processor(
audio_sample["array"], sampling_rate=audio_sample["sampling_rate"], return_tensors="pt"
).input_features
# Inference
neuron_model = NeuronWhisperForConditionalGeneration.from_pretrained("Jingya/whisper_tiny_neuronx")
predicted_ids = neuron_model.generate(input_features)
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
# Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.
使用管道
from transformers import AutoProcessor
from optimum.neuron import NeuronWhisperForConditionalGeneration, pipeline
processor = AutoProcessor.from_pretrained("Jingya/whisper_tiny_neuronx")
neuron_model = NeuronWhisperForConditionalGeneration.from_pretrained("Jingya/whisper_tiny_neuronx")
pipeline = pipeline(
task="automatic-speech-recognition",
model=neuron_model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
)
pipeline("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac")
# I have a dream. Good one day. This nation will rise up. Live out the true meaning of its dream.
NeuronWhisperForConditionalGeneration
class optimum.neuron.NeuronWhisperForConditionalGeneration
< source >( encoder: ScriptModule decoder: ScriptModule config: PretrainedConfig model_save_dir: str | pathlib.Path | tempfile.TemporaryDirectory | None = None encoder_file_name: str | None = 'model.neuron' decoder_file_name: str | None = 'model.neuron' preprocessors: list | None = None neuron_configs: dict[str, 'NeuronDefaultConfig'] | None = None configs: dict[str, 'PretrainedConfig'] | None = None generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None **kwargs )
引數
- encoder (
torch.jit._script.ScriptModule
) — torch.jit._script.ScriptModule 是編碼器的 TorchScript 模組,嵌入了由 neuron(x) 編譯器編譯的 NEFF(Neuron 可執行檔案格式)。 - decoder (
torch.jit._script.ScriptModule
) — torch.jit._script.ScriptModule 是解碼器的 TorchScript 模組,嵌入了由 neuron(x) 編譯器編譯的 NEFF(Neuron 可執行檔案格式)。 - config (
transformers.PretrainedConfig
) — PretrainedConfig 是模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視optimum.neuron.modeling.NeuronTracedModel.from_pretrained
方法以載入模型權重。
帶有語言建模頭的 Whisper Neuron 模型,可用於自動語音識別。
此模型繼承自 ~neuron.modeling.NeuronTracedModel
。請檢視超類文件以瞭解庫為其所有模型實現的通用方法(例如下載或儲存)。
前向
< source >( input_features: torch.FloatTensor | None = None decoder_input_ids: torch.LongTensor | None = None encoder_outputs: tuple[torch.FloatTensor] | None = None **kwargs )
引數
- input_features (
torch.FloatTensor | None
,形狀為(batch_size, feature_size, sequence_length)
) — 從原始語音波形中提取的浮點值 mel 特徵。原始語音波形可以透過載入.flac
或.wav
音訊檔案到list[float]
或numpy.ndarray
型別的陣列中獲得,例如透過 soundfile 庫(pip install soundfile
)。為了將陣列準備成input_features
,應使用AutoFeatureExtractor
提取 mel 特徵,進行填充並轉換為torch.FloatTensor
型別的張量。詳見~WhisperFeatureExtractor.__call__
- decoder_input_ids (
torch.LongTensor | None
,形狀為(batch_size, max_sequence_length)
) — 解碼器輸入序列令牌在詞彙表中的索引。索引可以使用WhisperTokenizer
獲得。詳見PreTrainedTokenizer.encode
和PreTrainedTokenizer.__call__
。由於 Whisper 尚不支援快取,因此需要將其填充到用於編譯的sequence_length
。 - encoder_outputs (
tuple[torch.FloatTensor | None]
) — 元組,包含形狀為(batch_size, sequence_length, hidden_size)
的last_hidden_state
,是編碼器最後一層輸出的隱藏狀態序列。用於解碼器的交叉注意力。
NeuronWhisperForConditionalGeneration
的前向方法,覆蓋了 __call__
特殊方法。僅接受在編譯步驟中跟蹤的輸入。在推理過程中提供的任何額外輸入都將被忽略。要包含額外輸入,請使用這些輸入重新編譯模型。