24G显存出现CUDA error: out of memory正常吗?

Aperta
#165 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Da chiarire
Stato di attività
Tranquilla
Stack tecnologico
python, pytorch

Direzione di ricerca

Inizia eseguendo lo snippet di inferenza Python fornito con la configurazione CUDA da 24G indicata e verifica in quale punto la generazione esaurisce la memoria. Esamina il caricamento del modello, la selezione del backend di attention, la dimensione del batch e le impostazioni di max_new_tokens mostrate nell’issue. Il lavoro è completato quando è stato stabilito se il fallimento è riproducibile e sono state documentate le condizioni rilevanti o la configurazione richiesta.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

from pathlib import Path
import importlib.util
import torch
import torchaudio
from transformers import AutoModel, AutoProcessor
# Disable the broken cuDNN SDPA backend
torch.backends.cuda.enable_cudnn_sdp(False)
# Keep these enabled as fallbacks
torch.backends.cuda.enable_flash_sdp(True)
torch.backends.cuda.enable_mem_efficient_sdp(True)
torch.backends.cuda.enable_math_sdp(True)


pretrained_model_name_or_path = "OpenMOSS-Team/MOSS-TTS-v1.5"
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.bfloat16 if device == "cuda" else torch.float32

def resolve_attn_implementation() -> str:
   # Prefer FlashAttention 2 when package + device conditions are met.
   if (
       device == "cuda"
       and importlib.util.find_spec("flash_attn") is not None
       and dtype in {torch.float16, torch.bfloat16}
   ):
       major, _ = torch.cuda.get_device_capability()
       if major >= 8:
           return "flash_attention_2"

   # CUDA fallback: use PyTorch SDPA kernels.
   if device == "cuda":
       return "sdpa"

   # CPU fallback.
   return "eager"


attn_implementation = resolve_attn_implementation()
print(f"[INFO] Using attn_implementation={attn_implementation}")

processor = AutoProcessor.from_pretrained(
   pretrained_model_name_or_path,
   trust_remote_code=True,
)
processor.audio_tokenizer = processor.audio_tokenizer.to(device)

text_1 = "法国天文学家希望与巴黎连接的重要地点之一是乌拉尼堡,即16世纪先驱天文学家第谷·布拉赫的旧天文台。"

# Use audio from ./assets/audio to avoid downloading from the cloud.
ref_audio_1 = "/data/code/python/django/dub_sys/media/878/index-tts/101.wav"


conversations = [
   # Direct TTS (no reference). Language tags are recommended in v1.5.
   [processor.build_user_message(text=text_1)],
  
   # Voice cloning (with reference)
   [processor.build_user_message(text=text_1, reference=[ref_audio_1])],
]

model = AutoModel.from_pretrained(
   pretrained_model_name_or_path,
   trust_remote_code=True,
   attn_implementation=attn_implementation,
   torch_dtype=dtype,
).to(device)
model.eval()

batch_size = 1

save_dir = Path("inference_root")
save_dir.mkdir(exist_ok=True, parents=True)
sample_idx = 0
with torch.no_grad():
   for start in range(0, len(conversations), batch_size):
       batch_conversations = conversations[start : start + batch_size]
       batch = processor(batch_conversations, mode="generation")
       input_ids = batch["input_ids"].to(device)
       attention_mask = batch["attention_mask"].to(device)

       outputs = model.generate(
           input_ids=input_ids,
           attention_mask=attention_mask,
           max_new_tokens=4096,
       )

       for message in processor.decode(outputs):
           audio = message.audio_codes_list[0]
           out_path = save_dir / f"sample{sample_idx}.wav"
           sample_idx += 1
           torchaudio.save(out_path, audio.unsqueeze(0), processor.model_config.sampling_rate)


Lingua principale
Python
Stelle
4.3k
Fork
383
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di OpenMOSS/MOSS-TTS

Tutte le issue di OpenMOSS/MOSS-TTS

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.