הנוכמ תדימל לש םילדומ תסירפל ישעמ ךירדמ
.ךליבשב אוה הזה ךירדמה ,הנוכמ תדימל לש םילדומ תסירפ לע דוע דומלל שפחמ התא םאו
.ןנעל הסירפו API-ה ןוסחא ,לדומ תויזחת תרשל API תריצי ,לדומה תיינב :םיאבה םירבדב דקמתמ הז ךירדמ .תורחבנ טלק תונוכת לע תוססובמה תיב יריחמ תויזחת תתרשמה תולוכמב היצקילפא ךל היה :םיאבה םירבדה תא תנקתהש אדו ,ליחתתש ינפל .API יקשממ םע הדובעו הנוכמ תדימל לש םילדומ תיינבב תיסיסב הנבה ךל היהתש יאדכ ,ת :טקיורפה תיירפס רובע (ץלמומה) הנבמה ןלהל .אבה בלשב םלוכ תא ןיקתנ אוב .ליחתהל ידכ Python תוירפס המכ ךרטצנ :תילאוטריו הביבס לעפהו רוצ ,ךלש טקיורפה תביבסב .לדומה לש תויזחתה תא תרשל ידכ API-ה תא תונבל Uvicorn-ו FastAPI-ו .הנוכמה תדימל :pip תועצמאב הלאה תושרדנה תוליבחה תא ןיקתנ ואוב זא .GitHub -ב וז הכרדה רובע דוקה לכ תא אוצמל לוכי התא :model_training.py םשב ץבוק רוצ ,טקיורפה תיירפסב .ורחבנש תונוכתה לע ססב .< b>linear_regression_model.pkl רותב model/ הייקיתב ותוא רמושו ירא הרעה: דוע ףיסוהל תוסנל לוכי התא לבא .תונוכת לש הנטק הצובק-תתב קר ונשמתש :ותוא רומשלו לדומה תא ןמאל ידכ טפירקסה תא לעפה :model/ תיירפסב pkl.-ה ץבוק תא אוצמל לגוסמ תויהל רומאו האבה העדוהה תא ל .FastAPI תועצמאב תויזחת תרשמה API רוצינ תעכ .Docker Next תועצמאב FastAPI תייצקילפא תא ליכהל וננוצרב יכ תאז םישוע ונא .m :אבה דוקה תא בותכ ,main.py-ב .יוזחה ריחמה תא ריזחמו ,תורידה יריחמ תא תוזחל ידכ ןמואמה לדומב שמתשמ אוה .(Med .requirements.txt ץבוקו Dockerfile רוצ ,טקיורפה לש שרושה תיירפסב :Dockerfile רוצינ ואוב .ןומטמב הרימש אלל Python לש םישורדה תולתה תא ןיקתמו ,רנייטנוקה ךותל require .הליכמ הביבסב FastAPI תייצקילפא תסירפל הליעי וז הרדגה .80 האיציב שיגנל API-ה ת :תולתה לכ תא טרפמה requirements.txt ץבוק רוצ .רנייטנוקה תא ליעפנו Docker תנומת הנבנ ואוב ,םינכומ FastAPI תייצקילפאו Dockerf :docker build לש האבה הדוקפה תלעפה ידי לע Docker תנומת תא הנב :Docker לכימ תא לעפה ןכמ רחאל .http://127.0.0.1:80 תבותכב שיגנו תעכ לועפל רומא ךלש API-ה :המגודל השקב הנה .POST תשקב תחילש ידי לע /predict הצקה תדוקנ תא קודבל י :ךכ ,יוזחה הרידה ריחמ םע הבוגת ריזחהל רומא הז .ןנע תומרופטלפל רתוי הלק הסירפו ףותישל Docker Hub -ל ותוא ףוחדל לוכי התא תעכ . :Docker Hub -ל סנכיה ,תישאר .םירושיאה תא ןיזהל שקבתת :רקודה תנומת תא וגיית .Docker Hub -ב ךלש שמתשמה םשב your_username תא ףלחה הרעה: ל תנכדועמה הנומתה תא ףוחדלו ,שדח גת םע הנומתה תא שדחמ תונבל לוכי :Docker Hub -ל הנומתה תא ףחד :ךכ הנומתה תא ליעפהלו ךושמל תעכ םילוכי םירחא םיחתפמ .לכימה תא ליעפהלו הנומתה תא ךושמל תעכ לוכי ךלש Docker Hub רגאמל השיג ול שיש ימ :הז ךירדמב ונישעש המ לש הריהמ הריקס הנה .ןנעל הזה ליכמה םושייה תא סורפל אוה אבה ינויגהה בלשה .רתוי הלק הצפהל Docker Hu .ןנעב הנוכמ תדימל לש םילדומ תסירפ לע הכרדה הצור התא םא ונל רפס .רוציי תביבסב A !המיענ הסירפ טקיורפה תביבס תרדגה
הדובעה תליחת
project-dir/
│
├── app/
│ ├── __init__.py # Empty file
│ └── main.py # FastAPI code for prediction API
│
├── model/
│ └── linear_regression_model.pkl # Saved trained model (after running model_training.py)
│
├── model_training.py # Script to train and save the model
├── requirements.txt # Dependencies for the project
└── Dockerfile # Docker configuration
$ python3 -m venv v1
$ source v1/bin/activate
$ pip3 install pandas scikit-learn fastapi uvicorn
הנוכמ תדימל לדומ תיינב
# model_training.py
import pandas as pd
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import pickle
import os
# Load the dataset
data = fetch_california_housing(as_frame=True)
df = data['data']
target = data['target']
# Select a few features
selected_features = ['MedInc', 'AveRooms', 'AveOccup']
X = df[selected_features]
y = target
# Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Train the Linear Regression model
model = LinearRegression()
model.fit(X_train, y_train)
# Create a 'model' folder to save the trained model
os.makedirs('model', exist_ok=True)
# Save the trained model using pickle
with open('model/linear_regression_model.pkl', 'wb') as f:
pickle.dump(model, f)
print("Model trained and saved successfully.")
$ python3 model_training.py
Model trained and saved successfully.
FastAPI תייצקילפא תריצי
# app/main.py
from fastapi import FastAPI
from pydantic import BaseModel
import pickle
import os
# Define the input data schema using Pydantic
class InputData(BaseModel):
MedInc: float
AveRooms: float
AveOccup: float
# Initialize FastAPI app
app = FastAPI(title="House Price Prediction API")
# Load the model during startup
model_path = os.path.join("model", "linear_regression_model.pkl")
with open(model_path, 'rb') as f:
model = pickle.load(f)
@app.post("/predict")
def predict(data: InputData):
# Prepare the data for prediction
input_features = [[data.MedInc, data.AveRooms, data.AveOccup]]
# Make prediction using the loaded model
prediction = model.predict(input_features)
# Return the prediction result
return {"predicted_house_price": prediction[0]}
Docker םע היצקילפאה לכימ
Dockerfile -ה תריצי
# Use Python 3.11 as the base image
FROM python:3.11-slim
# Set the working directory inside the container
WORKDIR /code
# Copy the requirements file
COPY ./requirements.txt /code/requirements.txt
# Install the Python dependencies
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
# Copy the app folder into the container
COPY ./app /code/app
# Copy the model directory (with the saved model file) into the container
COPY ./model /code/model
# Expose port 80 for FastAPI
EXPOSE 80
# Command to run the FastAPI app with Uvicorn
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
requirements.txt ץבוק תריצי
fastapi
uvicorn
scikit-learn
pandas
Docker תנומת תיינב
$ docker build -t house-price-prediction-api .
$ docker run -d -p 80:80 house-price-prediction-api
curl -X 'POST' \
'http://127.0.0.1:80/predict' \
-H 'Content-Type: application/json' \
-d '{
"MedInc": 3.5,
"AveRooms": 5.0,
"AveOccup": 2.0
}'
{
"predicted_house_price": 2.3248705765077062
}
Docker Hub -ל Docker תנומת לש הפיחדו גוית
$ docker login
$ docker tag house-price-prediction-api your_username/house-price-prediction-api:v1
$ docker push your_username/house-price-prediction-api:v1
$ docker pull your_username/house-price-prediction-api:v1
$ docker run -d -p 80:80 your_username/house-price-prediction-api:v1
םיאבה םיבלשהו םוכיס
תפסונ האירקו תוינפה