# VM 혹은 linux 사용자
wget https://raw.githubusercontent.com/mlflow/mlflow/master/examples/sklearn_elasticnet_diabetes/linux/train_diabetes.py
# Mac 사용자
wget https://raw.githubusercontent.com/mlflow/mlflow/master/examples/sklearn_elasticnet_diabetes/osx/train_diabetes.py
train_diabetes.py
mlflow.log_param
mlflow.log_metric
mlflow.log_model
mlflow.log_artifact
# mlflow ui 를 수행한 디렉토리와 같은 디렉토리로 이동
cd mlflow-tutorial
# example 코드를 실행 후 mlflow 에 기록되는 것 확인
python train_diabetes.py
python train_diabetes.py 0.01 0.01
python train_diabetes.py 0.01 0.75
python train_diabetes.py 0.01 1.0
python train_diabetes.py 0.05 1.0
python train_diabetes.py 0.05 0.01
python train_diabetes.py 0.5 0.8
python train_diabetes.py 0.8 1.0
cd mlruns/0
ls
# 굉장히 많은 디렉토리가 생성되었습니다.
# (각각의 알 수 없는 폴더명은 mlflow 의 run-id 를 의미합니다.)
# 아무 디렉토리에나 들어가보겠습니다.
cd <특정 디렉토리>
ls
# artifacs, metrics, params, tag 와 같은 디렉토리가 있고 그 안에 실제 mlflow run 의 메타 정보가 저장된 것을 확인할 수 있습니다.
MLflow 를 사용하여 간단하게 서빙도 할 수 있습니다.
mlflow models serve -m $(pwd)/mlruns/0`run-id`/artifacts/model -p `port`
mlflow models serve -m $(pwd)/mlruns/0/63d1a9cde7f84190a5634648467be195/artifacts/model -p 1234
원하는 모델의 run id 를 확인한 다음, port 를 지정하여 mlflow models serve 명령을 수행합니다.
이제 해당 서버에 API 를 보내서, predict() 의 결과를 확인해보겠습니다.
API 를 보내기 위해서는, request body 에 포함될 data 의 형식을 알고 있어야 합니다.
diabetes data 의 column 과 sample data 를 확인해보겠습니다.
data = load_diabetes()
print(data.feature_names)
df = pd.DataFrame(data.data)
print(df.head())
print(data.target[0])
['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
0 1 2 3 4 5 6 \
0 0.038076 0.050680 0.061696 0.021872 -0.044223 -0.034821 -0.043401
1 -0.001882 -0.044642 -0.051474 -0.026328 -0.008449 -0.019163 0.074412
2 0.085299 0.050680 0.044451 -0.005671 -0.045599 -0.034194 -0.032356
3 -0.089063 -0.044642 -0.011595 -0.036656 0.012191 0.024991 -0.036038
4 0.005383 -0.044642 -0.036385 0.021872 0.003935 0.015596 0.008142
7 8 9
0 -0.002592 0.019908 -0.017646
1 -0.039493 -0.068330 -0.092204
2 -0.002592 0.002864 -0.025930
3 0.034309 0.022692 -0.009362
4 -0.002592 -0.031991 -0.046641
151.0
127.0.0.1:1234 서버에서 제공하는 POST /invocations
API 요청을 수행해보겠습니다.
curl -X POST -H "Content-Type:application/json" --data '{"columns":["age", "sex", "bmi", "bp", "s1", "s2", "s3", "s4", "s5", "s6"],"data":[[0.038076, 0.050680, 0.061696, 0.021872, -0.044223, -0.034821, -0.043401, -0.002592, 0.019908, -0.017646]]}' http://127.0.0.1:1234/invocations
정해진 Data size 와 다르게 POST /invocations
API 요청을 수행해보겠습니다.
curl -X POST -H "Content-Type:application/json" --data '{"columns":["Age", "Sex", "Body mass index", "Average blood pressure", "S1", "S2", "S3", "S4", "S5", "S6", "S7"],"data":[[0.038076, 0.050680, 0.061696, 0.021872, -0.044223, -0.034821, -0.043401, -0.002592, 0.019908, -0.017646]]}' http://127.0.0.1:1234/invocations