Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verwenden Sie OpenAI Whisper large-v3-turbo , um eine Charge englischer Sprachaufnahmen auf einer angeschlossenen A10 AI Runtime zu transkribieren. Dieses Notizbuch zeigt, wie man:
- Laden Sie das Whisper-Groß-V3-Turbo-Modell mit der Transformers-Pipeline.
- Erstellen Sie eine Charge von Audiosamples aus dem LibriSpeech-Testset.
- Visualisieren Sie die Wellenform und das Spektrogramm jeder Probe.
- Führe eine Batch-Transkription aus und vergleiche deren Durchsatz mit der sequentiellen Inferenz.
Note
Dieses Beispiel benötigt die Databricks-KI-Umgebung Version 6 oder höher.
Verbindung zu Serverless GPU-Compute herstellen
- Im Notebook-Compute-Selektor wählen Sie Serverless GPU aus.
- Im Environment-Panel wählen Sie den A10-Beschleuniger und die KI-v6-Umgebung aus.
- Klicken Sie auf Anwenden und bestätigen Sie dann die Umgebung.
Das Whisper-Modell und der LibriSpeech-Beispieldatensatz sind öffentlich und erfordern keine Hugging Face-Authentifizierung.
Importieren von Bibliotheken
Die KI-Umgebung umfasst die PyTorch-, Transformers- und Hugging Face Datasets-Pakete, die in diesem Notizbuch verwendet werden, sodass keine Paketinstallation erforderlich ist. Diese Zelle importiert sie und bestätigt, dass eine GPU angeschlossen ist.
import torch
import transformers
import datasets
print(f"Environment")
print(f" PyTorch: {torch.__version__}")
print(f" Transformers: {transformers.__version__}")
print(f" Datasets: {datasets.__version__}")
print(f"\nGPU")
print(f" Available: {torch.cuda.is_available()}")
if torch.cuda.is_available():
print(f" Device: {torch.cuda.get_device_name(0)}")
mem_gb = torch.cuda.get_device_properties(0).total_memory / 1e9
print(f" Memory: {mem_gb:.1f} GB")
Environment
PyTorch: 2.11.0+cu130
Transformers: 5.8.1
Datasets: 4.8.5
GPU
Available: True
Device: NVIDIA A10G
Memory: 23.7 GB
Lade das Whisper-Modell
Load openai/whisper-large-v3-turbo, ein destilliertes 809M-Parameter-Modell, das nahezu modernste Genauigkeit bei höherer Inferenzgeschwindigkeit liefert. Die Transformers-Pipeline übernimmt die Extraktion von Merkmalen, Tokenisierung und Dekodierung in einem einzigen Aufruf.
from transformers import pipeline
import torch
whisper_pipe = pipeline(
"automatic-speech-recognition",
model="openai/whisper-large-v3-turbo",
torch_dtype=torch.float16,
device="cuda",
)
print(f"Model loaded on {whisper_pipe.device}")
Model loaded on cuda
Audiosamples laden und erkunden
Laden Sie das LibriSpeech ASR-Testset , eine Sammlung sauberer englischer Sprachaufnahmen mit Referenztranskriptionen, und spielen Sie die erste Probe ab.
from datasets import load_dataset, Audio as AudioFeature
from IPython.display import display, Audio
import numpy as np
import soundfile as sf
import io
# Load the LibriSpeech test samples (decode=False to avoid torchcodec/FFmpeg dependency)
ds = load_dataset(
"hf-internal-testing/librispeech_asr_dummy", "clean", split="validation"
)
ds = ds.cast_column("audio", AudioFeature(decode=False))
print(f"Loaded {len(ds)} audio samples\n")
def decode_audio(raw):
"""Decode raw audio bytes with soundfile."""
arr, sr = sf.read(io.BytesIO(raw["bytes"]))
return {"array": arr, "sampling_rate": sr}
# Show metadata for first few samples
for i in range(5):
audio = decode_audio(ds[i]["audio"])
duration = len(audio["array"]) / audio["sampling_rate"]
text_preview = ds[i]["text"][:80]
print(f" Sample {i+1}: {duration:.2f}s | {audio['sampling_rate']} Hz | \"{text_preview}...\"")
# Play the first sample inline
print("\n>> Playing Sample 1:")
audio_0 = decode_audio(ds[0]["audio"])
display(Audio(audio_0["array"], rate=audio_0["sampling_rate"]))
Loaded 73 audio samples
Sample 1: 5.86s | 16000 Hz | "MISTER QUILTER IS THE APOSTLE OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME H..."
Sample 2: 4.82s | 16000 Hz | "NOR IS MISTER QUILTER'S MANNER LESS INTERESTING THAN HIS MATTER..."
Sample 3: 12.48s | 16000 Hz | "HE TELLS US THAT AT THIS FESTIVE SEASON OF THE YEAR WITH CHRISTMAS AND ROAST BEE..."
Sample 4: 9.90s | 16000 Hz | "HE HAS GRAVE DOUBTS WHETHER SIR FREDERICK LEIGHTON'S WORK IS REALLY GREEK AFTER ..."
Sample 5: 29.40s | 16000 Hz | "LINNELL'S PICTURES ARE A SORT OF UP GUARDS AND AT EM PAINTINGS AND MASON'S EXQUI..."
>> Playing Sample 1:
Visualisieren Sie die Audiowellenformen
Zeichnen Sie die Wellenform und das Spektrogramm jeder Probe nebeneinander. Die Wellenform zeigt die Amplitude über die Zeit, und das Spektrogramm zeigt den Frequenzgehalt, bei dem sich die Sprachenergie im Sprachband von 100 bis 4.000 Hz konzentriert.
import matplotlib.pyplot as plt
import numpy as np
NUM_SAMPLES = 4
fig, axes = plt.subplots(NUM_SAMPLES, 2, figsize=(16, 3 * NUM_SAMPLES))
fig.suptitle(
"Waveform & Spectrogram Profiles", fontsize=16, fontweight="bold", y=1.01
)
for i in range(NUM_SAMPLES):
audio = decode_audio(ds[i]["audio"])
samples = audio["array"]
sr = audio["sampling_rate"]
t = np.arange(len(samples)) / sr
# --- Waveform ---
ax_wave = axes[i, 0]
ax_wave.plot(t, samples, linewidth=0.4, color="#1f77b4", alpha=0.8)
ax_wave.fill_between(t, samples, alpha=0.15, color="#1f77b4")
ax_wave.set_ylabel("Amplitude", fontsize=9)
ax_wave.set_title(f"Sample {i+1} — Waveform ({len(samples)/sr:.1f}s)", fontsize=10)
ax_wave.set_xlim(0, t[-1])
ax_wave.grid(True, alpha=0.3)
if i == NUM_SAMPLES - 1:
ax_wave.set_xlabel("Time (seconds)", fontsize=9)
# --- Spectrogram ---
ax_spec = axes[i, 1]
ax_spec.specgram(samples, Fs=sr, NFFT=1024, noverlap=512, cmap="magma")
ax_spec.set_ylabel("Frequency (Hz)", fontsize=9)
ax_spec.set_title(f"Sample {i+1} — Spectrogram", fontsize=10)
ax_spec.set_ylim(0, 8000) # Focus on speech frequencies
if i == NUM_SAMPLES - 1:
ax_spec.set_xlabel("Time (seconds)", fontsize=9)
plt.tight_layout()
plt.show()
Transkribiere eine einzelne Probe
Transkribiere eine Probe, um die Pipeline zu verifizieren, und vergleiche dann die Vorhersage mit dem Referenztext.
import time
audio_input = decode_audio(ds[0]["audio"])
start = time.perf_counter()
result = whisper_pipe(
audio_input["array"],
generate_kwargs={"language": "en"},
)
elapsed = time.perf_counter() - start
duration = len(audio_input["array"]) / audio_input["sampling_rate"]
print(f"Inference time: {elapsed:.2f}s for {duration:.1f}s audio ({duration/elapsed:.1f}x realtime)")
print(f"\nPredicted: {result['text'].strip()}")
print(f"Reference: {ds[0]['text']}")
Inference time: 12.23s for 5.9s audio (0.5x realtime)
Predicted: Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel.
Reference: MISTER QUILTER IS THE APOSTLE OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME HIS GOSPEL
Batch-Inferenz ausführen
Transkribiere alle Samples mit einem konfigurierbaren batch_size. Batching ermöglicht es der GPU, mehrere Audioclips parallel zu verarbeiten, was den Durchsatz gegenüber sequentieller Inferenz verbessert. Diese Zelle vermittelt außerdem eine sequenzielle Basislinie zum Vergleich.
import time
import pandas as pd
_decoded = [decode_audio(ds[i]["audio"]) for i in range(len(ds))]
audio_inputs = [d["array"] for d in _decoded]
_sr = _decoded[0]["sampling_rate"]
# --- Sequential baseline ---
start = time.perf_counter()
seq_results = [
whisper_pipe(a, generate_kwargs={"language": "en"}) for a in audio_inputs
]
seq_time = time.perf_counter() - start
# --- Batched inference ---
start = time.perf_counter()
batch_results = whisper_pipe(
audio_inputs, batch_size=8, generate_kwargs={"language": "en"}
)
batch_time = time.perf_counter() - start
total_audio_sec = sum(
len(a) / _sr for a in audio_inputs
)
print(f"Performance Comparison ({len(audio_inputs)} samples, {total_audio_sec:.1f}s total audio)")
print(f" Sequential: {seq_time:.2f}s ({total_audio_sec/seq_time:.1f}x realtime)")
print(f" Batched (8): {batch_time:.2f}s ({total_audio_sec/batch_time:.1f}x realtime)")
print(f" Speedup: {seq_time/batch_time:.2f}x\n")
# --- Results table ---
rows = []
for i, res in enumerate(batch_results):
duration = len(audio_inputs[i]) / _sr
rows.append({
"Sample": i + 1,
"Duration (s)": round(duration, 1),
"Transcription": res["text"].strip(),
"Reference": ds[i]["text"],
})
df = pd.DataFrame(rows)
display(df)
Performance Comparison (73 samples, 481.0s total audio)
Sequential: 16.02s (30.0x realtime)
Batched (8): 9.56s (50.3x realtime)
Speedup: 1.68x
Zusammenfassung
Dieses Notizbuch zeigte:
-
Zero-Setup-GPU-Inferenz: Die KI-Laufzeitumgebung wird mit
torch,transformers, unddatasetsvorinstalliert ausgeliefert; nicht%pip installnötig -
Inline-Audiowiedergabe: Hören Sie sich Samples direkt im Notizbuch mit
IPython.display.Audio -
Wellenform- und Spektrogramm-Visualisierung: gerendert mit
matplotlib, ebenfalls vorinstalliert -
Effiziente Batch-Inferenz: Verwendung des Parameters
batch_sizefür GPU-parallele Transkription - Whisper large-v3-turbo: ein schnelles, präzises Modell für Sprech-zu-Text in Serienqualität
Um dies für Ihre eigenen Daten anzupassen, ersetzen Sie den HuggingFace-Datensatz durch Audiodateien von einem Unity-Katalogvolumen oder Cloud-Speicherpfad.