https://madewithml.com/
If you need refresh yourself on ML algorithms, check out our ML Foundations repository (π₯ Among the top ML repositories on GitHub)
π¦ Product | π’ Data | π Modeling |
Objective | Annotation | Baselines |
Solution | Exploratory data analysis | Experiment tracking |
Evaluation | Splitting | Optimization |
Iteration | Preprocessing |
π Scripting | (cont.) | π¦ Application | β Testing |
Organization | Styling | CLI | Code |
Packaging | Makefile | API | Data |
Documentation | Logging | Models |
β»οΈ Reproducability | π Production | (cont.) |
Git | Dashboard | Feature stores |
Pre-commit | CI/CD | Workflows |
Versioning | Monitoring | |
Docker |
π New lessons every month!
Subscribe for our monthly updates on new content.
app/ βββ api.py - FastAPI app βββ cli.py - CLI app βββ schemas.py - API model schemas tagifai/ βββ config.py - configuration setup βββ data.py - data processing components βββ eval.py - evaluation components βββ main.py - training/optimization pipelines βββ models.py - model architectures βββ predict.py - inference components βββ train.py - training components βββ utils.py - supplementary utilities
Documentation for this application can be found here.
Set up environment.
bash export venv_name="venv" make venv name=${venv_name} env="dev" source ${venv_name}/bin/activate
Pull latest model.
bash dvc pull
Run Application
bash make app env="dev"You can interact with the API directly or explore via the generated documentation at http://0.0.0.0:5000/docs.
Coming soon after CI/CD lesson where the entire application will be retrained and deployed when we push new data (or trigger manual reoptimization/training). The deployed model, with performance comparisons to previously deployed versions, will be ready on a PR to push to the main branch.
Set up the development environment.
bash export venv_name="venv" make venv name=${venv_name} env="dev" source ${venv_name}/bin/activate
Pull versioned data and model artifacts.
bash dvc pull
Optimize using distributions specified in
tagifai.main.objective. This also writes the best model's params to config/params.json
bash tagifai optimize \ --params-fp config/params.json \ --study-name optimization \ --num-trials 100
We'll cover how to train using compute instances on the cloud from Amazon Web Services (AWS) or Google Cloud Platforms (GCP) in later lessons. But in the meantime, if you don't have access to GPUs, check out the optimize.ipynb notebook for how to train on Colab and transfer to local. We essentially run optimization, then train the best model to download and transfer it's artifacts.
Train a model (and save all it's artifacts) using params from config/params.json and publish metrics to model/performance.json. You can view the entire run's details inside
experiments/{experiment_id}/{run_id}or via the API (
GET/runs/{run_id}).
bash tagifai train-model \ --params-fp config/params.json \ -- model-dir model \ --experiment-name best \ --run-name model
Predict tags for an input sentence. It'll use the best model saved from
train-modelbut you can also specify a
run-idto choose a specific model.
bash tagifai predict-tags --text "Transfer learning with BERT" # test with CLI app make app env="dev" # run API and test as well
View improvements Once you're done training the best model using the current data version, best hyperparameters, etc., we can view performance difference.
bash tagifai diff --commit-a workspace --commit-b HEAD
Push versioned data and model artifacts.
make dvc
Commit to git This will clean and update versioned assets (data, experiments), run tests, styling, etc.
bash git add . git commit -m "" git push origin main
make docker # docker build -t tagifai:latest -f Dockerfile . # docker run -p 5000:5000 --name tagifai tagifai:latest
make app # uvicorn app.api:app --host 0.0.0.0 --port 5000 --reload --reload-dir tagifai --reload-dir app make app-prod # gunicorn -c config/gunicorn.py -k uvicorn.workers.UvicornWorker app.api:app
make streamlit # streamlit run streamlit/app.py
make mlflow # mlflow server -h 0.0.0.0 -p 5000 --backend-store-uri stores/model/
make docs # python -m mkdocs serve
make great-expectations # great_expectations checkpoint run [projects, tags] make test # pytest --cov tagifai --cov app --cov-report html make test-non-training # pytest -m "not training"
python -m ipykernel install --user --name=tagifai jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter labextension install @jupyterlab/toc jupyter lab
You can also run all notebooks on Google Colab.
While this content is for everyone, it's especially targeted towards people who don't have as much opportunity to learn. I firmly believe that creativity and intelligence are randomly distributed but opportunity is siloed. I want to enable more people to create and contribute to innovation.
@article{madewithml, title = "Applied ML - Made With ML", author = "Goku Mohandas", url = "https://madewithml.com/courses/mlops/" year = "2021", }