|
import mlflow |
|
import mlflow.sklearn |
|
from sklearn.datasets import load_diabetes |
|
from sklearn.model_selection import train_test_split |
|
from sklearn.linear_model import LinearRegression |
|
from sklearn.metrics import mean_squared_error |
|
from pyngrok import ngrok |
|
import gradio as gr |
|
|
|
|
|
mlflow.set_tracking_uri("./mlruns") |
|
mlflow.set_experiment("House Price Prediction") |
|
|
|
|
|
def train_and_log_model(): |
|
|
|
data = load_diabetes() |
|
X = data.data |
|
y = data.target |
|
|
|
|
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
|
|
|
|
|
model = LinearRegression() |
|
model.fit(X_train, y_train) |
|
|
|
|
|
y_pred = model.predict(X_test) |
|
mse = mean_squared_error(y_test, y_pred) |
|
|
|
|
|
with mlflow.start_run(): |
|
mlflow.log_param("model", "Linear Regression") |
|
mlflow.log_metric("mse", mse) |
|
mlflow.sklearn.log_model(model, "model") |
|
|
|
return mse, "Model training complete and logged to MLflow!" |
|
|
|
|
|
def start_mlflow_ui(): |
|
public_url = ngrok.connect(5000) |
|
mlflow_command = "mlflow ui --host 0.0.0.0 --port 5000" |
|
return_code = os.system(mlflow_command) |
|
if return_code != 0: |
|
return "Error: Unable to start MLflow UI." |
|
return f"MLflow UI is accessible at {public_url}" |
|
|
|
|
|
def train_model(): |
|
mse, message = train_and_log_model() |
|
return f"MSE: {mse}\n{message}" |
|
|
|
def get_mlflow_ui_link(): |
|
public_url = start_mlflow_ui() |
|
return public_url |
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("## House Price Prediction with MLflow") |
|
train_btn = gr.Button("Train Model and Log to MLflow") |
|
mlflow_btn = gr.Button("Start MLflow UI") |
|
output = gr.Textbox(label="Output") |
|
|
|
train_btn.click(train_model, inputs=[], outputs=output) |
|
mlflow_btn.click(get_mlflow_ui_link, inputs=[], outputs=output) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |
|
|