á°áá ááá˝áá! áĽá á CROC á¨á˛áŞ ááᢠááᢠá á˛áŞ ááľá ááŽáááśá˝á áá° á°ááŁá á¨ááŁá 3 áááłáľ á áľááĽá¨ááᢠá áá áá ááľáĽ áĽá ááá á áľáááá áááłáᥠá á˝á¨ááŤáŞáá˝ á˛ááą áĽááłáá áĄáŁ áĽááłáŤá¨áąáŁ á áľáá áĽááłáŤááŠáŁ ááááąá áĽááłáŤáŠ áĽá á áá ááá á°áá áĽááłáŤáŠ ááľáľá áĽáá°ááááᢠ; á á°áአááľááŽá˝ ááľáĽ á¨ááŤá˝á¨á¨ááŠáľá áĽá áĽá á¨ááŞá ááá፠áŚáłáá˝á á¨áááľáą á°áá˝á áááá áá; á°áŤá°ááš á¨áŤáľ ááᣠáááľ ááá° ááĽá°á ááŤáá¸áá á á¨ááá§áᢠáá° á°áá ááááŁáľ á¨áááá á áŤá°á á°áááˇá; á¨ááá˝ááá áá áá ááá˘
áá á áá á¨áá°ááá ááááľáá?
ááŽáááśá˝á á áá°áá á áá°áľ ááľáĽ áĽáĽá áśá˝á áĽáááłá¸ááá, áĽá áĽáĽá áśá˝, á ááłááľ áĽááľá á¨ááŤááá¸á ááá áá°ááľ á¨áá°ááááá¸á á ááłááľ á˝ááŽá˝.
áááłáá áĽáááľáá
á ááŁáľ áŠáŁá፠"N" ááľáĽ áĽáŤ áĽááłááá áĽááľáĽ, á°ááŁáŽáš á¨á¤áá¤á áá á¨á°áŤáŤá áá¸á. á á¤áá¤á (DL, CV) ááŽáááľ áá áĽáá°áŤáá, á¨ááŤá á áá ááááŤáľ áá° áá áĽáŤ áĽáá¸áááŤáá, á á á ááá áĽá¨ááľ áĽáááľáłáá áĽá áá° áĽá ááá áá° áá á°á á¨ááá á´á áĽááááłáá.
- á¨áĽáááľ áá áááŁá ᣠá¨áľ áĽááłááá ᣠáá á áááľ hyperparameters áĽáá°áá¨áá áĽá á¨ááá á áá á°áá áá áá¤áľ áĽááłáᣠááľáłááľ á ááĽá
á˘
á ááá á áá áá áá¨áá ááá ááá¨áá¸áľ áĽá á ááŤáŽá˝ ááአáá˝áá-á ááá áṠᣠá áááá ᣠá ááľáłááť á°áĽá°á ᣠá á°áá ááľáĽ á áá áŤá áľ á áŤáŁá˘á˘ á á ááŁá hyperparameters á áŽáą ááľáĽ áĽáá° á áľá°áŤá¨áľ ááľááŽá˝ á˛áááĄ, á á á ááá, á¨áἠá á¨áŤ. á áá áá° ááŽáááľá áłááá áľáá áąá áá ááᣠá°á ááŽáááľ áĽá áŽáľ áĽá áá´á_1.pb á¨ááŁá áá´á áĽáá°áá¨áľá á áľáĽá˘ ááľáá ááá ááá áĽá áááá á ááá˝ áááľá°ááá, áĽááľáá á¨áá᪠áľááťááľáľ áĽáá°áá áĽááľáĽ. - ááĽáá áľ. áŽáąá áááľáŹáľ áĽá áĽá á¨áĽáą áá á¨áá°áŠ áá á áŤáŁá˘ ááá á á ááĽáᢠáĽááá áá á áá ááááŤáľ áĽááąá áĽáá° ááľáłá˝á á áá°ááľáᢠáá á°áá ááá áŤááá á°ááŁá ááá áá˝ááᢠá áá á°á¨á áá ááŁá¨á á ááááá, á áá°á?
- áá´á (áááłá á¨ááŞá áááááŞáŤ) áĽáá ááĽáááᢠá áŁá áĽáŠ áá°áááá áľ á°á¨á á°áá°áá - áá¤áąá áááľááἠááá á áá áá. car_detection_v1.pb áĽáá ááᢠá¨ááŤá áá áĽáá ááĽááá - car_detection_v2.pb. á¨á°áá°á áá á ááᣠáŁáá°á¨áŚáťá˝á ááá áĽá áĽáŤáłá˝á á¨á°ááŤáŠ á ááá´áá¸ááá˝á á áá áá á¨á áá áĽááľá°ááŤááᢠá áá¤áąá ᣠáĽá á ááśá˝ á°ááĽá¨áá ᣠáá¨áá á áĽááá áá°áĽá°áĽ áŤáá áľ (ááá áá áá áá á áá áĽáá°áááá ᣠááááŤáąá á áá á¨á áá á áľá፠á¨áá°áŁá¸á ááłáŽá˝ á áá)á˘
- áĽáş ááá ááá á ááá á áá! áá´á á áá! á¨áááĽááá áá´á áá°áá á áĽááááŤááᣠá á˛áľ á˝áá ááááłáľ á ááá´áá¸á á ááłá á ááááľ áťá ááá ᣠáĽáá˝ááá? áĽá áá áŤá°ááŤá?
á˝ááŽá˝á ááá¨áľ
á á ááľ ááŽáááľ ááá áááľ áá ááĽáŤáľ á¨áĽá á°áá˝ áĽáŤ ááᢠáĽá á¨áá á áá á°áá˝ áľá°á áááŁá, áĽá ááŽáááśá˝ á á, áĽá ááŽáááśáš áĽáŤáłá¸á á¨á áá ááľáĽáľáĽ áááá. á ááľ ááááľ ááá áá, á¨áá á¨á°áááá áá°áľ (áĽá áĽáť áłááá) á á°áá°á áá áśá˝ ááľáĽ áŤá áááłáá˝ á¨ááľáá áá° áľáááá˝ áá¨á°áłá. áá áá á¨ááŁáá áááᣠá፠áááŁáľáᣠáááŽá˝áᣠááááŁáľá á¨á°áá áá˝á áĽááŤáł ááŁáľ áĽá á áá¨á¨áťá áááἠááŁáľá áŤáľá¨áľááᢠááá áĽááłá ááá˝áá á ááľ á áááľ á¨áľáŽ áá°á á°á፠á¨ááá¨á°á á˘áááᣠááá á°á áĽááá á áááŤáľ á°ááá áá°áľ áĽáá°ááááá á ááááá˘
áľááá á ááľ á¨áĽáľááľ á ááŞáľ ááľáĽ á áááá áĽá áááą á¨áááŁá¸á á˝ááŽá˝ áĽááłá á áá°ááᢠáá áá áááľá¨á á¨áá¨á°ááľá áŤáľáááááłá:
- ááš á áá áááł á¨áĽáŤ áá¤áśá˝á áá¨áá¸áľ;
- á áłá˛áľ á°áŤá°áá˝á á¨ááłá°á áá°áąá ááá ááľá¨á;
- á¨áááľ á áŤáŁá˘á á¨áááááľ áá°áľá ááá ááľá¨á;
- á¨á ááłáŤá áĽáŞáľ áá°áľá áŤáá áŠ;
- áá´áá˝á ááá¨ááἠááš ááááľ áááááľ;
- áá´á áááľ á áľá°áłá°á ááŁáŞáŤ ááááľ;
- áá´áá˝á áá° áááľ ááá á¨áĽ ááááľ áááá.
áá áá á¨á áááľ áĄá°áľ á ááá áĽá á á°ááťá¸ áááł ááááŁá á á¨ááŤáľá˝á á¨áľáŤ áá°áľ áááŁáľ á áľááá áá? áá ááááľ MLOps ááŁáá
MLOpsᣠááá DevOps ááá˝á áááŞáŤáŁ á¨ááἠáłáááľ áĽá á¨á áᲠáĄáľáá˝ áĽáá˛á°áŁá አáĽá á¨áá´á áááľ áĽá áá°ááŤáąá ááĽááľ áĽáá˛á¨áአáŤáľá˝áá¸áá á¨áá˝á áááŞáŤ áá´áá˝á á áá¨áłá°áᣠá áá¨ááἠáĽá á áľá°áłá°áá˘
áá˝áá
á á˝áá ááľáĽ á¨áá°áąá á ááľ ááá áĽáť áĽáááťááᢠááľáá ፠ᣠᨠMLflow ááłáŞáŤá áĽá áááá ᣠááááŤáąá⌠áá áááľ ááá ááŽáááľ áá, ááááááľ á ááľá°á áá á áŤáá áŽáľ áŤáľáááá áĽá á¨áłáá áá ááľá ááááá˝ áá áá á°áľ á á. áĽáá° Kubeflow, SageMaker, Trains, ááá° á¨ááłá°á ááá˝ ááłáŞáŤáá˝á á áááá¨áĄá áááá áĽá ááááŁáľá áááááľá á¨á áá á¨ááľáááá ááááľ áá˝áá.
ᨠMLFlow ááŁáŞáŤá á áá áá ááłáá á áá áá MLOps ááááŁáľ
MLFlow ᨠml áá´áá˝á á¨ááááľ áá°áľ á áľá°áłá°á áááľ ááá ááľá¨á ááá˘
MLflow á áŤáľ áááá˝á áŤá áááá
- MLflow Tracking - áá¤áąá á¨ááááἠáá¤áśá˝á áĽá áá¤áśá˝á áá¸ááá;
- MLflow ááŽáááľ - áŽáľ ááá¸á áĽá á ááááá ááľá¨á áá áĽáá°áá áááŁááľ ááá áľáááłá;
- MLflow áá´áá˝ - áá´áá˝á áá° áááľ á¨áá°ááŤáľ áááááľ;
- MLflow Registry - áá´áá˝á áĽáá˛áŤá¨ááš áĽá áááłá¸áá á ááá¨áá áá¨ááť ááľáĽ áĽáá˛áŤáľá°áłáľáŠ ááá áľáááłáá˘
MLflow á áááľ á áŤááľ áá áá°áŤááĄ-
- ááľááá ááááἠá¨áááááá áľ á¨áĽáá áᣠáá¤áśá˝ áĽá áááŞáŤáá˝ áá áá°áľ ááá˘
- á ááľ áá¨áŤ á ááľ áá á¨áááľ "áááľ" áá.
ááá á¨ááłáá á°á¨ááá˝ á áĄáĄááą 18.04 áŚááŹá˛áá á˛áľá°á áá áá°áá áŤáá˘
1. á ááááŠá áŤá°ááŠ
ááŽáááłá˝áá á ááá áĽááľááľá°áłáľá áĽá á áľááááá áá¨á áá áĽááľááá á á áááá áĽáá°ááŤááᢠMLflow áá¨áłá°áŤ á áááá áááľ áá áá áááá˝ á ááľá˘
- á¨ááᣠáá°áĽá - áľá á¨á°áááᥠáá´áá˝ áá¨áá ááá¨áá¸áľ áááááľ áŤáá (4 DBMSs áá°ááá: mysql, mssql, sqlite áĽá postgresql);
- artifact store - á ááśá˝á ááá¨áá¸áľ áááááľ áŤáá (7 á¨áá¨ááť á ááŤáŽá˝á áá°ááá Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP á áááá, SFTP á áááá, NFS, HDFS).
áĽáá° á¨á ááľ áá°áĽá ááááááľáŁ ᨠsftp á áááá áĽááá°áľá˘
- áĄáľá ááá á
$ sudo groupadd sftpg
- á°á áá áŤáá áĽá á¨ááá áá áŤáááááľ
$ sudo useradd -g sftpg mlflowsftp $ sudo passwd mlflowsftp
- áááľ á¨ááłá¨áť á
ááĽáŽá˝á ááľá°áŤá¨á
$ sudo mkdir -p /data/mlflowsftp/upload $ sudo chown -R root.sftpg /data/mlflowsftp $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
- áĽááľ ááľááŽá˝á áá° /etc/ssh/sshd_config áŤáá
Match Group sftpg ChrootDirectory /data/%u ForceCommand internal-sftp
- á áááááąá áĽáá°áá áŤáľáááŠ
$ sudo systemctl restart sshd
áĽáá° á¨ááᣠáá°áĽá postgresql áĽááá°áľá˘
$ sudo apt update
$ sudo apt-get install -y postgresql postgresql-contrib postgresql-server-dev-all
$ sudo apt install gcc
$ pip install psycopg2
$ sudo -u postgres -i
# Create new user: mlflow_user
[postgres@user_name~]$ createuser --interactive -P
Enter name of role to add: mlflow_user
Enter password for new role: mlflow
Enter it again: mlflow
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
# Create database mlflow_bd owned by mlflow_user
$ createdb -O mlflow_user mlflow_db
á ááááŠá ááááá á¨áá¨á°ááľá á¨áááśá ááŹáá˝á ááŤá áŤáľáááááłá (á¨á°áᨠáááŁá á áŤáŁá˘ áááá á áĽáááŤáá)
pip install mlflow
pip install pysftp
á ááááŤá˝áá áĽáááá
$ mlflow server
--backend-store-uri postgresql://mlflow_user:mlflow@localhost/mlflow_db
--default-artifact-root sftp://mlflowsftp:mlflow@sftp_host/upload
--host server_host
--port server_port
2. áá¨áłá°áŤ á áá
á¨áĽáá áá˝á áá¤áľ áĽááłáá á áŁá¨áá°ááśáš á¨ááá˘áá˝ áľáááśá˝ áá áĽá¨á°áá ᨠáĽááłá áĽáá˛á¨áą áŁáĽá ááľááá ááśá˝ áĽá áĽááľá á¨ááá áá°áąá á á°á¨áá áááł áá°áá°á áĽáá˛á˝á áŁááľáľáá áá¨á á ááĽáᢠáá¨áłá°á áááľ áááŞáŤáá˝áᣠáááŞáŤáá˝áᣠá ááśá˝á áĽá áľááľáá áá á áááá áááááá á°á¨á᪠áá¨á á áĽá áááł á á áááአáá ááľááἠáááľ ááá˘
áááłá áĽá áľáá˝ áá ááŠ
á áŁá á áľá°áłá˝ áááŽá˝ á¨áá¨á°áąáŁá¸á ááľááŽá˝ áĽáá á á
def run(self, epochs, lr, experiment_name):
# getting the id of the experiment, creating an experiment in its absence
remote_experiment_id = self.remote_server.get_experiment_id(name=experiment_name)
# creating a "run" and getting its id
remote_run_id = self.remote_server.get_run_id(remote_experiment_id)
# indicate that we want to save the results on a remote server
mlflow.set_tracking_uri(self.tracking_uri)
mlflow.set_experiment(experiment_name)
with mlflow.start_run(run_id=remote_run_id, nested=False):
mlflow.keras.autolog()
self.train_pipeline.train(lr=lr, epochs=epochs)
try:
self.log_tags_and_params(remote_run_id)
except mlflow.exceptions.RestException as e:
print(e)
áĽáá self.remote_server á mlflow.tracking áá´áá˝ áá áľáá˝ áá á á፠ááᢠMlflowClient (ááážáľ áá áŤá°á¨áŠáľ)ᣠá áĽáą áĽááłáł áá¨áŤ áá áአáĽá á á áááአáá á ááľá˘ á ááá á á¨ááľáááŞáŤá áá¤áľ á¨áľ ááááá áĽááłáá áľ áĽá áááá (mlflow.set_tracking_uri(self.tracking_uri))ᢠá ááśáá˛á áááá mlflow.keras.autolog ()á á ááááᢠá á áá áá MLflow Tracking á TensorFlowᣠKerasᣠGluon XGBoostᣠLightGBMᣠSpark á áŤáľ á°á áááŁáľá áá°áááᢠá¨áĽááľáá áááá ááá á¤á°-áá˝áááľ áŤááá ááááá á ááá˝ áááŁáľ áá˝ááᢠáľáá á áĽá¨áááá ááᢠá áááľ á áááአáá áááŤáá˝á áĽá áá¤áľ áááŞáŤáá˝á áááááĄá˘
áááľ ááľááŽá˝ áĽá áĽááľáᣠáá áĽáá°ááá á°áᣠáľá ááá á ááŽá˝ áá¨á ááááľ áá˝ááᢠáĽáŠ?
3. ááŽáááąá áĽáááááá
á áá ááŽáááąá ááááá ááá áĽááľááá. áá
áá áááľá¨á ᨠMLproject áĽá conda.yaml áááá áá° ááŽáááą áľá áŤáááľá˘
ML ááŽáááľ
name: flow_segmentation
conda_env: conda.yaml
entry_points:
main:
parameters:
categories: {help: 'list of categories from coco dataset'}
epochs: {type: int, help: 'number of epochs in training'}
lr: {type: float, default: 0.001, help: 'learning rate'}
batch_size: {type: int, default: 8}
model_name: {type: str, default: 'Unet', help: 'Unet, PSPNet, Linknet, FPN'}
backbone_name: {type: str, default: 'resnet18', help: 'exampe resnet18, resnet50, mobilenetv2 ...'}
tracking_uri: {type: str, help: 'the server address'}
experiment_name: {type: str, default: 'My_experiment', help: 'remote and local experiment name'}
command: "python mlflow_training.py
--epochs={epochs}
--categories={categories}
--lr={lr}
--tracking_uri={tracking_uri}
--model_name={model_name}
--backbone_name={backbone_name}
--batch_size={batch_size}
--experiment_name={experiment_name}"
MLflow ááŽáááľ á ááŤáł ááĽá¨áśá˝ á ááľ
- áľá - á¨ááŽáááľá áľá;
- á áŤáŁá˘ - á áĽá áááł, conda_env á ááŽááł ááááľ áĽá á áá áĽáá°ááá áĽá á¨áĽááááľ ááááŤá á conda.yaml ááá ááľáĽ áĽááłá áŤááááłá;
- á¨ááá˘áŤ ááĽáŚá˝ - á á¨áľááš áááá˝ áĽá á á¨áľááš áááŞáŤáá˝ ááŽáĽ áĽáá°ááá˝á áá ááá (áľáá á á˛ááአááá áááŞáŤáá˝ á áŤáľ-á°á áááááŁá)
conda.yaml
name: flow_segmentation
channels:
- defaults
- anaconda
dependencies:
- python==3.7
- pip:
- mlflow==1.8.0
- pysftp==0.2.9
- Cython==0.29.19
- numpy==1.18.4
- pycocotools==2.0.0
- requests==2.23.0
- matplotlib==3.2.1
- segmentation-models==1.0.1
- Keras==2.3.1
- imgaug==0.4.0
- tqdm==4.46.0
- tensorflow-gpu==1.14.0
áśá¨áá áĽáá° á¨áŠáŤ ááá á áŤáŁá˘ áá áá áá˝áá áá°á¨á᪠ááááŽá˝ áĽáŁááá áááá¨áą
4. áľáá á áĽáááá
ááŽáááąá ááá°á áá° á¨ááŽáááą áá፠áĽáááłáá-
git clone https://github.com/simbakot/mlflow_example.git
cd mlflow_example/
ááááľ á¤á°-áá˝áááľ ááŤá áŤáľáááááłá
pip install mlflow
pip install pysftp
ááááŤáąá áĽá conda_env á áá ááá ááłá á ááŽááł á áŽáááŠá°áá áá ááŤá á áá áľ (ááá áá áááá á áľááá ááŹáá˝á áĽáŤáľá á ááŤá áĽá á ááľááť áááŞáŤáá˝ á ááŤááľ áá áá ááá áá˝áá)á˘
ááá á¨ááá áľ á°á¨ááá˝ á°á áá ááá áĽá áľáá ááá áááá áĽáá˝ááá. á¨ááŽáááą áľá;
$ mlflow run -P epochs=10 -P categories=cat,dog -P tracking_uri=http://server_host:server_port .
áľáááá á¨áᥠá áá, á¨áŽááł á áŤáŁá˘ á áŤáľ-á°á ááá áŤá áĽá áľáá áá ááááŤá.
á¨áá áŁáá ááłá ááĽáá á á¨ááááľ áĽááľ á áááŤáá ᣠá¨ááá¨ááááŁá¸áá ááľáŚá˝ (áááá áááá áá¨áľ áá˝áá)
ááá á¨áá˝á áááŞáŤáá˝ áá áááá á MLproject ááá ááľáĽ ááááá˘
5. á¨áľáá ááľ áá¤áśá˝á ááááá
áľáá ááá á¨á¨á¨áľá á áá á á áłáš ááľáĽ áá° á ááááŤá˝á á áľáŤáť áááľ áĽáá˝ááá
áĽáá á¨áááá áá¨áŤáá˝ áááá (á¨áá á áľá°ááŤ) áĽá áĽáá˛áá á áŠáŤáá˝ (ááá) áá áŤááá áá¨á áĽááŤáá. ááĽáŤááłááą á áá á¨á áá áááá áá¨á (áááŞáŤáá˝áŁ áááŞáŤáá˝áŁ á ááśá˝ áĽá á ááłááľ á°á¨á᪠áá¨ááá˝) áá¨áľ áĽáá˝áááá˘
ááĽáŤááłááą áááŞáŤ á¨áááŚá˝á áłáŞá áááá¨áľ áĽáá˝ááá
áĽáááŤá˘ á á áá áá áá¤áąá á "á áĽá " áááł áá°áá°á áĽáá˝ááá, áĽá ᨠMLflow API á áá áá á ááśáá˛á áá¨áááŤá ááááá áá˝áá.
6. áá´áá áááááĄ
áá´áá˝áá á¨áá¨ááá á áá ááŚáááľ ááá áááá á¨áá°áá á áá áááááĄá áĽáááĽááá, ááá á áĽá á¨ááááááá ááľáááŞáŤ áĽááááŁáá (á áá°áá á ááá˝ áá áĽáá°ááłá¨á) áĽá áá° áłá˝ áĽááááłáá.
á¨áĽáá áá´á áľá á¨á°á á á áá, áľáŞáľ á áá. á°ááłáłá áľá áŤáá áá áá´á áŤáľáááĄ, áľáŞáą á áŤáľ-á°á ááťáťáá.
ááĽáŤááłááą áá´áᣠááá፠á¨áá¨á á¨áśáľáą áááśá˝ á ááąá ááá¨áĽ áĽáá˝ááá (áľá´á ááᣠááŽáłáá˝áᣠáá á°á)ᣠá ááá áᣠá¤áá áá á áá ááᣠáĽááá á áááśá˝ ááááľ áĽáá˝áááᣠáá á á¨áľáŞáľ ááᣠá°á¨á᪠á°ááááááľá áá°áŁáá˘
áĽáá˛áá áááá áá´áá˝ ááá ááłá¨áť á ááá˘
áĽá á¨áĽááą áľáŞáśá˝
áá áĽáá° áá°áá á ááá˝, ááá áľáŤáá˝ á¤áá áá á áá áá áá¨ááá áá˝áá.
7. áá´áá áŤá°ááŠ
á áá á°á¨á, áá°á á˛á á¨á°áá á (áŹáŤáľ) áá´á á áá. áĽáá´áľ áĽáá°áá ááá áľ ááłááĄ-
class SegmentationModel:
def __init__(self, tracking_uri, model_name):
self.registry = RemoteRegistry(tracking_uri=tracking_uri)
self.model_name = model_name
self.model = self.build_model(model_name)
def get_latest_model(self, model_name):
registered_models = self.registry.get_registered_model(model_name)
last_model = self.registry.get_last_model(registered_models)
local_path = self.registry.download_artifact(last_model.run_id, 'model', './')
return local_path
def build_model(self, model_name):
local_path = self.get_latest_model(model_name)
return mlflow.keras.load_model(local_path)
def predict(self, image):
image = self.preprocess(image)
result = self.model.predict(image)
return self.postprocess(result)
def preprocess(self, image):
image = cv2.resize(image, (256, 256))
image = image / 255.
image = np.expand_dims(image, 0)
return image
def postprocess(self, result):
return result
áĽáá self.registry á mlflow.tracking.MlflowClient áá áľáá˝ áá á ááŤáŁááážáľ ááᢠááĽáĄ á¨áááľ á áááá ááááľ áĽá áĽá፠áá´á á á°á áá°á áľá áĽá á¨á áἠááá á¨áááľ áľáŞáľ áááá ááᢠá ááá áᣠá áá˛áááąá áá° ./model á áá á ááá áá´áá á¨áá áá፠mlflow.keras.load_model(local_path) áĽáááŁááᢠá áá á¨áĽáá áá´á áá áá áĽáá˝ááá. á¨á˛áŞ (ML) ááá˘áá˝ áá´áá á ááá ááťáťá áĽá á á˛áľ áľáŞáśá˝á áá°á áá˝ááá˘
á áá áááŤá
á¨ááá áľ áľáááľ á á áá¤áŤáááĄ-
- áľá á¤áá¤á áá´áὠᣠá¨áĽáá á áá°áľ áĽá áá¤áśá˝ áá¨áá á ááá¨áá áŤá¨ááťá á¤
- á¨áááľ á áŤáŁá˘á á ááĽááľ áá°ááŤáľ;
- á áá´áá˝ áá á¨áĽáŤáá áá°áľ áá¨áłá°á áĽá áá°áá°á;
- á¨áá´áá˝á áááł ááá°á áĽá áááľá°áłá°á ááš áá áŁ
- á¨á°áááľá áá´áá˝ áááááľ ááá áá.
áá ááłá á áťááááľ áá áĽá á¨áŤáľáá áľáááľ áááááŁáľ áĽáá° áááť áá áŤááááá, áá á á¨áá¤áśá˝á áááá áĽá áá´áá˝á ááááἠ(ááĽáĽ 5 áĽá 6 á á á°á á°á¨á°á) ááŤáŤáľáľ áá˝áá ááá á¨ááἠáľáĽáľáŚá˝á áľáŞáľ áá¨ááŤá, ááá áá ááá? ááááłáľ á¨áá¨ááŠáľ ááĽáĽ á á á ááá MLOps áŤáľáááááłáᣠMLflow á¨áá ááá፠áá´ ááá˘
áŤááłá¨áá¸áá á˝ááŽá˝ áŤáá ááá áťá?
ááááśá˝áá áĽáá˛áŤáá áá° áľáááą áá áá¨ááŤá?
á˝ááŽášá á áá ááá á á¨áá ááááłáľ áá ááááľ ááłáŞáŤáá˝á áĽá áá´áá˝á áá ááá?
PS áááľ á áááá˝á áĽá°áááááĄ-
github ááŽáááľ -
MLflow -
ááĽáŤááá˝ á¨áĽá á¨áĽáŤ á˘ááá - [á˘áá á¨á°á á á]
áľáá
áłá˝á á á¨ááá á¨á°ááŤáŠ ááá
áśá˝á áá áᲠáľááťááľáśá˝ áŤáľá°áááłá áááłááĄ- ááá 8 áá 19áĄ00 á ááľáŽ á°á áľ á á˛áŞ áľáĽá°áŁ á áŚáááá ááááľ áá°á¨ááᥠááááľ áŤáá
ááłá°á áľá˝ááá
ááááŁ
ááá: hab.com