Merge in RR/image-prediction from tests to master
Squashed commit of the following:
commit 1776e3083c97025e699d579f936dd0cc6e1fe152
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon Mar 21 13:54:27 2022 +0100
blacckkkyykykykyk
commit 4c9e6c38bdcea7d81008bf9dfcfcdd19d199da6a
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon Mar 21 13:53:40 2022 +0100
add predicting as subprocess, add workaround for keras not working if the model was loaded in different process
commit 530de2ff8979c70aa22f06edf297864787e0cc79
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon Mar 21 13:36:23 2022 +0100
refactor
commit 130d0e8b23e0375a6fd240ac8aa00492c341a716
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon Mar 21 13:34:54 2022 +0100
add minimal not working example for keras bug in multiprocess process
commit 2589598b052f680fd702df4f60d56a55778474a9
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon Mar 21 11:13:45 2022 +0100
test
commit eb6f211f02bc184e7f92d6b4d53c91da34ab9f2f
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon Mar 21 11:07:32 2022 +0100
hardcoded test
commit 3e9bfac5cf9b2e09340e2c2c5b24a800925bcd60
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon Mar 21 11:01:21 2022 +0100
test
commit 3d9c4d8856522cc2a22b2a7b9ea64d34629eb2c1
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon Mar 21 10:57:03 2022 +0100
change test
commit 58ca784d6c56fd63734062d0c40b6b39550cf7d7
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon Mar 21 10:21:38 2022 +0100
fix test
commit 6faad5ad5b6ef59bb5ef701b57d4c4addd17de0e
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon Mar 21 10:00:28 2022 +0100
add predictor test
commit 3fbca0ac23821568a8afa904a8fb33ab0679f129
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Fri Mar 18 13:04:13 2022 +0100
refactor folder structure
commit 90e3058c7124394a9f229d50278e57194f3d875d
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Fri Mar 18 12:58:02 2022 +0100
add response test
commit 2a2deffd0b461ec5161009b3923623152f4c8f44
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Fri Mar 18 12:56:32 2022 +0100
add test infrastructure
59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
import multiprocessing
|
|
|
|
import numpy as np
|
|
from tensorflow import keras
|
|
from tensorflow.keras import layers
|
|
|
|
|
|
def process(predict_fn_wrapper):
|
|
# We observed memory doesn't get properly deallocated unless we do this:
|
|
manager = multiprocessing.Manager()
|
|
return_dict = manager.dict()
|
|
p = multiprocessing.Process(
|
|
target=predict_fn_wrapper,
|
|
args=(return_dict,),
|
|
)
|
|
p.start()
|
|
p.join()
|
|
try:
|
|
return dict(return_dict)["result"]
|
|
except KeyError:
|
|
pass
|
|
|
|
|
|
def make_model():
|
|
inputs = keras.Input(shape=(784,))
|
|
dense = layers.Dense(64, activation="relu")
|
|
x = dense(inputs)
|
|
outputs = layers.Dense(10)(x)
|
|
model = keras.Model(inputs=inputs, outputs=outputs, name="mnist_model")
|
|
model.compile(
|
|
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
|
|
optimizer=keras.optimizers.RMSprop(),
|
|
metrics=["accuracy"],
|
|
)
|
|
return model
|
|
|
|
|
|
def make_predict_fn():
|
|
# Keras bug: doesn't work in outer scope
|
|
model = make_model()
|
|
|
|
def predict(*args):
|
|
# model = make_model()
|
|
return model.predict(np.random.random(size=(1, 784)))
|
|
|
|
return predict
|
|
|
|
|
|
def make_predict_fn_wrapper(predict_fn):
|
|
def predict_fn_wrapper(return_dict):
|
|
return_dict["result"] = predict_fn()
|
|
|
|
return predict_fn_wrapper
|
|
|
|
|
|
if __name__ == "__main__":
|
|
predict_fn = make_predict_fn()
|
|
print(process(make_predict_fn_wrapper(predict_fn)))
|