AWS Trainium & Inferentia 文档

Whisper

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

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

< >

( 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。请查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存)。

前向

< >

( 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.encodePreTrainedTokenizer.__call__。由于 Whisper 尚不支持缓存,因此需要将其填充到用于编译的 sequence_length
  • encoder_outputs (tuple[torch.FloatTensor | None]) — 元组,包含形状为 (batch_size, sequence_length, hidden_size)last_hidden_state,是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。

NeuronWhisperForConditionalGeneration 的前向方法,覆盖了 __call__ 特殊方法。仅接受在编译步骤中跟踪的输入。在推理过程中提供的任何额外输入都将被忽略。要包含额外输入,请使用这些输入重新编译模型。