alex-sage / logo-gen

Accompanying code for the paper "Logo Synthesis and Manipulation with Clustered Generative Adversarial Networks"
MIT License
86 stars 25 forks source link

GPU Reliance #9

Open peterkentish opened 5 years ago

peterkentish commented 5 years ago

I am trying to plan out possible points of failure in the future.

At the moment I am running the code on a High Performance Computer as I do not have access to a GPU. The HPC is command line only, which means the GUI development would not be feasible. Within the GUI the ability to generate new images would most definitely be needed, and in this case, a GPU would then be needed. Is there a way to remove this GPU reliance?

Or alternatively (and perhaps a better phrased question), what would be the best interface for a GUI with the GAN model?

alex-sage commented 5 years ago

Indeed the GPU reliance is pretty annoying. This is due to the nework expecting data in the NCHW format, which is more efficient but not supported by the CPU implementation for some reason. This doesn't make a whole lot of sense to me, but there we are

I'm pretty sure this limitation has been removed at some point in a newer TF version. So the best way to go about this is probably to try and make the code compatible with the newest version of TensorFlow. This definitely involves some API changes, but possibly also some bigger changes to the network library and could be a bit of work.

The alternative would be to change to whole network to work with NHWC tensors, which also involves a lot of (albeit probably simpler) changes. However this degrades performance on GPU and is generally considered the worse way to do things, as newer CPU implementations such as those using Intels MKL library work on NCHW. So not a good idea in my opinion.

But what's the best interface for a GUI with the GAN model? Good question. The easiest would probably be to just use full-fledged tensorflow in the backend with my vector class as an API. From a deployment perspective it might however be better to port the network to something else (maybe web based?) which however could involve quite a bit of extra work and I have zero expertise in that area...