Me gustaría saber si pytorch
está usando mi GPU. Es posible detectar nvidia-smi
si hay alguna actividad de la GPU durante el proceso, pero quiero algo escrito en un python
script.
¿Hay una manera de hacerlo?
Esto va a funcionar :
In [1]: import torch
In [2]: torch.cuda.current_device()
Out[2]: 0
In [3]: torch.cuda.device(0)
Out[3]: <torch.cuda.device at 0x7efce0b03be0>
In [4]: torch.cuda.device_count()
Out[4]: 1
In [5]: torch.cuda.get_device_name(0)
Out[5]: 'GeForce GTX 950M'
In [6]: torch.cuda.is_available()
Out[6]: True
Esto me dice que la GPU GeForce GTX 950M
está siendo utilizada por PyTorch
.
torch.cuda.current_device()
fue útil para mí. Demostró que mi gpu es desafortunadamente demasiado vieja: "Se encontró GPU0 GeForce GTX 760 que tiene la capacidad de 3.0 cuda. PyTorch ya no es compatible con esta GPU porque es demasiado vieja".torch.cuda.is_available()
$ watch -n 2 nvidia-smi
hace el trabajo. Para más detalles, vea mi respuesta a continuación .Como no se ha propuesto aquí, estoy agregando un método usando
torch.device
, ya que esto es bastante útil, también al inicializar los tensores en el correctodevice
.Salida:
Como se mencionó anteriormente, su uso
device
es posible :Para mover los tensores a los respectivos
device
:Para crear un tensor directamente en
device
:Lo que hace que el cambio entre CPU y GPU sea cómodo sin cambiar el código real.
Editar:
Como ha habido algunas preguntas y confusión sobre la memoria en caché y asignada , estoy agregando información adicional al respecto:
torch.cuda.max_memory_cached(device=None)
Devuelve la memoria de GPU máxima administrada por el asignador de almacenamiento en caché en bytes para un dispositivo determinado.
torch.cuda.memory_allocated(device=None)
Devuelve el uso actual de la memoria de la GPU por los tensores en bytes para un dispositivo dado.
Puede entregar directamente uno
device
como se especifica más arriba en la publicación o puede dejarlo Ninguno y usará elcurrent_device()
.fuente
## neural network in pytorch
, luego agrego su código al final. Todavía muestra Usando dispositivo: cuda; y 0 Gb para asignado y en caché. También intenté insertarlo al final del ciclo forfor i in range(epoch):
después de la propagación hacia atrás, todavía todosmy_tensor_on_gpu * my_tensor_on_cpu
fallará.Found GPU0 GeForce GT 750M which is of cuda capability 3.0. PyTorch no longer supports this GPU because it is too old. The minimum cuda capability that we support is 3.5.
Después de comenzar a ejecutar el ciclo de entrenamiento, si desea verlo manualmente desde la terminal si su programa está utilizando los recursos de la GPU y en qué medida, simplemente puede usarlo
watch
como en:Esto actualizará continuamente las estadísticas de uso por cada 2 segundos hasta que presione ctrl+c
Si necesita más control sobre más estadísticas de GPU que pueda necesitar, puede usar una versión más sofisticada de
nvidia-smi
with--query-gpu=...
. A continuación se muestra una ilustración simple de esto:que generaría las estadísticas algo así como:
Nota : No debe haber ningún espacio entre los nombres de consulta separados por comas en
--query-gpu=...
. De lo contrario, esos valores serán ignorados y no se devolverán estadísticas.Además, puede verificar si su instalación de PyTorch detecta su instalación CUDA correctamente haciendo lo siguiente:
True
El estado significa que PyTorch está configurado correctamente y está utilizando la GPU, aunque debe mover / colocar los tensores con las declaraciones necesarias en su código.Si desea hacer esto dentro del código de Python, busque en este módulo:
https://github.com/jonsafari/nvidia-ml-py o en pypi aquí: https://pypi.python.org/pypi/nvidia-ml-py/
fuente
watch
es útilEn el sitio de la oficina y en la página de inicio, verifique la GPU para PyTorch de la siguiente manera:
Referencia: PyTorch | Comenzar
fuente
Desde el punto de vista práctico, solo una digresión menor:
Esta
dev
ahora sabe si cuda o cpu.Y hay una diferencia en cómo manejas el modelo y los tensores cuando te mueves a cuda. Es un poco extraño al principio.
Todo esto es complicado y comprenderlo una vez te ayuda a lidiar rápidamente con menos depuración.
fuente
M()
? ¿Dónde seM
define?Para verificar si hay una GPU disponible:
Si la función anterior vuelve
False
,CUDA_VISIBLE_DEVICES
. Cuando el valor deCUDA_VISIBLE_DEVICES
es -1, todos sus dispositivos están ocultos. Puede verificar ese valor en código con esta línea:os.environ['CUDA_VISIBLE_DEVICES']
Si la función anterior vuelve,
True
eso no significa necesariamente que esté utilizando la GPU. En Pytorch puede asignar tensores a dispositivos cuando los crea. Por defecto, los tensores se asignan a lacpu
. Para verificar dónde está asignado su tensor, haga lo siguiente:Tenga en cuenta que no puede operar con tensores asignados en diferentes dispositivos. Para ver cómo asignar un tensor a la GPU, consulte aquí: https://pytorch.org/docs/stable/notes/cuda.html
fuente
Casi todas las respuestas aquí hacen referencia
torch.cuda.is_available()
. Sin embargo, eso es solo una parte de la moneda. Le indica si la GPU (en realidad CUDA) está disponible, no si realmente se está utilizando. En una configuración típica, configuraría su dispositivo con algo como esto:pero en entornos más grandes (p. ej., investigación) también es común dar al usuario más opciones, por lo que, según la entrada, puede deshabilitar CUDA, especificar ID de CUDA, etc. En tal caso, si se usa o no la GPU no solo se basa en si está disponible o no. Después de que el dispositivo se haya configurado en un dispositivo de antorcha, puede obtener su
type
propiedad para verificar si es CUDA o no.fuente
Simplemente desde el símbolo del sistema o el entorno Linux ejecute el siguiente comando.
Lo anterior debe imprimir
True
Este debería imprimir lo siguiente:
fuente
Si estás aquí porque tu pytorch siempre da
False
portorch.cuda.is_available()
, probablemente sea porque instaló su versión de pytorch sin soporte de GPU. (Por ejemplo: codificó en una computadora portátil y luego realizó una prueba en el servidor).La solución es desinstalar e instalar pytorch nuevamente con el comando correcto de la página de descargas de pytorch . Consulte también este problema de pytorch.
fuente
Cree un tensor en la GPU de la siguiente manera:
No salga, abra otra terminal y verifique si el proceso de Python está usando la GPU usando:
fuente
nvidia-smi
desde la línea de comandosnvidia-smi
.