Wenn ich ein Spark-Modell erstellen und es aufrufen, benötigen die Vorhersagen einige zehn ms, um zurückzukehren. Wenn ich jedoch das gleiche Modell speichere, dann lade es, die Vorhersagen dauern viel länger. Gibt es eine Art Cache, den ich benutzen sollte?So laden Sie ein Spark-Modell für effiziente Vorhersagen
model.cache()
nach dem Laden funktioniert nicht, da das Modell keine RDD ist.
Dies funktioniert gut:
from pyspark.mllib.recommendation import ALS
from pyspark import SparkContext
import time
sc = SparkContext()
# Some example data
r = [(1, 1, 1.0),
(1, 2, 2.0),
(2, 1, 2.0)]
ratings = sc.parallelize(r)
model = ALS.trainImplicit(ratings, 1, seed=10)
# Call model and time it
now = time.time()
for t in range(10):
model.predict(2, 2)
elapsed = (time.time() - now)*1000/(t+1)
print "Average time for model call: {:.2f}ms".format(elapsed)
model.save(sc, 'my_spark_model')
Ausgang: Average time for model call: 71.18ms
Wenn ich folgendes ausführen, nehmen die Vorhersagen viel mehr Zeit:
from pyspark.mllib.recommendation import MatrixFactorizationModel
from pyspark import SparkContext
import time
sc = SparkContext()
model_path = "my_spark_model"
model = MatrixFactorizationModel.load(sc, model_path)
# Call model and time it
now = time.time()
for t in range(10):
model.predict(2, 2)
elapsed = (time.time() - now)*1000/(t+1)
print "Average time for loaded model call: {:.2f}ms".format(elapsed)
Der Ausgang: Average time for loaded model call: 180.34ms
Für BIG-Modelle sehe ich Vorhersagezeiten o Ver 10 Sekunden für einen einzelnen Anruf nach dem Laden eines gespeicherten Modells.
Dank @gsamaras. 'cache()' war das erste, was ich ausprobiert habe. Leider können Modelle in PySpark nicht zwischengespeichert werden. Hier ist der Fehler: 'AttributeError: 'MatrixFactorizationModel' Objekt hat kein Attribut 'Cache''' – zbinsd
Sie haben es nicht erwähnt. :/Das passiert, weil das Modell keine RDD ist. cache() funktioniert nur auf RDDs. BTW, nette Frage. Haben Sie 'model.productFeatures(). Cache()' und/oder 'model.userFeatures.cache()'? Da diese beiden gepaarte RDDs sind. – gsamaras
@bzinsd verdammt, dachte ich hatte das bereits behoben! Überprüfen Sie meine aktualisierte Antwort! ;) – gsamaras