Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

5.3K
Vistas
Cómo liberar memoria GPU en PyTorch

Tengo una lista de oraciones para las que estoy tratando de calcular la perplejidad, usando varios modelos usando este código:

 from transformers import AutoModelForMaskedLM, AutoTokenizer import torch import numpy as np model_name = 'cointegrated/rubert-tiny' model = AutoModelForMaskedLM.from_pretrained(model_name).cuda() tokenizer = AutoTokenizer.from_pretrained(model_name) def score(model, tokenizer, sentence): tensor_input = tokenizer.encode(sentence, return_tensors='pt') repeat_input = tensor_input.repeat(tensor_input.size(-1)-2, 1) mask = torch.ones(tensor_input.size(-1) - 1).diag(1)[:-2] masked_input = repeat_input.masked_fill(mask == 1, tokenizer.mask_token_id) labels = repeat_input.masked_fill( masked_input != tokenizer.mask_token_id, -100) with torch.inference_mode(): loss = model(masked_input.cuda(), labels=labels.cuda()).loss return np.exp(loss.item()) print(score(sentence='London is the capital of Great Britain.', model=model, tokenizer=tokenizer)) # 4.541251105675365

La mayoría de los modelos funcionan bien, pero algunas oraciones parecen arrojar un error:

RuntimeError: CUDA out of memory. Tried to allocate 10.34 GiB (GPU 0; 23.69 GiB total capacity; 10.97 GiB already allocated; 6.94 GiB free; 14.69 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

Lo cual tiene sentido porque algunos son muy largos. Entonces, lo que hice fue agregar algo como try, except RuntimeError, pass .

Esto pareció funcionar hasta alrededor de 210 oraciones, y luego solo muestra el error:

CUDA error: an illegal memory access was encountered CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

Encontré esto que tenía muchas discusiones e ideas, ¿algunas estaban relacionadas con posibles GPU defectuosas? Pero sé que mi GPU funciona como este código exacto funciona para otros modelos. Aquí también se habla sobre el tamaño del lote, por lo que pensé que potencialmente se relaciona con la liberación de memoria.

Intenté ejecutar torch.cuda.empty_cache() para liberar la memoria como aquí después de algunas épocas, pero no funcionó (arrojó el mismo error).

Actualización: filtré oraciones con una longitud superior a 550 y esto parece eliminar el CUDA error: an illegal memory access was encountered CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1. error.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Debe aplicar gc.collect() antes torch.cuda.empty_cache() . También extraigo el modelo de la CPU y luego elimino ese modelo y su punto de control. Pruebe lo que funciona para usted:

 import gc model.cpu() del model, checkpoint gc.collect() torch.cuda.empty_cache()
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda