Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

5.3K
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda