2017-06-15 1 views
1

En cours d'exécution sur Ubuntu 16.04, le dernier tensorflow (1.1.0) (installé via pip3 install tensorflow-gpu), CUDA8 + CUDNN5.TF KMeansClustering ne fonctionne pas sur GPU

Le code ressemble plus ou moins comme ceci:

import tensorflow as tf 
from tensorflow.contrib.learn import KMeansClustering 

trainencflt = #pandas frame with ~30k rows and ~300 columns 
def train_input_fn(): 
    return (tf.constant(trainencflt, shape = [trainencflt.shape[0], trainencflt.shape[1]]), None) 

configuration = tf.contrib.learn.RunConfig(log_device_placement=True) 
model = KMeansClustering(num_clusters=k, 
         initial_clusters=KMeansClustering.RANDOM_INIT, 
         relative_tolerance=1e-8, 
         config=configuration) 
model.fit(input_fn = train_input_fn, steps = 100) 

Quand il fonctionne, je vois:

2017-06-15 10:24:41.564890: I tensorflow/core/common_runtime/gpu/gpu_device.cc:887] Found device 0 with properties: 
name: GeForce GTX 1080 
major: 6 minor: 1 memoryClockRate (GHz) 1.7335 
pciBusID 0000:81:00.0 
Total memory: 7.92GiB 
Free memory: 7.81GiB 
2017-06-15 10:24:41.564934: I tensorflow/core/common_runtime/gpu/gpu_device.cc:908] DMA: 0 
2017-06-15 10:24:41.564942: I tensorflow/core/common_runtime/gpu/gpu_device.cc:918] 0: Y 
2017-06-15 10:24:41.564956: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:81:00.0) 

mémoire est allouée:

+-----------------------------------------------------------------------------+ 
| Processes:              GPU Memory | 
| GPU  PID Type Process name        Usage  | 
|=============================================================================| 
| 1  548 C python          7745MiB | 
+-----------------------------------------------------------------------------+ 

Mais aucune des opérations sont effectuées sur le GPU (il reste à 0% tout le temps, l'utilisation du processeur monte en flèche sur tous les cœurs):

+-----------------------------------------------------------------------------+ 
| NVIDIA-SMI 375.66     Driver Version: 375.66     | 
|-------------------------------+----------------------+----------------------+ 
| GPU Name  Persistence-M| Bus-Id  Disp.A | Volatile Uncorr. ECC | 
| Fan Temp Perf Pwr:Usage/Cap|   Memory-Usage | GPU-Util Compute M. | 
|===============================+======================+======================| 
| 1 GeForce GTX 1080 Off | 0000:02:00.0  Off |     N/A | 
| 29% 43C P8 13W/180W | 7747MiB/8114MiB |  0%  Default | 
+-------------------------------+----------------------+----------------------+ 

Ne pas voir les journaux de placement (même si j'ai spécifié log_device_placement comme Vrai).

J'ai essayé the simple GPU examples et ils fonctionnaient très bien (au moins les journaux de placement semblaient bien).

Ai-je raté quelque chose?

+0

TensorFlow affecte par défaut toute la mémoire disponible. Voir: https://stackoverflow.com/questions/34199233/how-to-prevent-tensorflow-from-allocating-the-totality-of-a-gpu-memory Il peut ne pas fonctionner sur GPU parce que cette n'a pas de noyau GPU écrit pour cela. – jkschin

+0

@jkschin oui Je connais les modèles d'allocation de mémoire - je montrais juste cela comme preuve de l'utilisation de TF GPU. En ce qui concerne les noyaux gpu, j'ai essayé de passer en revue le code et les internes semblent utiliser beaucoup d'opérations TF de base, ce qui je pense devrait fonctionner sur le GPU, mais je ne suis pas sûr. –

+0

Une expérience que vous pouvez essayer serait d'affirmer tf.device et pas de placement doux, puis voir quelles erreurs sont lancées? – jkschin

Répondre

0

A travers la base de code - TF 1.1.0 n'avait tout simplement pas de noyau GPU.