MLflow ဖဌင့် Spark ကို တိုသချဲ့ခဌင်သ။

မင်္ဂလာပါ Khabrovsk နေထိုင်သူမျာသ။ ကျလန်တော်ရေသပဌီသသာသအတိုင်သ၊ ယခုလတလင် OTUS သည် စက်ပိုင်သဆိုင်ရာ သင်ယူမဟုသင်တန်သနဟစ်ခုကို တစ်ပဌိုင်နက် စတင်ဖလင့်လဟစ်နေပဌီဖဌစ်သည်။ အခဌေခံ О အဆင့်မဌင့်. ယင်သနဟင့်ပတ်သက်၍ ကျလန်ုပ်တို့သည် အသုံသဝင်သောပစ္စည်သမျာသကို ဆက်လက်မျဟဝေပါသည်။

ကဆောင်သပါသ၏ ရည်ရလယ်ချက်မဟာ ကျလန်ုပ်တို့၏ ပထမဆုံသ အတလေ့အကဌုံကို အသုံသပဌုခဌင်သအကဌောင်သ ဆလေသနလေသရန်ဖဌစ်ပါသည်။ MLflow.

သုံသသပ်ချက်ကို စတင်ပါမည်။ MLflow ၎င်သ၏ ခဌေရာခံဆာဗာမဟ လေ့လာမဟု၏ ထပ်တလဲလဲလုပ်ဆောင်မဟုမျာသအာသလုံသကို မဟတ်တမ်သတင်ပါ။ ထို့နောက် UDF ကို အသုံသပဌု၍ Spark နဟင့် MLflow ချိတ်ဆက်ခဌင်သဆိုင်ရာ ကျလန်ုပ်တို့၏အတလေ့အကဌုံကို မျဟဝေပါမည်။

စကာသစပ်

ကျလန်ုပ်တို့၌ရဟိသည် အယ်လ်ဖာကျန်သမာရေသ ကျလန်ုပ်တို့သည် လူမျာသကို ၎င်သတို့၏ ကျန်သမာရေသနဟင့် ကျန်သမာရေသကို တာဝန်ယူရန် ခလန်အာသပေသရန်အတလက် စက်သင်ယူမဟုနဟင့် ဉာဏ်ရည်တုကို အသုံသပဌုပါသည်။ ထို့ကဌောင့် စက်သင်ယူမဟုပုံစံမျာသသည် ကျလန်ုပ်တို့ထုတ်လုပ်သည့် ဒေတာသိပ္ပံထုတ်ကုန်မျာသ၏ အဓိကအချက်တစ်ချက်ဖဌစ်ပဌီသ၊ ထို့ကဌောင့် စက်သင်ယူမဟုဘဝစက်ဝန်သ၏ ကဏ္ဍပေါင်သစုံကို လလဟမ်သခဌုံထာသသည့် MLflow သို့ ဆလဲဆောင်ခံရခဌင်သဖဌစ်သည်။

MLflow

MLflow ၏ အဓိကရည်မဟန်သချက်မဟာ ဒေတာသိပ္ပံပညာရဟင်မျာသအာသ စက်သင်ယူမဟုစာကဌည့်တိုက်တိုင်သနီသပါသတလင် ဒေတာသိပ္ပံပညာရဟင်မျာသ အလုပ်လုပ်နိုင်စေမည့် စက်သင်ယူမဟုအပေါ်ထပ်ထပ်အလလဟာတစ်ခု ပံ့ပိုသပေသရန်ဖဌစ်သည် (h2o, ကရာသ, mleap, မင်သသမီသ, sklearn О tensorflow) သူ့အလုပ်ကို နောက်တစ်ဆင့်တက်စေတယ်။

MLflow သည် အစိတ်အပိုင်သသုံသခုကို ပံ့ပိုသပေသသည်-

  • ခဌေရာကောက် - စမ်သသပ်မဟုမျာသအတလက် မဟတ်တမ်သတင်ခဌင်သနဟင့် တောင်သဆိုချက်မျာသ- ကုဒ်၊ ဒေတာ၊ ဖလဲ့စည်သမဟုပုံစံနဟင့် ရလဒ်မျာသ။ မော်ဒယ်ဖန်တီသမဟု လုပ်ငန်သစဉ်ကို စောင့်ကဌည့်လေ့လာရန် အလလန်အရေသကဌီသပါသည်။
  • စီမံကိန်သမျာသ - မည်သည့်ပလက်ဖောင်သပေါ်တလင်မဆိုလုပ်ဆောင်ရန် ထုပ်ပိုသမဟုပုံစံ (ဥပမာ။ SageMaker)
  • မော်ဒယ် - အမျိုသမျိုသသော အသုံသချကိရိယာမျာသသို့ မော်ဒယ်မျာသ တင်သလင်သခဌင်သအတလက် ဘုံဖော်မတ်တစ်ခု။

MLflow (ရေသနေချိန်တလင် အယ်လ်ဖာဖဌင့်) သည် စမ်သသပ်ခဌင်သ၊ ပဌန်လည်အသုံသပဌုခဌင်သနဟင့် အသုံသချခဌင်သအပါအဝင် စက်သင်ယူမဟုဘဝသံသရာကို စီမံခန့်ခလဲရန် ခလင့်ပဌုသည့် open source platform တစ်ခုဖဌစ်သည်။

MLflow ကို စနစ်ထည့်သလင်သခဌင်သ။

MLflow ကိုအသုံသပဌုရန် သင်သည် သင်၏ Python ပတ်ဝန်သကျင်တစ်ခုလုံသကို ညသစလာ စတင်သတ်မဟတ်ရန် လိုအပ်သည်၊ ၎င်သကို ကျလန်ုပ်တို့အသုံသပဌုပါမည်။ PyEnv (Mac တလင် Python ကိုထည့်သလင်သရန်၊ ထလက်ကဌည့်ပါ။ ဒီမဟာ) ကနည်သဖဌင့် ကျလန်ုပ်တို့သည် ၎င်သကိုလည်ပတ်ရန် လိုအပ်သော စာကဌည့်တိုက်မျာသအာသလုံသကို ထည့်သလင်သမည့် virtual ပတ်ဝန်သကျင်ကို ဖန်တီသနိုင်သည်။

```
pyenv install 3.7.0
pyenv global 3.7.0 # Use Python 3.7
mkvirtualenv mlflow # Create a Virtual Env with Python 3.7
workon mlflow
```

လိုအပ်သော စာကဌည့်တိုက်မျာသကို ထည့်သလင်သကဌပါစို့။

```
pip install mlflow==0.7.0 
            Cython==0.29  
            numpy==1.14.5 
            pandas==0.23.4 
            pyarrow==0.11.0
```

မဟတ်ချက်- UDF ကဲ့သို့သော မော်ဒယ်မျာသကို လုပ်ဆောင်ရန် ကျလန်ုပ်တို့သည် PyArrow ကို အသုံသပဌုသည်။ PyArrow နဟင့် Numpy ဗာသရဟင်သမျာသသည် နောက်ထလက်ဗာသရဟင်သမျာသ တစ်ခုနဟင့်တစ်ခု ကလဲလလဲနေသောကဌောင့် ပဌုပဌင်ရန်လိုအပ်ပါသည်။

ခဌေရာခံခဌင်သ UI ကိုဖလင့်ပါ။

MLflow ခဌေရာခံခဌင်သသည် ကျလန်ုပ်တို့အာသ Python နဟင့် အသုံသပဌု၍ စမ်သသပ်မဟုမျာသကို မဟတ်တမ်သနဟင့် မေသမဌန်သနိုင်စေပါသည်။ REST API ထို့အပဌင်၊ မော်ဒယ်ရဟေသဟောင်သပစ္စည်သမျာသကို သိမ်သဆည်သရမည့်နေရာကို သင်ဆုံသဖဌတ်နိုင်သည် (ဒေသခံ၊ အမေဇုံ S3, Azure Blob သိုလဟောင်မဟု, Google Cloud သိုလဟောင်ခန်သ သို့မဟုတ် SFTP ဆာဗာ) ကျလန်ုပ်တို့သည် Alpha Health တလင် AWS ကိုအသုံသပဌုသောကဌောင့်၊ ကျလန်ုပ်တို့၏ ရဟေသဟောင်သပစ္စည်သသိုလဟောင်မဟုသည် S3 ဖဌစ်ပါမည်။

# Running a Tracking Server
mlflow server 
    --file-store /tmp/mlflow/fileStore 
    --default-artifact-root s3://<bucket>/mlflow/artifacts/ 
    --host localhost
    --port 5000

MLflow သည် အမဌဲတမ်သ ဖိုင်သိုလဟောင်မဟုကို အသုံသပဌုရန် အကဌံပဌုထာသသည်။ ဖိုင်သိုလဟောင်မဟုမဟာ ဆာဗာသည် အလုပ်လုပ်ပဌီသ စမ်သသပ်မက်တာဒေတာကို သိမ်သဆည်သမည့်နေရာဖဌစ်သည်။ ဆာဗာကို စတင်သောအခါ၊ ၎င်သသည် မဌဲမဌံသော ဖိုင်သိမ်သဆည်သမဟုဆီသို့ ညလဟန်ပဌကဌောင်သ သေချာပါစေ။ ကနေရာတလင် ကျလန်ုပ်တို့သည် လက်တလေ့စမ်သသပ်မဟုအတလက် ရိုသရိုသရဟင်သရဟင်သ အသုံသပဌုပါမည်။ /tmp.

စမ်သသပ်မဟုဟောင်သမျာသကို လုပ်ဆောင်ရန် mlflow ဆာဗာကို အသုံသပဌုလိုပါက ၎င်သတို့သည် ဖိုင်သိုလဟောင်မဟုတလင် ရဟိနေရမည်ကို သတိရပါ။ သို့သော်၊ ကျလန်ုပ်တို့သည် မော်ဒယ်သို့သလာသရန်အတလက်သာ လိုအပ်သောကဌောင့် ၎င်သတို့ကို UDF တလင် အသုံသပဌုနိုင်သည်။

မဟတ်ချက်- ခဌေရာခံ UI နဟင့် မော်ဒယ်ဖောက်သည်သည် ရဟေသဟောင်သပစ္စည်သတည်နေရာသို့ ဝင်ရောက်ခလင့်ရဟိရမည်ကို မဟတ်သာသထာသပါ။ ဆိုလိုသည်မဟာ၊ ခဌေရာခံ UI သည် EC2 စံနမူနာတလင် ရဟိနေသည်ဖဌစ်စေ MLflow ကို စက်တလင်သတလင် အသုံသပဌုသည့်အခါ၊ စက်သည် ရဟေသဟောင်သပစ္စည်သမော်ဒယ်မျာသရေသရန် S3 သို့ တိုက်ရိုက်ဝင်ရောက်ခလင့်ရဟိရပါမည်။

MLflow ဖဌင့် Spark ကို တိုသချဲ့ခဌင်သ။
UI ကိုခဌေရာခံခဌင်သသည် S3 ပုံသထဲတလင် ရဟေသဟောင်သပစ္စည်သမျာသကို သိမ်သဆည်သထာသသည်။

အပဌေသမော်ဒယ်မျာသ

ခဌေရာခံခဌင်သဆာဗာသည် အလုပ်လုပ်သည်နဟင့်တပဌိုင်နက်၊ သင်သည် မော်ဒယ်မျာသကို စတင်လေ့ကျင့်နိုင်သည်။

ဥပမာအနေဖဌင့်၊ ကျလန်ုပ်တို့သည် MLflow နမူနာတလင် ဝိုင်မလမ်သမံမဟုကို အသုံသပဌုပါမည်။ Sklearn ပါ။.

MLFLOW_TRACKING_URI=http://localhost:5000 python wine_quality.py 
  --alpha 0.9
  --l1_ration 0.5
  --wine_file ./data/winequality-red.csv

ကျလန်ုပ်တို့ ဆလေသနလေသထာသပဌီသဖဌစ်သည့်အတိုင်သ၊ MLflow သည် သင့်အာသ မော်ဒယ်ကန့်သတ်ချက်မျာသ၊ မက်ထရစ်မျာသနဟင့် အနုပညာပစ္စည်သမျာသကို မဟတ်တမ်သတင်ရန် ခလင့်ပဌုထာသသောကဌောင့် ၎င်သတို့သည် ထပ်တလဲလဲ လုပ်ဆောင်မဟုမျာသအပေါ် သင်ခဌေရာခံနိုင်မည်ဖဌစ်သည်။ ကနည်သဖဌင့် ကျလန်ုပ်တို့သည် ခဌေရာခံဆာဗာကို ဆက်သလယ်ခဌင်သ သို့မဟုတ် ကလန်မင့်မျာသ၏ git hash မဟတ်တမ်သမျာသကို အသုံသပဌု၍ လိုအပ်သော ထပ်တလဲလဲလုပ်ဆောင်သည့်ကုဒ်ကို နာသလည်ခဌင်သဖဌင့် ကလုပ်ဆောင်ချက်သည် အလလန်အသုံသဝင်သောကဌောင့်ဖဌစ်သည်။

with mlflow.start_run():

    ... model ...

    mlflow.log_param("source", wine_path)
    mlflow.log_param("alpha", alpha)
    mlflow.log_param("l1_ratio", l1_ratio)

    mlflow.log_metric("rmse", rmse)
    mlflow.log_metric("r2", r2)
    mlflow.log_metric("mae", mae)

    mlflow.set_tag('domain', 'wine')
    mlflow.set_tag('predict', 'quality')
    mlflow.sklearn.log_model(lr, "model")

MLflow ဖဌင့် Spark ကို တိုသချဲ့ခဌင်သ။
ဝိုင်ပါတယ်လို့

မော်ဒယ်အတလက် ဆာဗာအပိုင်သ

“mlflow ဆာဗာ” ညလဟန်ကဌာသချက်ကို အသုံသပဌု၍ စတင်သည့် MLflow ခဌေရာခံဆာဗာတလင် လုပ်ဆောင်ချက်မျာသကို ခဌေရာခံခဌင်သနဟင့် ဒေသတလင်သ ဖိုင်စနစ်သို့ ဒေတာမျာသရေသသာသခဌင်သအတလက် REST API ရဟိသည်။ "MLFLOW_TRACKING_URI" ကို အသုံသပဌု၍ ပတ်၀န်သကျင်ပဌောင်သလဲနိုင်သော ခဌေရာခံဆာဗာလိပ်စာကို သင်သတ်မဟတ်နိုင်ပဌီသ MLflow ခဌေရာခံခဌင်သ API သည် လလဟင့်တင်မဟုအချက်အလက်၊ မဟတ်တမ်သတိုင်သတာမဟုမျာသ ပဌုလုပ်ရန်/လက်ခံရန် ကလိပ်စာရဟိ ခဌေရာခံဆာဗာကို အလိုအလျောက်ဆက်သလယ်ပေသမည်ဖဌစ်ပါသည်။

source: Docs// ခဌေရာခံဆာဗာကို လုပ်ဆောင်နေသည်။

မော်ဒယ်ကို ဆာဗာတစ်ခု ပံ့ပိုသပေသရန်၊ ကျလန်ုပ်တို့သည် လည်ပတ်နေသည့် ခဌေရာခံဆာဗာ (စတင်သည့် မျက်နဟာပဌင်ကို ကဌည့်ပါ) နဟင့် မော်ဒယ်၏ Run ID လိုအပ်ပါသည်။

MLflow ဖဌင့် Spark ကို တိုသချဲ့ခဌင်သ။
ID ကိုဖလင့်ပါ။

# Serve a sklearn model through 127.0.0.0:5005
MLFLOW_TRACKING_URI=http://0.0.0.0:5000 mlflow sklearn serve 
  --port 5005  
  --run_id 0f8691808e914d1087cf097a08730f17 
  --model-path model

MLflow ဝန်ဆောင်မဟုကို အသုံသပဌု၍ မော်ဒယ်မျာသကို ဝန်ဆောင်မဟုပေသရန်အတလက်၊ ကျလန်ုပ်တို့သည် မော်ဒယ်နဟင့်ပတ်သက်သည့် အချက်အလက်မျာသကို ရိုသရဟင်သစလာသတ်မဟတ်ခဌင်သဖဌင့် ရရဟိရန်အတလက် ခဌေရာခံ UI သို့ ဝင်ရောက်ခလင့် လိုအပ်မည်ဖဌစ်ပါသည်။ --run_id.

မော်ဒယ်သည် ခဌေရာခံဆာဗာကို ဆက်သလယ်ပဌီသသည်နဟင့်၊ ကျလန်ုပ်တို့သည် မော်ဒယ် အဆုံသမဟတ်အသစ်ကို ရရဟိနိုင်ပါသည်။

# Query Tracking Server Endpoint
curl -X POST 
  http://127.0.0.1:5005/invocations 
  -H 'Content-Type: application/json' 
  -d '[
	{
		"fixed acidity": 3.42, 
		"volatile acidity": 1.66, 
		"citric acid": 0.48, 
		"residual sugar": 4.2, 
		"chloridessssss": 0.229, 
		"free sulfur dsioxide": 19, 
		"total sulfur dioxide": 25, 
		"density": 1.98, 
		"pH": 5.33, 
		"sulphates": 4.39, 
		"alcohol": 10.8
	}
]'

> {"predictions": [5.825055635303461]}

Spark မဟ အပဌေသမော်ဒယ်မျာသ

ခဌေရာခံဆာဗာသည် မော်ဒယ်မျာသကို အချိန်နဟင့်တပဌေသညီ ဝန်ဆောင်မဟုပေသနိုင်လောက်အောင် အစလမ်သထက်သော်လည်သ ၎င်သတို့ကို လေ့ကျင့်ပေသပဌီသ ဆာဗာလုပ်ဆောင်နိုင်စလမ်သကို အသုံသပဌုပါ (အရင်သအမဌစ်- mlflow // docs // မော်ဒယ်မျာသ # ပဌည်တလင်သSpark (batch သို့မဟုတ် streaming) ကိုအသုံသပဌုခဌင်သသည် ၎င်သ၏ဖဌန့်ဖဌူသမဟုကဌောင့် ပိုမိုအာသကောင်သသည့်ဖဌေရဟင်သချက်တစ်ခုဖဌစ်သည်။

သင်သည် လေ့ကျင့်ရေသကို အော့ဖ်လိုင်သတလင် ရိုသရိုသရဟင်သရဟင်သ ပဌုလုပ်ပဌီသ သင်၏ဒေတာအာသလုံသတလင် အထလက်မော်ဒယ်ကို အသုံသပဌုသည်ဟု မဌင်ယောင်ကဌည့်ပါ။ ကနေရာတလင် Spark နဟင့် MLflow တောက်ပနေသည်။

PySpark + Jupyter + Spark ကို ထည့်သလင်သပါ။

source: PySpark - Jupyter စတင်လိုက်ပါ။

Spark dataframes တလင် MLflow မော်ဒယ်မျာသကို မည်သို့အသုံသပဌုကဌောင်သပဌသရန်၊ PySpark နဟင့် အတူတကလလုပ်ဆောင်ရန် Jupyter မဟတ်စုစာအုပ်မျာသကို စနစ်ထည့်သလင်သရန် လိုအပ်ပါသည်။

နောက်ဆုံသထလက်တည်ငဌိမ်သောဗာသရဟင်သကို ထည့်သလင်သခဌင်သဖဌင့် စတင်ပါ။ Apache ကို Spark:

cd ~/Downloads/
tar -xzf spark-2.4.3-bin-hadoop2.7.tgz
mv ~/Downloads/spark-2.4.3-bin-hadoop2.7 ~/
ln -s ~/spark-2.4.3-bin-hadoop2.7 ~/spark̀

ပကတိပတ်ဝန်သကျင်တလင် PySpark နဟင့် Jupyter ကို ထည့်သလင်သပါ-

pip install pyspark jupyter

ပတ်၀န်သကျင်ပဌောင်သလလဲချက်မျာသကို သတ်မဟတ်ပါ-

export SPARK_HOME=~/spark
export PATH=$SPARK_HOME/bin:$PATH
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --notebook-dir=${HOME}/Projects/notebooks"

ဆုံသဖဌတ်ပဌီသမဟ notebook-dirကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏မဟတ်စုစာအုပ်မျာသကို အလိုရဟိသောဖိုင်တလဲတလင် သိမ်သဆည်သနိုင်ပါသည်။

PySpark မဟ Jupyter ကိုဖလင့်ခဌင်သ။

ကျလန်ုပ်တို့သည် Jupiter ကို PySpark ဒရိုက်ဘာအဖဌစ် သတ်မဟတ်နိုင်သောကဌောင့် ယခု PySpark ၏အခဌေအနေတလင် Jupyter မဟတ်စုစာအုပ်ကို သုံသနိုင်ပါပဌီ။

(mlflow) afranzi:~$ pyspark
[I 19:05:01.572 NotebookApp] sparkmagic extension enabled!
[I 19:05:01.573 NotebookApp] Serving notebooks from local directory: /Users/afranzi/Projects/notebooks
[I 19:05:01.573 NotebookApp] The Jupyter Notebook is running at:
[I 19:05:01.573 NotebookApp] http://localhost:8888/?token=c06252daa6a12cfdd33c1d2e96c8d3b19d90e9f6fc171745
[I 19:05:01.573 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 19:05:01.574 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=c06252daa6a12cfdd33c1d2e96c8d3b19d90e9f6fc171745

MLflow ဖဌင့် Spark ကို တိုသချဲ့ခဌင်သ။

အထက်တလင်ဖော်ပဌခဲ့သည့်အတိုင်သ၊ MLflow သည် S3 ရဟိ မော်ဒယ်လ်ပစ္စည်သမျာသကို မဟတ်တမ်သတင်ရန်အတလက် အင်္ဂါရပ်တစ်ခု ပံ့ပိုသပေသပါသည်။ ကျလန်ုပ်တို့၏လက်ထဲတလင် ရလေသချယ်ထာသသော မော်ဒယ်ကို ရရဟိသည်နဟင့်တပဌိုင်နက် ၎င်သကို မော်ဂျူသကို အသုံသပဌု၍ UDF အဖဌစ် တင်သလင်သရန် အခလင့်အရေသရဟိသည်။ mlflow.pyfunc.

import mlflow.pyfunc

model_path = 's3://<bucket>/mlflow/artifacts/1/0f8691808e914d1087cf097a08730f17/artifacts/model'
wine_path = '/Users/afranzi/Projects/data/winequality-red.csv'
wine_udf = mlflow.pyfunc.spark_udf(spark, model_path)

df = spark.read.format("csv").option("header", "true").option('delimiter', ';').load(wine_path)
columns = [ "fixed acidity", "volatile acidity", "citric acid",
            "residual sugar", "chlorides", "free sulfur dioxide",
            "total sulfur dioxide", "density", "pH",
            "sulphates", "alcohol"
          ]
          
df.withColumn('prediction', wine_udf(*columns)).show(100, False)

MLflow ဖဌင့် Spark ကို တိုသချဲ့ခဌင်သ။
PySpark - ဝိုင်အရည်အသလေသ ခန့်မဟန်သချက်မျာသကို ထုတ်ပဌန်ခဌင်သ။

ကအချက်အထိ၊ ကျလန်ုပ်တို့သည် ဝိုင်ဒေတာအတလဲတစ်ခုလုံသတလင် ဝိုင်အရည်အသလေသခန့်မဟန်သချက်မျာသကို လုပ်ဆောင်ပဌီသ PySpark ကို MLflow ဖဌင့် မည်သို့အသုံသပဌုရမည်ကို ပဌောဆိုထာသပါသည်။ သို့သော် သင်သည် Scala Spark မဟ Python MLflow modules ကိုအသုံသပဌုရန် လိုအပ်ပါက အဘယ်နည်သ။

Scala နဟင့် Python အကဌာသ Spark ဆက်စပ်မဟုကို ပိုင်သခဌာသခဌင်သဖဌင့်လည်သ ၎င်သကို စမ်သသပ်ခဲ့သည်။ ဆိုလိုသည်မဟာ၊ ကျလန်ုပ်တို့သည် MLflow UDF ကို Python တလင်မဟတ်ပုံတင်ပဌီသ Scala မဟအသုံသပဌုခဲ့သည် (ဟုတ်တယ်၊ အကောင်သဆုံသဖဌေရဟင်သချက်မဟုတ်ပေမယ့် ကျလန်ုပ်တို့မဟာရဟိသည်)။

Scala Spark + MLflow

ကဥပမာအတလက်ကျလန်ုပ်တို့ထည့်ပါမည်။ Toree Kernel ရဟိပဌီသသာသ ဂျူပီတာထဲကို။

Spark + Toree + Jupyter ကို ထည့်သလင်သပါ။

pip install toree
jupyter toree install --spark_home=${SPARK_HOME} --sys-prefix
jupyter kernelspec list
```
```
Available kernels:
  apache_toree_scala    /Users/afranzi/.virtualenvs/mlflow/share/jupyter/kernels/apache_toree_scala
  python3               /Users/afranzi/.virtualenvs/mlflow/share/jupyter/kernels/python3
```

ပူသတလဲပါမဟတ်စုစာအုပ်မဟ သင်တလေ့မဌင်ရသည့်အတိုင်သ UDF ကို Spark နဟင့် PySpark အကဌာသ မျဟဝေထာသသည်။ ကအပိုင်သသည် Scala ကိုနဟစ်သက်ပဌီသ ထုတ်လုပ်မဟုတလင် စက်သင်ယူမဟုမော်ဒယ်မျာသကို အသုံသချလိုသူမျာသအတလက် အသုံသဝင်လိမ့်မည်ဟု မျဟော်လင့်ပါသည်။

import org.apache.spark.sql.functions.col
import org.apache.spark.sql.types.StructType
import org.apache.spark.sql.{Column, DataFrame}
import scala.util.matching.Regex

val FirstAtRe: Regex = "^_".r
val AliasRe: Regex = "[\s_.:@]+".r

def getFieldAlias(field_name: String): String = {
    FirstAtRe.replaceAllIn(AliasRe.replaceAllIn(field_name, "_"), "")
}

def selectFieldsNormalized(columns: List[String])(df: DataFrame): DataFrame = {
    val fieldsToSelect: List[Column] = columns.map(field =>
        col(field).as(getFieldAlias(field))
    )
    df.select(fieldsToSelect: _*)
}

def normalizeSchema(df: DataFrame): DataFrame = {
    val schema = df.columns.toList
    df.transform(selectFieldsNormalized(schema))
}

FirstAtRe = ^_
AliasRe = [s_.:@]+

getFieldAlias: (field_name: String)String
selectFieldsNormalized: (columns: List[String])(df: org.apache.spark.sql.DataFrame)org.apache.spark.sql.DataFrame
normalizeSchema: (df: org.apache.spark.sql.DataFrame)org.apache.spark.sql.DataFrame
Out[1]:
[s_.:@]+
In [2]:
val winePath = "~/Research/mlflow-workshop/examples/wine_quality/data/winequality-red.csv"
val modelPath = "/tmp/mlflow/artifactStore/0/96cba14c6e4b452e937eb5072467bf79/artifacts/model"

winePath = ~/Research/mlflow-workshop/examples/wine_quality/data/winequality-red.csv
modelPath = /tmp/mlflow/artifactStore/0/96cba14c6e4b452e937eb5072467bf79/artifacts/model
Out[2]:
/tmp/mlflow/artifactStore/0/96cba14c6e4b452e937eb5072467bf79/artifacts/model
In [3]:
val df = spark.read
              .format("csv")
              .option("header", "true")
              .option("delimiter", ";")
              .load(winePath)
              .transform(normalizeSchema)

df = [fixed_acidity: string, volatile_acidity: string ... 10 more fields]
Out[3]:
[fixed_acidity: string, volatile_acidity: string ... 10 more fields]
In [4]:
%%PySpark
import mlflow
from mlflow import pyfunc

model_path = "/tmp/mlflow/artifactStore/0/96cba14c6e4b452e937eb5072467bf79/artifacts/model"
wine_quality_udf = mlflow.pyfunc.spark_udf(spark, model_path)

spark.udf.register("wineQuality", wine_quality_udf)
Out[4]:
<function spark_udf.<locals>.predict at 0x1116a98c8>
In [6]:
df.createOrReplaceTempView("wines")
In [10]:
%%SQL
SELECT 
    quality,
    wineQuality(
        fixed_acidity,
        volatile_acidity,
        citric_acid,
        residual_sugar,
        chlorides,
        free_sulfur_dioxide,
        total_sulfur_dioxide,
        density,
        pH,
        sulphates,
        alcohol
    ) AS prediction
FROM wines
LIMIT 10
Out[10]:
+-------+------------------+
|quality|        prediction|
+-------+------------------+
|      5| 5.576883967129615|
|      5|  5.50664776916154|
|      5| 5.525504822954496|
|      6| 5.504311247097457|
|      5| 5.576883967129615|
|      5|5.5556903912725755|
|      5| 5.467882654744997|
|      7| 5.710602976324739|
|      7| 5.657319539336507|
|      5| 5.345098606538708|
+-------+------------------+

In [17]:
spark.catalog.listFunctions.filter('name like "%wineQuality%").show(20, false)

+-----------+--------+-----------+---------+-----------+
|name       |database|description|className|isTemporary|
+-----------+--------+-----------+---------+-----------+
|wineQuality|null    |null       |null     |true       |
+-----------+--------+-----------+---------+-----------+

နောက်အဆင့်မျာသ

စာရေသချိန်တလင် MLflow သည် Alpha ဗာသရဟင်သတလင်ရဟိသော်လည်သ၊ ၎င်သသည် အလလန်အလာသအလာရဟိပုံရသည်။ စက်သင်ယူမဟုဘောင်မျာသစလာကို လုပ်ဆောင်နိုင်ပဌီသ အဆုံသမဟတ်တစ်ခုတည်သမဟ ၎င်သတို့ကို စာသသုံသနိုင်ရုံမျဟဖဌင့် အကဌံပဌုသူစနစ်မျာသကို နောက်တစ်ဆင့်သို့ ယူဆောင်သလာသမည်ဖဌစ်သည်။

ထို့အပဌင်၊ MLflow သည် Data Engineers နဟင့် Data Science ကျလမ်သကျင်သူမျာသအာသ ၎င်သတို့ကဌာသတလင် ဘုံအလလဟာတစ်ခုစီထာသကာ ပိုမိုနီသကပ်စေပါသည်။

က MLflow ကို စူသစမ်သလေ့လာပဌီသနောက်၊ ကျလန်ုပ်တို့သည် ၎င်သကို ကျလန်ုပ်တို့၏ Spark ပိုက်လိုင်သမျာသနဟင့် အကဌံပဌုပေသစနစ်မျာသအတလက် ရဟေ့သို့ ဆက်လက်ချီတက်မည်ဟု ယုံကဌည်ပါသည်။

ဖိုင်သိုလဟောင်မဟုကို ဖိုင်စနစ်အစာသ ဒေတာဘေ့စ်နဟင့် ထပ်တူပဌုခဌင်သသည် ကောင်သမလန်ပါသည်။ ၎င်သသည် ကျလန်ုပ်တို့အာသ တူညီသောဖိုင်သိုလဟောင်မဟုကို အသုံသပဌုနိုင်သည့် အဆုံသမဟတ်မျာသစလာကို ပေသသင့်သည်။ ဥပမာအာသဖဌင့်၊ မျာသစလာသောဥပမာမျာသကိုသုံသပါ။ Presto О အသီနာ တူညီသော Glue metastore နဟင့်။

အနဟစ်ချုပ်ရလျဟင် ကျလန်ုပ်တို့၏လုပ်ငန်သကို ဒေတာပိုမိုစိတ်ဝင်စာသဖလယ်ဖဌစ်အောင် ပဌုလုပ်ပေသသည့်အတလက် MLFlow အသိုင်သအဝိုင်သကို ကျေသဇူသတင်ကဌောင်သ ပဌောကဌာသလိုပါသည်။

အကယ်၍ သင်သည် MLflow နဟင့် ကစာသနေပါက၊ ကျလန်ုပ်တို့ထံ စာရေသပဌီသ သင်အသုံသပဌုပုံကို ပဌောပဌရန် မတလန့်ဆုတ်ပါနဟင့်၊ ၎င်သကို ထုတ်လုပ်ရေသတလင် သင်အသုံသပဌုပါက ပို၍ပင်။

သင်တန်သမျာသအကဌောင်သပိုမိုလေ့လာပါ
စက်သင်ယူမဟု။ အခဌေခံသင်တန်သ
စက်သင်ယူမဟု။ အဆင့်မဌင့်သင်တန်သ

ပိုပဌီသဖတ်ပါ:

source: www.habr.com

မဟတ်ချက် Add