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?
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
@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. –
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