top of page
Gambar penulisCornellius Yudha Wijaya

Deploy Model Machine Learning Anda ke Produksi di Cloud

Deploy Model Machine Learning Anda ke Produksi di Cloud

AWS, atau Amazon Web Services, adalah layanan cloud computing yang digunakan di banyak bisnis untuk penyimpanan, analitik, aplikasi, layanan deployment, dan banyak lainnya. Ini adalah platform yang memanfaatkan beberapa layanan untuk mendukung bisnis dengan cara serverless dengan skema bayar sesuai pemakaian (pay-as-you-go).


Aktivitas pemodelan machine learning juga merupakan salah satu aktivitas yang didukung oleh AWS. Aktivitas pemodelan dapat didukung dengan beberapa layanan, seperti mengembangkan model hingga membuatnya menjadi produksi. AWS telah menunjukkan fleksibilitas yang sangat penting bagi bisnis apa pun yang membutuhkan skalabilitas dan kecepatan.


Artikel ini akan membahas bagaimana mendeploy model machine learning di AWS cloud ke dalam produksi. Bagaimana kita bisa melakukannya? Mari kita eksplor lebih lanjut.


Persiapan

Sebelum Anda memulai tutorial ini, Anda perlu membuat akun AWS, karena kita akan membutuhkannya untuk mengakses semua layanan AWS. Saya berasumsi bahwa pembaca akan menggunakan free tier untuk mengikuti artikel ini. Selain itu, saya berasumsi pembaca sudah tahu cara menggunakan bahasa pemrograman Python dan memiliki pengetahuan dasar tentang machine learning. Kita juga akan fokus pada bagian deployment model dan tidak akan berkonsentrasi pada aspek lain dari aktivitas data science, seperti data preprocessing dan evaluasi model.


Dengan asumsi itu, kita akan memulai perjalanan kita dalam mendeploy model machine learning Anda di layanan AWS Cloud.


Deployment Model di AWS

Dalam tutorial ini, kita akan mengembangkan model machine learning untuk memprediksi churn dari data yang diberikan. Data training diperoleh dari Kaggle, yang dapat Anda unduh di sini.


Setelah kita memperoleh dataset, kita akan membuat bucket S3 untuk menyimpan dataset tersebut. Cari S3 di layanan AWS dan buat bucket.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Dalam artikel ini, saya menamai bucket “telecom-churn-dataset” dan berlokasi di Singapura. Anda bisa mengubahnya jika mau, tapi mari kita gunakan yang ini untuk sekarang.


Setelah Anda selesai membuat bucket dan mengunggah data ke dalam bucket Anda, kita akan pergi ke layanan AWS SageMaker. Dalam layanan ini, kita akan menggunakan Studio sebagai lingkungan kerja kita. Jika Anda belum pernah menggunakan Studio, mari kita buat domain dan user sebelum melanjutkan lebih jauh.


Pertama, pilih Domains dalam konfigurasi Amazon SageMaker Admin.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Di dalam Domains, Anda akan melihat banyak tombol untuk dipilih. Di layar ini, pilih tombol Create domain.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Pilih quick setup jika Anda ingin mempercepat proses pembuatan. Setelah selesai, Anda akan melihat domain baru yang dibuat di dashboard. Pilih domain baru yang baru saja Anda buat lalu klik tombol Add user.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Selanjutnya, Anda harus memberi nama user profil sesuai preferensi Anda. Untuk execution role, Anda bisa membiarkannya sesuai default untuk sekarang, karena itu yang dibuat selama proses pembuatan Domain.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Klik "Next" sampai pengaturan kanvas muncul. Di bagian ini, saya mematikan beberapa pengaturan yang tidak kita butuhkan, seperti Time Series Forecasting.


Setelah semuanya diatur, pergi ke studio selection dan pilih tombol Open studio dengan user name yang baru saja Anda buat.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Di dalam Studio, navigasikan ke sidebar yang terlihat seperti ikon folder dan buat notebook baru di sana. Kita bisa membiarkannya sesuai default, seperti gambar di bawah ini.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Dengan notebook baru ini, kita akan bekerja untuk membuat model prediksi churn dan mendeploy model ke dalam API inferences yang dapat kita gunakan dalam produksi.


Pertama, mari kita impor paket yang diperlukan dan baca data churn.

import boto3
import pandas as pd
import sagemaker

sagemaker_session = sagemaker.Session()
role = sagemaker.get_execution_role()

df = pd.read_csv('s3://telecom-churn-dataset/telecom_churn.csv')
Deploy Model Machine Learning Anda ke Produksi di Cloud

Selanjutnya, kita akan membagi data di atas menjadi data training dan data testing dengan kode berikut.

from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size = 0.3, random_state = 42)

Kita mengatur data testing menjadi 30% dari data asli. Ketika data telah terbagi, kita akan mengunggahnya kembali ke bucket S3.

bucket = 'telecom-churn-dataset'
train.to_csv(f's3://{bucket}/telecom_churn_train.csv', index = False)
test.to_csv(f's3://{bucket}/telecom_churn_test.csv', index = False)

Anda bisa melihat data di dalam bucket S3 Anda, yang saat ini terdiri dari tiga dataset berbeda.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Ketika dataset kita telah siap, sekarang kita akan mengembangkan model prediksi churn dan mendeploynya. Di AWS, kita sering menggunakan metode pelatihan skrip untuk training machine learning. Itulah mengapa kita akan mengembangkan skrip sebelum memulai pelatihan.


Pada langkah selanjutnya, kita perlu membuat file Python tambahan, yang saya sebut train.py, di folder yang sama.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Di dalam file ini, kita akan mengatur proses pengembangan model kita untuk membuat model churn. Untuk tutorial ini, saya akan mengadopsi beberapa kode dari Ram Vegiraju.


Pertama, kita akan mengimpor semua paket yang diperlukan untuk mengembangkan model.

import argparse
import os
import io
import boto3
import json
import pandas as pd

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import joblib

Selanjutnya, kita akan menggunakan metode parser untuk mengontrol variabel yang bisa kita masukkan ke dalam proses training kita. Kode keseluruhan yang akan kita masukkan ke dalam skrip untuk melatih model ada di kode di bawah ini.

if __name__ == '__main__':
    
    parser = argparse.ArgumentParser()

    parser.add_argument('--estimator', type=int, default=10)
    parser.add_argument('--sm-model-dir', type=str, default=os.environ.get('SM_MODEL_DIR'))
    parser.add_argument('--model_dir', type=str)
    parser.add_argument('--train', type=str, default=os.environ.get('SM_CHANNEL_TRAIN'))
    
    args, _ = parser.parse_known_args()
    
    estimator = args.estimator
    model_dir = args.model_dir
    sm_model_dir = args.sm_model_dir
    training_dir = args.train

    s3_client = boto3.client('s3')
    bucket = 'telecom-churn-dataset'

    obj = s3_client.get_object(Bucket=bucket, Key='telecom_churn_train.csv')
    train_data = pd.read_csv(io.BytesIO(obj['Body'].read()))
    
    obj = s3_client.get_object(Bucket=bucket, Key='telecom_churn_test.csv')
    test_data = pd.read_csv(io.BytesIO(obj['Body'].read()))
    
    X_train = train_data.drop('Churn', axis =1)
    X_test = test_data.drop('Churn', axis =1)
    
    y_train = train_data['Churn']
    y_test = test_data['Churn']
    
    rfc = RandomForestClassifier(n_estimators=estimator)
    rfc.fit(X_train, y_train)
    y_pred = rfc.predict(X_test)
    
    print('Accuracy Score: ',accuracy_score(y_test, y_pred))
    
    joblib.dump(rfc, os.path.join(args.sm_model_dir, "rfc_model.joblib"))

Terakhir, kita perlu memasukkan empat fungsi berbeda yang dibutuhkan SageMaker untuk membuat inferensi: model_fn, input_fn, output_fn, dan predict_fn.

#Deserialisasi model untuk memuatnya

def model_fn(model_dir):
    model = joblib.load(os.path.join(model_dir, "rfc_model.joblib"))
    return model
#Permintaan input aplikasi
def input_fn(request_body, request_content_type):
    if request_content_type == 'application/json':
        request_body = json.loads(request_body)
        inp_var = request_body['Input']
        return inp_var
    else:
        raise ValueError("This model only supports application/json input")
#Prediksi berfungsi
def predict_fn(input_data, model):
    return model.predict(input_data)

#Fungsi keluaran
def output_fn(prediction, content_type):
    res = int(prediction[0])
    resJSON = {'Output': res}
    return resJSON

Ketika skrip kita telah siap, kita akan menjalankan proses training. Pada langkah berikutnya, kita akan memasukkan skrip yang kita buat di atas ke dalam SKLearn estimator. Estimator ini adalah objek Sagemaker yang akan menangani seluruh proses training, dan kita hanya perlu memasukkan semua parameter seperti kode di bawah ini.

from sagemaker.sklearn import SKLearn

sklearn_estimator = SKLearn(entry_point='train.py', 
                          role=role,
                          instance_count=1, 
                          instance_type='ml.c4.2xlarge',
                          py_version='py3',
                          framework_version='0.23-1',
                          script_mode=True,
                          hyperparameters={
                              'estimator': 15})
sklearn_estimator.fit()

Jika training berhasil, Anda akan mendapatkan laporan berikut.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Jika Anda ingin memeriksa Docker image untuk training SKLearn dan lokasi artefak model Anda, Anda dapat mengaksesnya menggunakan kode berikut.

model_artifact = sklearn_estimator.model_data
image_uri = sklearn_estimator.image_uri

print(f'The model artifact is saved at: {model_artifact}')
print(f'The image URI is: {image_uri}')

Ketika model sudah siap, kita kemudian akan mendeploy model ke dalam endpoint API yang bisa kita gunakan untuk prediksi. Untuk melakukan itu, kita bisa menggunakan kode berikut.

import time

churn_endpoint_name='churn-rf-model-'+time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())

churn_predictor=sklearn_estimator.deploy(initial_instance_count=1,instance_type='ml.m5.large',endpoint_name=churn_endpoint_name)

Jika deployment berhasil, endpoint model akan dibuat, dan Anda bisa mengaksesnya untuk membuat prediksi. Anda juga bisa melihat endpoint di dashboard Sagemaker.

Deploy Model Machine Learning Anda ke Produksi di Cloud

Anda sekarang bisa membuat prediksi dengan endpoint ini. Untuk melakukan itu, Anda bisa menguji endpoint dengan kode berikut.

client = boto3.client('sagemaker-runtime')
content_type = "application/json"

#ganti dengan data input yang Anda inginkan
request_body = {"Input": [[128,1,1,2.70,1,265.1,110,89.0, 9.87,10.0]]}

#ganti dengan nama endpoint Anda
endpoint_name = "churn-rf-model-2023-09-24-12-29-04" 
#Data serialisasi
data = json.loads(json.dumps(request_body))
payload = json.dumps(data)

#Panggil endpoint
response = client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType=content_type,
    Body=payload)
result = json.loads(response['Body'].read().decode())['Output']
result

Selamat. Anda sekarang telah berhasil mendeploy model Anda di AWS Cloud. Setelah Anda selesai dengan proses pengujian, jangan lupa untuk membersihkan endpoint. Anda bisa menggunakan kode berikut untuk melakukannya.

from sagemaker import Session

sagemaker_session = Session()
sagemaker_session.delete_endpoint(endpoint_name='your-endpoint-name')

Jangan lupa untuk mematikan instance yang Anda gunakan dan membersihkan penyimpanan S3 jika Anda tidak membutuhkannya lagi.


Untuk bacaan lebih lanjut, Anda bisa membaca lebih lanjut tentang SKLearn estimator dan Batch Transform inferences jika Anda lebih suka tidak memiliki model endpoint.

Kesimpulan

Platform AWS Cloud adalah platform serbaguna yang digunakan banyak perusahaan untuk mendukung bisnis mereka. Salah satu layanan yang sering digunakan adalah untuk tujuan analitik data, terutama produksi model. Dalam artikel ini, kita belajar menggunakan AWS SageMaker dan bagaimana mendeploy model ke dalam endpoint.


22 tampilan0 komentar

Postingan Terkait

Lihat Semua

Comments


bottom of page