You can also try using Dask. It can load data from multiple formats (bcolz, hdf, saved npy files, etc) and can gather data across multiple machines too (although I haven’t tried that).
You can use a Dask array with the normal Keras model.fit() method, or with a bit of tweaking of the Keras NumpyArrayIterator you can use one with that as well.
If you know the size of your output you should be able to stream the output of your model to a Dask array as well.