ML Modelini Object Storage’a Depolama

Merhaba. Bu yazımızda ml modellerinin object sotrage’a nasıl kaydedileceğini ve gerektiğinde buradan okunarak nasıl kullanılacağını MinIO örneği üzerinden öğreneceğiz. Model scikit-learn kütüphanesiyle geliştirilmiş bir pipeline model olacaktır.

Niçin modelleri object storage’a kaydetmek iyidir?

Geliştirilen modeli lokal diske kaydettiğimizde ona sadece biz erişebiliriz. Aslında geliştirilen her model bir gün canlı ortamda çalışma hayaline sahiptir, ancak bir çoğu bunu başaramaz. Modelleri ihtiyaç duyulduğunda bulunduğu yerden çağırmak için merkezi olarak erişilebilirliği yüksek, aynı zamanda güvenli erişime izin veren bir yerde tutmak model dağıtımını (deployment) oldukça kolaylaştırır. Elbette modelleri doğrudan object storage’a kaydedip kullanmak en ideal yöntem olmayabilir. Bir çok modeli versiyonlamak, bunlarla ilgili not tutmak, karşılaştırmak ve karar verdikten sonra dağıtmak için mlflow gibi araçlar kullanılabilir. Bu yazının kapsamı sadece modelin object storage’a yazılıp okunmasıyla sınırlı olacaktır.

Gerekli Kütüphaneler

import tempfile
import boto3
from botocore.config import Config
import logging
import joblib

S3 Client

Python diliyle Amazon Elastic Compute Cloud (Amazon EC2), Amazon Simple Storage Service (Amazon S3) vb. AWS servislerini oluşturmak, yapılandırmak ve yönetmek için AWS SDK for Python’u (Boto3) kullanılır. MinIO S3 uyumlu bir object storage olduğu için burada da boto3’ü rahatlıkla kullanabiliriz. ACCESS_KEY  ve SECRET_KEY’i aşağıdaki gibi açıkca kullanmamanızı şiddetle tavsiye ederim.

ACCESS_KEY = 'root'
SECRET_KEY = 'root12345'


def get_s3_client():
    s3 = boto3.client('s3',
                      endpoint_url='http://minio:9000',
                      aws_access_key_id=ACCESS_KEY,
                      aws_secret_access_key=SECRET_KEY,
                      config=Config(signature_version='s3v4'))
    return s3

get_s3_client() fonksiyonu bize MinIO’ya erişen bir s3 client objesi verecektir.

Modeli MinIO’ya kaydetme

Kaydetmek için bir fonksiyon yazalım.

def save_model_to_s3(model, bucket, key):
    ''' Store model as a buffer, then save buffer to s3'''
    s3_client = get_s3_client()
    try:
        with tempfile.TemporaryFile() as fp:
            joblib.dump(model, fp)
            fp.seek(0)
            s3_client.put_object(Body=fp.read(), Bucket=bucket, Key=key)
        logging.info(f'{key} saved to s3 bucket {bucket}')
    except Exception as e:
        raise logging.exception(e)

model: Ml modeli

bucket: S3 veya MinIO bucket’ı

key: bucket içindeki nesnenin adı. Örneğin: my_model.pkl ya da models/my_rf_model_01.pkl gibi

Şimdi kaydetme işini gerçekleştirmek için yukarıda tanımladığımız fonksiyonu çağıralım.

save_model_to_s3(pipeline, 'ml-models-bucket', 'pipeline_adult_random_forest.pkl')

MinIO ara yüzünden baktığınız zaman modelin kaydedildiğini göreceksiniz. Bu fonsiyon çağrılmadan önce bucket yaratılmış olmalıdır.

Modeli MinIO’dan okuma

Modeli MinIO’dan okuyup bize veren bir fonksiyon yazalım.

def load_model_from_s3(bucket, key):
    ''' Read model from a s3 bucket'''
    s3_client = get_s3_client()
    try:
        with tempfile.TemporaryFile() as fp:
            s3_client.download_fileobj(Fileobj=fp, Bucket=bucket, Key=key)
            fp.seek(0)
            return joblib.load(fp)
    except Exception as e:
        raise logging.exception(e)

Fonksiyonu çağıralım ve bir değişkene atayalım.

pipeline_loaded = load_model_from_s3('ml-models-bucket', 'pipeline_adult_random_forest.pkl')

Çağrılan bu model ile artık tahminleme yapabiliriz.

single_pred_raw = np.array([['Self-emp-not-inc','Under-Graduate', 50, 83311.0, 13.0, 0.0, 0.0,13.0]])

pipeline_loaded.predict(single_pred_raw)

# Çıktı
array(['<=50K'], dtype=object)

Bu yazımızda bir ml modelini object storage’a kaydetmeyi ve buradan okuyarak kullanmayı öğrendik. Başka bir yazıda görüşünceye kadar hoşça kalın…

Kapak foto: Photo by Aaron Burden on Unsplash

Yazar Hakkında
Toplam 177 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara