Mise à jour : cette question est liée à l'article "Paramètres de l'ordinateur portable" de Google Colab : Accélérateur matériel : GPU". Cette question a été écrite avant l'ajout de l'option "TPU".
Après avoir lu de nombreuses annonces enthousiastes sur le fait que Google Colaboratory fournissait gratuitement le GPU Tesla K80, j'ai essayé d'exécuter fast.ai pour qu'il ne se termine jamais, manquant rapidement de mémoire. J'ai commencé à chercher pourquoi.
L'essentiel est que la "Tesla K80 gratuite" n'est pas "gratuite" pour tous - pour certains, seule une petite partie est "gratuite".
Je me connecte à Google Colab depuis la côte ouest du Canada et je ne dispose que de 0,5 Go de ce qui est censé être une RAM de 24 Go pour le GPU. Les autres utilisateurs ont accès à 11 Go de mémoire vive du GPU.
Il est clair que 0,5 Go de RAM du GPU est insuffisant pour la plupart des travaux de ML/DL.
Si vous n'êtes pas sûr de ce que vous obtenez, voici une petite fonction de débogage que j'ai bricolée (elle ne fonctionne qu'avec le paramètre GPU de l'ordinateur portable) :
# 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()
En l'exécutant dans un notebook Jupyter avant d'exécuter tout autre code, j'obtiens :
Gen RAM Free: 11.6 GB | Proc size: 666.0 MB
GPU RAM Free: 566MB | Used: 10873MB | Util 95% | Total 11439MB
Les utilisateurs chanceux qui auront accès à la carte complète verront :
Gen RAM Free: 11.6 GB | Proc size: 666.0 MB
GPU RAM Free: 11439MB | Used: 0MB | Util 0% | Total 11439MB
Voyez-vous un défaut dans mon calcul de la disponibilité de la RAM du GPU, emprunté à GPUtil ?
Pouvez-vous confirmer que vous obtenez des résultats similaires si vous exécutez ce code sur Google Colab notebook ?
Si mes calculs sont corrects, y a-t-il un moyen d'obtenir plus de cette mémoire vive du GPU sur la boîte libre ?
mise à jour : je ne sais pas pourquoi certains d'entre nous reçoivent 1/20e de ce que d'autres utilisateurs reçoivent. Par exemple, la personne qui m'a aidé à déboguer ceci est en Inde et il reçoit la totalité !
note : s'il vous plaît, n'envoyez plus de suggestions sur la façon de tuer les ordinateurs portables potentiellement bloqués/en fuite/parallèles qui pourraient consommer des parties du GPU. Quelle que soit la façon dont vous le découpez, si vous êtes dans le même bateau que moi et que vous exécutez le code de débogage, vous verrez que vous obtenez toujours un total de 5% de RAM du GPU (à partir de cette mise à jour encore).
0 votes
Une solution à ce problème ? Pourquoi j'obtiens des résultats différents lorsque je fais !cat /proc/meminfo
0 votes
Yep, même problème, juste autour de 500 mb de ram GPU...description trompeuse :(
3 votes
Essayez les outils de science des données open source d'IBM (cognitiveclass.ai), car ils disposent également d'un GPU gratuit avec des carnets de notes Jupyter.
1 votes
J'ai ramené cette question à un état où il y a effectivement un question en elle. Si vous avez effectué des recherches plus approfondies et trouvé une réponse, l'endroit approprié pour le faire est la case réponse. Il est incorrect de mettre à jour la question avec une solution.
0 votes
@ChrisHayes, je comprends votre intention, mais ce n'est pas correct, puisque votre rollback a supprimé tout un tas de détails pertinents qui ont maintenant disparu. Si vous souhaitez suggérer une meilleure formulation qui corresponde mieux aux règles de cette communauté, veuillez le faire, mais sinon, veuillez revenir sur votre rollback. Merci. p.s. J'ai déjà posté le fichier réponse .
0 votes
@stason votre printm() est merveilleux mais malheureusement, google semble avoir fait quelques changements structurels donc il ne fonctionne pas (nvidia-smi non trouvé). Pouvez-vous poster une version mise à jour ?
0 votes
@AgileBean, c'est parce que vous êtes sur la configuration TPU.
printm()
est pour la configuration du GPU Nvidia. J'ai mis à jour la question pour refléter cela. Merci de m'avoir prévenu.0 votes
Avez-vous essayé de paramétrer la configuration des sessions TensorFlow ? par exemple
gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=1
etsess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)
0 votes
Merci - mais le problème n'a absolument rien à voir avec la TF. Je ne sais pas pourquoi vous avez pensé que cela avait un rapport avec la TF.
0 votes
J'obtiens Gen RAM Free : 26.3 GB | Proc size : 349.4 MB GPU RAM Free : 16280MB | Used : 0MB | Util 0% | Total 16280MB ! Cela signifie-t-il que j'ai 26,3 Go à utiliser ?