مدل های ارکستر: یادگیری ماشین با آهنگسازی Docker

داکر آهنگسازی ابزاری قدرتمند برای تعریف و مدیریت برنامه های Docker Multi-Container به روشی ساده و کارآمد است. در این مقاله ، اصول اولیه آهنگسازی Docker را کشف خواهیم کرد و چگونه می توانید استفاده از آن را برای ارکستر برنامه های خود شروع کنید.
Docker آهنگسازی چیست؟
Docker Compose ابزاری است که به شما امکان می دهد برنامه های Docker Multi-Container را با استفاده از یک فایل YAML برای پیکربندی خدمات برنامه خود تعریف و اجرا کنید. سپس با یک دستور واحد می توانید تمام ظروف تعریف شده را ایجاد و اجرا کنید. این امر باعث می شود ایجاد و پیکربندی محیط های پیچیده توسعه و تولیدی که چندین سرویس برای تعامل با یکدیگر نیاز دارند ، آسانتر شود.
اختیاری
نصب آهنگسازی Dockerقبل از شروع ، حتماً آهنگسازی Docker را روی دستگاه خود نصب کرده اید. می توانید آن را با پیروی از دستورالعمل های رسمی Docker نصب کنید.
اگر سیستم عامل شما MAC است ، می توانید از دستور زیر برای نصب آهنگسازی Docker استفاده کنید. قبل از اجرای آن ، اطمینان حاصل کنید که دسک تاپ Docker روی دستگاه شما نصب شده است.
$ brew install docker-compose
اکنون نسخه نصب شده را بررسی کنید:$ docker-compose --version
قبل از تست آهنگسازی با یک پروژه یادگیری ماشین ، بیایید تفاوت بین آهنگسازی Docker و Kubernetes را روشن کنیم.
Docker آهنگسازی:
چه کاری انجام می دهد: Docker Compose ابزاری است که به شما امکان می دهد چندین ظرف را با هم اجرا کنید. این عمدتا برای توسعه و آزمایش طراحی شده است. ایده آل است اگر می خواهید به سرعت چندین سرویس را در دستگاه خود بچرخانید ، مانند یک پایگاه داده ، API و یک برنامه وب ، همه به صورت محلی در حال اجرا هستند.
چگونه کار می کند: شما از پرونده ای به نام استفاده می کنید docker-compose.yml
برای تعریف از ظروف شما و نحوه اتصال آنها به یکدیگر. به عنوان مثال ، می توانید بگویید: “من می خواهم برنامه خود را راه اندازی کنم و آن را به یک پایگاه داده وصل کنم.” آهنگسازی با یک دستور واحد از آن مراقبت خواهد کرد.
ایده آل برای: پروژه های کوچک یا توسعه ای که در آن به یک سیستم بسیار پیچیده احتیاج ندارید و فقط می خواهید چیزها را به سرعت در دستگاه خود آزمایش کنید.
Kubernetes:
چه کاری انجام می دهد: Kubernetes بسیار بزرگتر و قدرتمندتر از آهنگسازی Docker است. نه تنها به شما در راه اندازی ظروف کمک می کند ، بلکه به مدیریت برنامه های تولید ، روی سرورهای واقعی ، به طور کارآمد و در مقیاس نیز کمک می کند.
چگونه کار می کند: Kubernetes اطمینان می دهد که برنامه شما همیشه در حال اجرا است ، منابع کافی دارد و می تواند بسیاری از کاربران را اداره کند. اگر یکی از ظروف شما از بین نرود ، Kubernetes به طور خودکار آن را جایگزین می کند. همچنین می تواند بر اساس آنچه در هر لحظه به برنامه شما نیاز دارد ، مقیاس (افزایش یا کاهش تعداد ظروف) را مقیاس (افزایش یا کاهش دهد.
ایده آل برای: برنامه های تولید در مقیاس بزرگ که همیشه باید در دسترس باشند و ترافیک سنگین را کنترل کنند. شرکت های بزرگ یا پروژه هایی که انتظار رشد چشمگیر را دارند ، اغلب از Kubernetes استفاده می کنند.
به طور خلاصه:
Docker Compose برای راه اندازی و مدیریت چندین ظروف به سرعت در دستگاه محلی شما ، ایده آل برای توسعه یا آزمایش است.
Kubernetes برای مدیریت برنامه های در مقیاس بزرگ در تولید است ، جایی که شما به کنترل ، ثبات و مقیاس پذیری بیشتری نیاز دارید.
آهنگسازی مانند یک موتور کوچک است که به شما کمک می کند تا روی پروژه خود کار کنید. Kubernetes مانند یک سیستم عظیم است که برنامه شما را به راحتی و حتی با بسیاری از کاربران و ترافیک زیاد در حال اجرا نگه می دارد.
حال ، بیایید به معامله واقعی برسیم. 😎
من به شما نشان می دهم که چگونه می توانید آهنگسازی Docker را در یک پروژه ML اعمال کنید. ما یک برنامه ساده ایجاد خواهیم کرد که یک مدل یادگیری ماشین را آموزش می دهد و یک سرویس وب را برای پیش بینی ها در معرض نمایش قرار می دهد.
هدف پروژه
پروژه ما شامل دو سرویس خواهد بود:
خدمات ML: یک مدل یادگیری ماشین آموزش دیده با استفاده از بیزار که از طریق یک API Web Flask در معرض دید قرار می گیرد.
سرویس بانک اطلاعاتی: یک پایگاه داده PostgreSQL برای ذخیره نتایج پیش بینی.
ساختار پروژه
ساختار اصلی پرونده به شرح زیر خواهد بود:
ml_project/
│
├── docker-compose.yml
├── ml_service/
│ ├── Dockerfile
│ ├── app.py
│ ├── model.py
│ ├── requirements.txt
└── db/
├── init.sql
1. تعریف کنید docker-compose.yml
اولین قدم تعریف خدمات در یک است docker-compose.yml
پرونده
version: '3'
services:
ml_service:
build: ./ml_service
ports:
- "5000:5000"
depends_on:
- db
db:
image: postgres
environment:
POSTGRES_DB: ml_results
POSTGRES_USER: ml_user
POSTGRES_PASSWORD: ml_password
volumes:
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
2. سرویس یادگیری ماشین را ایجاد کنید
در داخل ml_service/
پوشه ، ما ایجاد می کنیم Dockerfile
این امر وابستگی های لازم پایتون را نصب می کند ، یک مدل را آموزش می دهد و سرویس را در معرض نمایش می گذارد.
داک (برای سرویس ML)
FROM python:3.8
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
requirements.txt
در اینجا ما وابستگی هایی را که از آنها استفاده خواهیم کرد تعریف می کنیم ، مانند Flask برای سرور وب و Scikit-Learn برای مدل ML.
Flask==2.1.0
scikit-learn==1.0.2
psycopg2-binary==2.9.3 # Para conectar con PostgreSQL
model.py
این پرونده شامل کد برای آموزش مدل یادگیری ماشین است. ما از یک مدل طبقه بندی ساده مانند رگرسیون لجستیک استفاده خواهیم کرد.
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
import pickle
def train_model():
# Load sample dataset
iris = load_iris()
X, y = iris.data, iris.target
# Train model
model = LogisticRegression()
model.fit(X, y)
# Save model to file
with open('model.pkl', 'wb') as f:
pickle.dump(model, f)
if __name__ == "__main__":
train_model()
این کد یک مدل طبقه بندی ساده را آموزش می دهد و آن را به عنوان یک ذخیره می کند model.pkl
پرونده
app.py
این پرونده فلاسک است که API را برای پیش بینی با استفاده از مدل آموزش دیده ایجاد می کند. علاوه بر این ، پیش بینی ها را در پایگاه داده ذخیره می کند.
from flask import Flask, request, jsonify
import pickle
import psycopg2
app = Flask(__name__)
# Load trained ML model
with open('model.pkl', 'rb') as f:
model = pickle.load(f)
# Connect to PostgreSQL database
conn = psycopg2.connect(
dbname="ml_results", user="ml_user", password="ml_password", host="db"
)
cur = conn.cursor()
@app.route('/predict', methods=['POST'])
def predict():
data = request.json
X_new = [data['features']]
# Make prediction
prediction = model.predict(X_new)[0]
# Save prediction to database
cur.execute("INSERT INTO predictions (input, result) VALUES (%s, %s)", (str(X_new), int(prediction)))
conn.commit()
return jsonify({"prediction": int(prediction)})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
این سرویس Flask در بندر 5000 گوش می دهد و پس از دریافت درخواست پست با ویژگی های ورودی ، پیش بینی را برمی گرداند و نتیجه را در PostgreSQL ذخیره می کند.
3. پایگاه داده را پیکربندی کنید
در db/
دایرکتوری ، ما ایجاد می کنیم init.sql
پرونده برای اولیه سازی پایگاه داده با یک جدول برای ذخیره پیش بینی ها.
init.sql
CREATE TABLE predictions (
id SERIAL PRIMARY KEY,
input TEXT,
result INTEGER
);
این اسکریپت با شروع کانتینر postgresql به طور خودکار اجرا می شود و یک جدول به نام ایجاد می کند predictions
بشر
4. پروژه را اجرا کنید
اکنون که همه چیز تنظیم شده است ، می توانید کل پروژه را با آهنگسازی Docker اجرا کنید. از دایرکتوری پروژه root ، اجرا کنید:
$ docker-compose up
این باعث می شود Docker آهنگسازی شود:
- تصویر سرویس یادگیری ماشین را بسازید.
- ظروف ML و پایگاه داده را شروع کنید.
- مدل Flask و سرور وب را در پورت 5000 اجرا کنید.
5. API را آزمایش کنید
برای پیش بینی ، درخواست پست را به http://localhost:5000/predict
با بدنه JSON حاوی ویژگی های مجموعه داده.
نمونه فرمان curl
:$ curl -X POST http://localhost:5000/predict -H "Content-Type: application/json" -d '{"features": [5.1, 3.5, 1.4, 0.2]}'
اگر همه چیز به درستی پیکربندی شود ، پاسخی مانند:
{
“پیش بینی”: 0
}
پایان
با آهنگسازی Docker ، ما یک پروژه یادگیری ماشین ایجاد کرده ایم که شامل یک سرویس وب برای پیش بینی با یک مدل ML و همچنین یک پایگاه داده PostgreSQL برای ذخیره نتایج است. Docker آهنگسازی مدیریت این خدمات را در محیط های توسعه و تولید ساده می کند و به شما امکان می دهد با چندین ظروف به صورت هماهنگ کار کنید.
این مثال فقط یک نقطه شروع است و می توانید با افزودن خدمات بیشتر ، اتصال سایر مدل های یادگیری ماشین یا ادغام ابزارهایی مانند Redis برای ذخیره یا کرفس برای کارهای ناهمزمان ، آن را گسترش دهید.
اکنون شما آماده استفاده از آهنگسازی Docker در پروژه های پیچیده تر یادگیری ماشین هستید!
نویسنده: یهاری آریاس.
github: yharyarias
LinkedIn: yharyarias
اینستاگرام: @ia.fania