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__
特殊方法。仅接受在编译步骤中跟踪的输入。在推理过程中提供的任何额外输入都将被忽略。要包含额外输入,请使用这些输入重新编译模型。