Cortazar-Dice / scripts /utils /gpu_probe.py
macayaven's picture
Upload folder using huggingface_hub
335196b verified
Raw
History Blame Contribute Delete
5.02 kB
import os
import torch
# --- MONKEYPATCHES START ---
try:
import torchaudio
# Patch 1: AudioMetaData
if not hasattr(torchaudio, "AudioMetaData"):
class AudioMetaData:
def __init__(self, sample_rate, num_frames, num_channels, bits_per_sample, encoding):
self.sample_rate = sample_rate
self.num_frames = num_frames
self.num_channels = num_channels
self.bits_per_sample = bits_per_sample
self.encoding = encoding
torchaudio.AudioMetaData = AudioMetaData
# Patch 2: list_audio_backends
if not hasattr(torchaudio, "list_audio_backends"):
torchaudio.list_audio_backends = lambda: ["soundfile"]
# Patch 3: load/info (Mock)
import soundfile as sf
def robust_load(filepath, **kwargs):
data, sr = sf.read(filepath, dtype="float32") # Alway float32
return torch.tensor(data).float().unsqueeze(0), sr
torchaudio.load = robust_load
class MockAudioInfo:
def __init__(self, frames, samplerate, channels):
self.num_frames = frames
self.sample_rate = samplerate
self.num_channels = channels
def robust_info(filepath, **kwargs):
s = sf.info(filepath)
return MockAudioInfo(s.frames, s.samplerate, s.channels)
torchaudio.info = robust_info
except ImportError:
pass
import semver
# Patch 4: Semver
original_parse = semver.VersionInfo.parse
def lenient_parse(version_str):
try:
return original_parse(version_str)
except ValueError:
return semver.VersionInfo(0, 0, 0) # Dummy
semver.VersionInfo.parse = lenient_parse
# --- MONKEYPATCHES END ---
from transformers import pipeline
from pyannote.audio import Pipeline, Model, Inference
def test_whisper():
print("\n--- Testing Whisper on GPU ---")
try:
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Device: {device}")
if device == "cpu":
print("FAIL: CUDA not available")
return False
pipe = pipeline(
"automatic-speech-recognition", model="openai/whisper-large-v3", torch_dtype=torch.float16, device=device
)
# Dummy inference
# Generate dummy 1s audio
import numpy as np
dummy_audio = np.zeros(16000, dtype=np.float32)
print("Running Inference...")
pipe(dummy_audio)
print("SUCCESS: Whisper runs on GPU")
return True
except Exception as e:
print(f"FAIL: Whisper crashed on GPU: {e}")
import traceback
traceback.print_exc()
return False
def test_pyannote_embedding():
print("\n--- Testing Pyannote Embedding on GPU ---")
try:
device = torch.device("cuda")
print("Loading Model...")
model = Model.from_pretrained(
"pyannote/wespeaker-voxceleb-resnet34-LM", use_auth_token=os.environ.get("HF_TOKEN")
)
model.to(device)
inference = Inference(model, window="whole", device=device)
# Dummy file (needs a real path or Mock)
# We'll creating a dummy wav
import soundfile as sf
import numpy as np
dummy_wav = "temp_gpu_test.wav"
sf.write(dummy_wav, np.random.uniform(-1, 1, 16000), 16000)
print("Running Embedding...")
inference(dummy_wav)
print("SUCCESS: Pyannote Embedding runs on GPU")
os.remove(dummy_wav)
return True
except Exception as e:
print(f"FAIL: Pyannote Embedding crashed on GPU: {e}")
import traceback
traceback.print_exc()
if os.path.exists("temp_gpu_test.wav"):
os.remove("temp_gpu_test.wav")
return False
def test_pyannote_diarization():
print("\n--- Testing Pyannote Diarization on GPU ---")
try:
device = torch.device("cuda")
print("Loading Pipeline...")
pipeline = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1", use_auth_token=os.environ.get("HF_TOKEN")
)
pipeline.to(device)
dummy_wav = "temp_gpu_test_dia.wav"
import soundfile as sf
import numpy as np
sf.write(dummy_wav, np.random.uniform(-1, 1, 16000 * 5), 16000) # 5s
print("Running Diarization...")
pipeline(dummy_wav)
print("SUCCESS: Pyannote Diarization runs on GPU")
os.remove(dummy_wav)
return True
except Exception as e:
print(f"FAIL: Pyannote Diarization crashed on GPU: {e}")
import traceback
traceback.print_exc()
if os.path.exists(dummy_wav):
os.remove(dummy_wav)
return False
if __name__ == "__main__":
w_ok = test_whisper()
e_ok = test_pyannote_embedding()
d_ok = test_pyannote_diarization()
print("\nSUMMARY:")
print(f"Whisper: {'OK' if w_ok else 'FAIL'}")
print(f"Embedding: {'OK' if e_ok else 'FAIL'}")
print(f"Diarization: {'OK' if d_ok else 'FAIL'}")