Save Machine Learning Model into Redis

Machine learning tools yang kami gunakan adalah scikit-learn, scikit-learn ini memiliki satu fitur untuk menyimpan model yang kita buat untuk ditaruh di persistence menggunakan joblib basically fungsi dari joblib ini sama dengan fungsi pickle untuk melakukan serialisasi object dan bisa kita simpan ke dalam file. Akan tetapi keterbatasan dari joblib adalah sewaktu kita mendump model, output yang dituju hanyal sebuah file. Dan kita akan ada problem, jika kita menggunakan version control dan ketika model yang dibuat akan automatic learn, maka akan ditimpa dengan yang baru. Kita dapat melakukan beberapa teknik untuk mengakalinya seperti mempush hasil model dari automatic learn ke version control server kita. Atau dengan menaruh file pkl di system kita, untuk solusi ini kita akan bermasalah karena di AWS (kita menggunakan aws) dan kita menyalakan auto scalling. Solusi lain adalah dengan menggunakan S3. Solusi ini cukup baik, akan tetapi ada kelemahan dari solusi ini yaitu kita harus mendownload hasil dump binary ke instance baru kita load ke memory. Setelah berdiskusi, kami menemukan satu cara yaitu menggunakan redis, jadi byte hasil dump model kami akan dimasukkan ke redis dengan menggunakan key tertentu.

Cara nya tidak terlalu susah, yang penting redis telah diinstall di server atau komputer anda. Untuk panduan menginstall redis bisa membaca halaman tutorial install redis.

  1. Install redis package di python, bisa dengan menggunakan command “pip install redis”
  2. Put classifier to redis :

    >>> import redis
    >>> import pickle
    >>> from sklearn.svm import SVC
    >>> redis_server = redis.StrictRedis(host="localhost", port=6379, db=0)
    >>> import numpy as np
    >>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
    >>> y = np.array([1, 1, 2, 2])
    >>> clf = SVC()
    >>> clf.fit(X, y)
    >>> # masukkan model yang ditrain ke redis
    >>> redis_server.put("classifier_key", pickle.dumps(clf))
    >>> # mengambil pickle dari redis
    >>> clf = pickle.loads(redis_server.get("classifier_key"))
    >>> print(clf.predict([[-0.8, -1]]))

 

Untuk performance, tidak berbeda jauh dengan pickle dan menurut dokumentasi dari joblib, joblib akan lebih perform jika kita memiliki numpy arrays yang banyak dikarenakan joblib. Jika kami menggunakan joblib dan file lokal menghabiskan waktu rata2 0.12s untuk prediksi sedangkan menggunakan redis menghabiskan waktu rata2 0.15s.

Maybe in the future, I hope they can put joblib into bytes object although numpy arrays can’t put the string. Not that hard right.

Save Machine Learning Model into Redis

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s