2017-04-06 4 views
0

J'utilise une machine distante, qui a 2 GPU, afin d'exécuter un script Python qui a du code CUDA. Afin de trouver où je peux améliorer la performance de mon code, j'essaie d'utiliser nvprof.nvprof utilise tous les GPU disponibles lors du profilage du script python

J'ai mis sur mon code que je veux seulement utiliser l'un des 2 GPU sur la machine distante, bien que, en appelant nvprof --profile-child-processes ./myscript.py, un processus avec le même ID soit démarré sur chacun des GPU.

Y at-il un argument que je peux donner nvprof afin de n'utiliser qu'un seul GPU pour le profilage?

+3

utilisez la variable d'environnement 'CUDA_VISIBLE_DEVICES =" 0 "' pour restreindre l'accès 'nvprof'. Par exemple 'CUDA_VISIBLE_DEVICES =" 0 "nvprof --profile-child-processes./Myscript.py' limiterait nvprof au premier GPU, et' CUDA_VISIBLE_DEVICES = "1" nvprof --profile-child-processes ./myscript.py 'le limiterait au 2ème GPU, etc. L'env var est documenté [ici] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#env-vars). 'nvprof --help' montre qu'il possède un commutateur' --devices' qui peut aussi limiter certaines activités à certains GPU. –

Répondre

0

Le CUDA environment variableCUDA_VISIBLE_DEVICES peut être utilisé pour restreindre l'API d'exécution CUDA afin d'utiliser uniquement certains GPU. Vous pouvez l'essayer comme ceci:

CUDA_VISIBLE_DEVICES="0" nvprof --profile-child-processes ./myscript.py 

En outre, nvprof est documented et a également une aide en ligne de commande via nvprof --help. En regardant l'aide en ligne de commande, je vois un commutateur --devices qui semble limiter au moins certaines fonctions pour n'utiliser que des GPU particuliers. Vous pouvez l'essayer avec:

nvprof --devices 0 --profile-child-processes ./myscript.py