Cette repository contient la mise en place d'une simple (formulaire web) basé sur un model IA exploité via un API Flask. L'objective c'est d'avoir ce modèle suivant un pipeline MLOPS complet, déployé sur l'infrastructure AWS. Les technologies utilisé : Python, Flask, MLFLow, dvc, AWS EC2, AWS IAM, AWS S3, HTML, CSS, JS (maybe)
- Allez dans votre compte AWS,
- Crée un utilisateur dans IAM, avec permissions admin, et crée un clé d'accès et le telecharger.
- Crée un bucket s3, (rendre son accès public - pour minimiser les configuration nécessaire entre s3 et MLFLOW)
- Crée une machine Ec2 (type medium, OS:ubuntu), crée un key paire pour cette machine.
- sur cette machine on doit configurer notre MLFLOW avec les commandes suivantes :
sudo apt update
sudo apt install python3-pip
sudo apt install pipenv
sudo apt install virtualenv
mkdir mlflow
cd mlflow
pipenv install mlflow
pipenv install awscli
pipenv install boto3
pipenv shell- Maintenant configurer les accès à s3 pour MLflow depuis la machine (grace au clé que vous avez crée pour l'utilisateur)
# Set aws credentials
aws configure- Maintenant vous pouvez lancer mlflow dans cette machine en y précisant le nom de votre bucket (NB: le bucket sera utiliser pour stoker le cash de MLFLOW les runs, les experiments, les artefacts logé, les models ...)
# run mlflow server to be accessible globaly
mlflow server -h 0.0.0.0 --default-artifact-root s3://YOUR_BUCKET_NAME- Mlflow est running donc vous pouvez l'accéder depuis l'adresse le lien
http://ADDRESS_IP_EC2:5000 - Si vous avez stopper la machine et vous avez connecter à nouveau il faut reactiver l'environement pipenv et relancer votre mlflow.
pipenv est un gestionaire d'environement python basé sur le dossier (dans ce cas "mlflow") ce n'est pas commes les autres packageurs d'environnement qui peuvent etre activé globalement avec un chemin absolue.
cd mlflow
pipenv shell
mlflow server -h 0.0.0.0 --default-artifact-root s3://YOUR_BUCKET_NAME- Maintenant vous pouvez ajouter ce lien
http://ADDRESS_IP_EC2:5000comme votre mlflow_tracking_uri dans vos scripts ou notebook locales, et grace à ça les modèles que vous crée sont maintenant en ligne.
- Crée une repository git sur github, cloner la sur un dossier vide locale
- Ajouter les fichier que vous avez crée dans votre code dans le dossier contenant le git
- Faitez un push :
git add .;git commit -m "first commit";git push
- initier dvc avec
dvc init - crée une repository dvc
dvc init
conda install dvc[s3]
dvc remote add -d dvcstore s3://YOUR_BUCKET_NAME/dvc
dvc remote modify dvcstore access_key_id *******
dvc remote modify dvcstore secret_access_key ********
dvc add data/raw
dvc push # now you can check on your s3 to see the resultex:
preprocess:
#input : data/raw/diabetes.csv
#output : data/preprocessed/data.csv
input : data/raw/diabetes.csv # for this to work you need to pull from dvc first or bring the file manually.
output : s3://VOTRE_BUCKET_S3/data/preprocessed/data.csv
train :
data : s3://VOTRE_BUCKET_S3/data/preprocessed/data.csv
model_path : models.pkl
random_state : 42
n_estimators: 100
max_depth: 5
mlflow:
MLFLOW_TRACKING_URI : http://EC2-PUBLIC-IP-ADRESS:5000
aws :
aws_access_key_id: YOUR_ACCESS_KEY
aws_secret_access_key: YOUR_SECRET_ACESS_KEY
region_name: AWS_REGIONCe fichier assume que votre code preprocessing (utilise des données diabetes csv local [ou traked avec dvc et pulled]), applique le preprocessing pour sauvergarder une version preprocessed sur s3, et utlise la version sauvegardé sur s3 pour faire le training. EN suite le fichier evaluate utilise le mlflow running sur ec2 pour recuperer la version nommé dans le code de votre modèle pour l'appeler.
- Comment connecter à votre machine EC2 depuis votre propre terminale:
ssh -i path/to/your-key.pem ec2-user@<your-ec2-public-ip>
# ex:
ssh -i "C:\Users\yana\Downloads\mlflow-server-ya.pem" ubuntu@13.53.36.3