ابرآراز | ArazCloud

پیاده‌سازی یادگیری ماشین بدون سرور (Serverless Machine Learning) بر روی سرورهای ابری

یادگیری ماشین بدون سرور یک روش کارآمد برای اجرای مدل‌های یادگیری ماشین در محیط ابری است، بدون اینکه نیاز به مدیریت سرورهای زیرساخت داشته باشید. با استفاده از این روش، مدل‌های یادگیری ماشین می‌توانند به صورت خودکار اجرا و مقیاس‌پذیری شوند و تنها هزینه زمان محاسبه و استفاده از منابع را پرداخت می‌کنید. در این مستندات، به بررسی پیاده‌سازی یادگیری ماشین بدون سرور بر روی سرورهای ابری پرداخته می‌شود.

الزامات

  • دسترسی به سرور ابری با دسترسی ریشه (Root Access)
  • سیستم‌عامل اوبونتو ۲۰.۰۴ یا بالاتر
  • نصب Docker و OpenFaaS برای مدیریت توابع بدون سرور
  • آشنایی با Python و کتابخانه‌های یادگیری ماشین مانند TensorFlow یا scikit-learn

۱. مقدمه‌ای بر یادگیری ماشین بدون سرور

در مدل یادگیری ماشین بدون سرور، مدل‌ها به صورت توابع یا کانتینرها اجرا می‌شوند که می‌توانند براساس تقاضا و بار کاری مقیاس‌پذیری شوند. این روش امکان پردازش حجم زیادی از داده‌ها را به صورت همزمان و با استفاده بهینه از منابع فراهم می‌کند. مزایای استفاده از مدل‌های یادگیری ماشین بدون سرور شامل کاهش هزینه‌ها، مقیاس‌پذیری خودکار، و کاهش نیاز به مدیریت زیرساخت است.

۲. پیاده‌سازی یادگیری ماشین بدون سرور با OpenFaaS

یکی از ابزارهای محبوب برای پیاده‌سازی Serverless Machine Learning، OpenFaaS است که می‌تواند توابع یادگیری ماشین را به صورت سرورلس اجرا کند.

مرحله ۱: نصب Docker و OpenFaaS

ابتدا Docker و Docker Compose را بر روی سرور نصب کنید:

sudo apt-get update
sudo apt-get install -y docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker

سپس OpenFaaS را نصب کنید:

git clone https://github.com/openfaas/faas
cd faas
./deploy_stack.sh

این اسکریپت OpenFaaS را بر روی سرور نصب می‌کند و شما می‌توانید از OpenFaaS برای پیاده‌سازی توابع یادگیری ماشین بدون سرور استفاده کنید.

مرحله ۲: ایجاد یک تابع برای مدل یادگیری ماشین

برای ایجاد تابع جدید، از faas-cli استفاده کنید. ابتدا faas-cli را نصب کنید:

curl -sL https://cli.openfaas.com | sudo sh

سپس یک تابع جدید برای مدل یادگیری ماشین خود ایجاد کنید:

faas-cli new --lang python3 ml-function

مرحله ۳: پیاده‌سازی مدل یادگیری ماشین

به فایل handler.py مراجعه کنید و کد مدل یادگیری ماشین را در آن بنویسید. به عنوان مثال، یک مدل ساده برای پیش‌بینی قیمت خانه با استفاده از scikit-learn:

import json
from sklearn.linear_model import LinearRegression
import numpy as np

# نمونه‌سازی و آموزش مدل (این بخش برای سادگی ثابت است)
model = LinearRegression()
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([150, 200, 250, 300, 350])
model.fit(X, y)

def handle(event, context):
    data = json.loads(event.body)
    prediction = model.predict(np.array(data['features']).reshape(-1, 1))
    return {"prediction": prediction.tolist()}

این کد یک مدل خطی ساده برای پیش‌بینی مقادیر بر اساس ورودی‌های داده شده پیاده‌سازی می‌کند.

مرحله ۴: ساخت و استقرار تابع

برای ساخت و استقرار تابع، از دستور زیر استفاده کنید:

faas-cli up -f ml-function.yml

این دستور تابع ml-function را ایجاد کرده و آن را در محیط OpenFaaS مستقر می‌کند.

مرحله ۵: فراخوانی تابع یادگیری ماشین

پس از استقرار تابع، می‌توانید مدل یادگیری ماشین خود را با استفاده از curl فراخوانی کنید:

curl -X POST http://<server-ip>:8080/function/ml-function -d '{"features": [6]}'

این دستور درخواست پیش‌بینی را به مدل ارسال کرده و نتیجه را برمی‌گرداند.

۳. مدیریت و مقیاس‌پذیری خودکار

مرحله ۱: تنظیمات مقیاس‌پذیری در OpenFaaS

OpenFaaS به طور خودکار توابع را براساس نیاز مقیاس می‌کند. برای کنترل تعداد توابع در حال اجرا، می‌توانید فایل stack.yml را ویرایش کرده و تعداد رپلیکیشن‌ها را تنظیم کنید:

functions:
  ml-function:
    image: ml-function:latest
    environment:
      min_replicas: 1
      max_replicas: 5

با این تنظیمات، تعداد رپلیکیشن‌های تابع ml-function بین ۱ تا ۵ مقیاس می‌شود.

۴. ذخیره‌سازی و مدیریت مدل‌ها با استفاده از Docker

به جای آموزش مدل در هر اجرا، می‌توانید مدل‌های یادگیری ماشین را به صورت فایل ذخیره کرده و در هر اجرا فقط از مدل بارگذاری‌شده استفاده کنید. این کار باعث کاهش زمان اجرا می‌شود.

مرحله ۱: ذخیره مدل در Docker

پس از آموزش مدل، مدل را به عنوان فایل ذخیره کنید. برای مثال، با استفاده از joblib مدل را ذخیره کنید:

import joblib

# آموزش مدل
model = LinearRegression()
model.fit(X, y)

# ذخیره مدل
joblib.dump(model, '/path/to/model.pkl')

مرحله ۲: بارگذاری مدل در تابع OpenFaaS

مدل ذخیره‌شده را در فایل handler.py بارگذاری کنید:

import json
import joblib
import numpy as np

# بارگذاری مدل
model = joblib.load('/path/to/model.pkl')

def handle(event, context):
    data = json.loads(event.body)
    prediction = model.predict(np.array(data['features']).reshape(-1, 1))
    return {"prediction": prediction.tolist()}

با این روش، مدل از فایل بارگذاری می‌شود و نیازی به آموزش در هر بار اجرای تابع نیست.

۵. نظارت و ارزیابی مدل‌ها

برای نظارت بر عملکرد و دقت مدل‌ها، می‌توانید از ابزارهای نظارتی مانند Prometheus و Grafana استفاده کنید.

مرحله ۱: نصب Prometheus و Grafana

ابتدا Prometheus را نصب کنید:

sudo apt-get install -y prometheus
sudo systemctl start prometheus
sudo systemctl enable prometheus

سپس Grafana را نصب کنید:

sudo apt-get install -y grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

مرحله ۲: پیکربندی داشبوردهای نظارت

با استفاده از Prometheus و Grafana، می‌توانید داشبوردهای نظارتی برای نظارت بر عملکرد مدل‌ها ایجاد کنید و اطلاعات مربوط به درخواست‌ها و زمان‌های پاسخ‌دهی را مشاهده کنید.

نتیجه‌گیری

در این مستندات، به بررسی و پیاده‌سازی یادگیری ماشین بدون سرور بر روی سرورهای ابری با استفاده از OpenFaaS پرداخته شد. این رویکرد به شما امکان می‌دهد مدل‌های یادگیری ماشین خود را به صورت خودکار و مقیاس‌پذیر اجرا کنید و از مزایای مدیریت ساده‌تر و هزینه کمتر برخوردار شوید. با استفاده از این راهنما، می‌توانید سرویس‌های یادگیری ماشین بدون سرور را برای کاربردهای مختلف پیاده‌سازی کنید.