actualización: esta pregunta está relacionada con la "Configuración del portátil: Acelerador de hardware: GPU" de Google Colab. Esta pregunta se escribió antes de que se agregara la opción "TPU".
Al leer varios anuncios emocionados sobre Google Colaboratory que proporciona la GPU Tesla K80 gratuita, traté de ejecutar la lección fast.ai para que nunca se completara, agotando rápidamente la memoria. Empecé a investigar por qué.
La conclusión es que el "Tesla K80 gratuito" no es "gratuito" para todos; para algunos, sólo una pequeña parte es "gratuito".
Me conecto a Google Colab desde la costa oeste de Canadá y obtengo solo 0.5GB de lo que se supone que es una GPU RAM de 24GB. Otros usuarios obtienen acceso a 11 GB de RAM GPU.
Claramente, la RAM GPU de 0.5GB es insuficiente para la mayoría de los trabajos de ML / DL.
Si no está seguro de lo que obtiene, aquí hay una pequeña función de depuración que reuní (solo funciona con la configuración de GPU del portátil):
# memory footprint support libraries/code
!ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi
!pip install gputil
!pip install psutil
!pip install humanize
import psutil
import humanize
import os
import GPUtil as GPU
GPUs = GPU.getGPUs()
# XXX: only one GPU on Colab and isn’t guaranteed
gpu = GPUs[0]
def printm():
process = psutil.Process(os.getpid())
print("Gen RAM Free: " + humanize.naturalsize( psutil.virtual_memory().available ), " | Proc size: " + humanize.naturalsize( process.memory_info().rss))
print("GPU RAM Free: {0:.0f}MB | Used: {1:.0f}MB | Util {2:3.0f}% | Total {3:.0f}MB".format(gpu.memoryFree, gpu.memoryUsed, gpu.memoryUtil*100, gpu.memoryTotal))
printm()
Ejecutarlo en un cuaderno jupyter antes de ejecutar cualquier otro código me da:
Gen RAM Free: 11.6 GB | Proc size: 666.0 MB
GPU RAM Free: 566MB | Used: 10873MB | Util 95% | Total 11439MB
Los usuarios afortunados que tengan acceso a la tarjeta completa verán:
Gen RAM Free: 11.6 GB | Proc size: 666.0 MB
GPU RAM Free: 11439MB | Used: 0MB | Util 0% | Total 11439MB
¿Ves algún defecto en mi cálculo de la disponibilidad de RAM de la GPU, tomada de GPUtil?
¿Puede confirmar que obtiene resultados similares si ejecuta este código en el portátil Google Colab?
Si mis cálculos son correctos, ¿hay alguna forma de obtener más RAM de la GPU en la caja gratuita?
actualización: No estoy seguro de por qué algunos de nosotros obtenemos una vigésima parte de lo que obtienen otros usuarios. por ejemplo, la persona que me ayudó a depurar esto es de la India y ¡lo entiende todo!
nota : no envíe más sugerencias sobre cómo eliminar los portátiles paralelos / fugitivos que podrían estar consumiendo partes de la GPU. No importa cómo lo corte, si está en el mismo barco que yo y ejecutara el código de depuración, vería que aún obtiene un total del 5% de la RAM de la GPU (aún a partir de esta actualización).
Respuestas:
Entonces, para evitar otra docena de respuestas que sugieran inválido en el contexto de esta sugerencia de hilo para! Kill -9 -1, cerremos este hilo:
La respuesta es simple:
Al momento de escribir estas líneas, Google simplemente da solo el 5% de la GPU a algunos de nosotros, mientras que el 100% a los demás. Período.
Actualización de diciembre de 2019: el problema aún existe; los votos a favor de esta pregunta continúan.
Actualización de marzo de 2019: un año después, un empleado de Google @AmiF comentó sobre el estado de las cosas, afirmando que el problema no existe, y cualquiera que parezca tener este problema debe simplemente restablecer su tiempo de ejecución para recuperar la memoria. Sin embargo, los votos a favor continúan, lo que para mí esto me dice que el problema aún existe, a pesar de la sugerencia de @ AmiF de lo contrario.
Actualización de diciembre de 2018: tengo la teoría de que Google puede tener una lista negra de ciertas cuentas, o quizás huellas digitales del navegador, cuando sus robots detectan un comportamiento no estándar. Podría ser una coincidencia total, pero durante bastante tiempo tuve un problema con Google Re-captcha en cualquier sitio web que lo requiriera, donde tenía que pasar por docenas de acertijos antes de que me permitieran pasar, a menudo me toma más de 10 minutos para lograrlo. Esto duró muchos meses. De repente, a partir de este mes no tengo ningún rompecabezas y cualquier re-captcha de Google se resuelve con un solo clic del mouse, como solía ser hace casi un año.
¿Y por qué estoy contando esta historia? Bueno, porque al mismo tiempo me dieron el 100% de la RAM de la GPU en Colab . Es por eso que sospecho que si estás en una lista negra teórica de Google, entonces no se confía en ti para recibir muchos recursos de forma gratuita. Me pregunto si alguno de ustedes encuentra la misma correlación entre el acceso limitado a la GPU y la pesadilla Re-captcha. Como dije, también podría ser una coincidencia total.
fuente
Anoche ejecuté tu fragmento y obtuve exactamente lo que obtuviste:
pero hoy:
Creo que la razón más probable es que las GPU se comparten entre VM, por lo que cada vez que reinicia el tiempo de ejecución, tiene la oportunidad de cambiar la GPU, y también existe la probabilidad de que cambie a una que esté siendo utilizada por otros usuarios.
ACTUALIZADO: Resulta que puedo usar la GPU normalmente incluso cuando la RAM libre de la GPU es de 504 MB, lo que pensé que era la causa de ResourceExhaustedError que obtuve anoche.
fuente
RuntimeError: cuda runtime error (2) : out of memory at /pytorch/torch/lib/THC/generated/../THCTensorMathCompare.cuh:84
Si ejecuta una celda que solo tiene
! Kill -9 -1
, eso hará que todo el estado de su tiempo de ejecución (incluida la memoria, el sistema de archivos y la GPU) se borre y se reinicie. Espere 30-60 segundos y presione el botón CONECTAR en la parte superior derecha para volver a conectarse.
fuente
Descripción engañosa por parte de Google. Yo también me emocioné demasiado, supongo. Configuré todo, cargué los datos y ahora no puedo hacer nada con ellos debido a que solo tengo 500Mb de memoria asignada a mi computadora portátil.
fuente
simplemente dele una tarea pesada a google colab, nos pedirá que cambiemos a 25 gb de ram.
ejemplo, ejecute este código dos veces:
luego haga clic en obtener más ram :)
fuente
Encuentre el pid de Python3 y elimine el pid. Por favor vea la imagen de abajo
Nota: elimine solo python3 (pid = 130), no jupyter python (122).
fuente
GPU RAM Free: 564MB
Reinicie el kernel de Jupyter IPython:
fuente
GPU RAM Free: 564MB
CMD/CTRL+M
¡No estoy seguro de si esta lista negra es cierta! Es bastante posible que los núcleos se compartan entre los usuarios. También ejecuté la prueba y mis resultados son los siguientes:
Gen RAM libre: 12,9 GB | Tamaño de proceso: 142,8 MB RAM GPU Libre: 11441 MB | Usado: 0 MB | Util 0% | Total 11441 MB
Parece que también estoy obteniendo el núcleo completo. Sin embargo, lo ejecuté varias veces y obtuve el mismo resultado. Tal vez repita este control varias veces durante el día para ver si hay algún cambio.
fuente
Creo que si tenemos varios cuadernos abiertos. El simple hecho de cerrarlo no detiene el proceso. No he descubierto cómo detenerlo. Pero usé top para encontrar el PID del python3 que se estaba ejecutando durante más tiempo y usaba la mayor parte de la memoria y lo maté. Todo volvió a la normalidad ahora.
fuente