π€
Serving Machine Learning Models
π₯
About This repository contains instructions, template source code and examples on how to serve/deploy machine learning models using various frameworks and applications such as Docker, Flask, FastAPI, BentoML, Streamlit, MLflow and even code on how to deploy your machine learning model as an android app.
The Repository also has code and how-to's for deploying your apps to various cloud platforms(AWS, Heroku, Vercel etc), working with Github actions for CI/CD(Continuous Integration and Continuous Development), TDD(Test driven development) with pytest and other useful information.
π
Table of Contents - Serving Machine Learning Models
π€
Repository Structure
βββ androidapp
β βββ buildozer.spec
β βββ data
β β βββ icon.png
β βββ main.py
β βββ requirements.txt
βββ bentoml
β βββ bentofile.yaml
β βββ bentosklearn.py
β βββ Data
β β βββ cars.csv
β β βββ cars.zip
β β βββ Data Dictionary - carprices.xlsx
β βββ __init__.py
β βββ requirements.txt
β βββ service.py
βββ Data
β βββ cars.csv
β βββ cars.zip
β βββ Data Dictionary - carprices.xlsx
βββ fastapi
β βββ app.py
β βββ Dockerfile
β βββ fastapi-setup.sh
β βββ favicon.png
β βββ heroku.yml
β βββ models
β β βββ model.pkl
β β βββ sklearn_gbr.pkl
β βββ models.py
β βββ requirements.txt
β βββ train.py
β βββ vercel.json
βββ flaskapp
β βββ app.py
β βββ models
β β βββ model.pkl
β β βββ sklearn_gbr.pkl
β βββ Procfile
β βββ requirements.txt
β βββ runtime.txt
β βββ static
β β βββ favicon.png
β β βββ w3.css
β βββ templates
β β βββ index.html
β β βββ result.html
β β βββ static
β β β βββ favicon.png
β β β βββ w3.css
β β βββ w3.css
β βββ utils.py
βββ __init__.py
βββ LICENSE.md
βββ mlflow
β βββ data
β β βββ cars.csv
β β βββ cars.zip
β β βββ Data Dictionary - carprices.xlsx
β βββ mlflow_app.py
β βββ mlruns
β β βββ 0
β β βββ 387be03e078049f69b2f68c916b1c4fa
β β β βββ meta.yaml
β β β βββ tags
β β β βββ mlflow.source.git.commit
β β β βββ mlflow.source.name
β β β βββ mlflow.source.type
β β β βββ mlflow.user
β β βββ 7813850eea9344c0a8e67670fd1eb52b
β β β βββ artifacts
β β β β βββ cars.csv
β β β βββ meta.yaml
β β β βββ tags
β β β βββ mlflow.source.git.commit
β β β βββ mlflow.source.name
β β β βββ mlflow.source.type
β β β βββ mlflow.user
β β βββ 8d81478e0b7a4ab78a76afb2c0225d85
β β β βββ meta.yaml
β β β βββ tags
β β β βββ mlflow.source.git.commit
β β β βββ mlflow.source.name
β β β βββ mlflow.source.type
β β β βββ mlflow.user
β β βββ d152c4ed8ff846459df57701db6542b0
β β β βββ artifacts
β β β β βββ cars.csv
β β β βββ meta.yaml
β β β βββ metrics
β β β β βββ R2_Score
β β β βββ params
β β β β βββ gbr
β β β βββ tags
β β β βββ mlflow.source.git.commit
β β β βββ mlflow.source.name
β β β βββ mlflow.source.type
β β β βββ mlflow.user
β β βββ ee11d66e35c64736bda4bd41429a678b
β β β βββ artifacts
β β β β βββ cars.csv
β β β βββ meta.yaml
β β β βββ tags
β β β βββ mlflow.source.git.commit
β β β βββ mlflow.source.name
β β β βββ mlflow.source.type
β β β βββ mlflow.user
β β βββ f6aeeb22a768414e81e1825e8b65c728
β β β βββ artifacts
β β β β βββ cars.csv
β β β β βββ model
β β β β βββ conda.yaml
β β β β βββ MLmodel
β β β β βββ model.pkl
β β β β βββ python_env.yaml
β β β β βββ requirements.txt
β β β βββ meta.yaml
β β β βββ metrics
β β β β βββ R2_Score
β β β βββ params
β β β β βββ gbr
β β β βββ tags
β β β βββ mlflow.log-model.history
β β β βββ mlflow.source.git.commit
β β β βββ mlflow.source.name
β β β βββ mlflow.source.type
β β β βββ mlflow.user
β β βββ meta.yaml
β β βββ tags
β β βββ mlflow.note.content
β βββ requirements.txt
βββ Notebooks
β βββ Notebooks.zip
βββ README.md
βββ setup.sh
βββ streamlitapp
β βββ streamlit_app.py
βββ tests
βββ test_api.py
β‘
Getting StartedBefore we get into building and deploying our models we'll have to setup our environment. I use 'pyenv' for managing different versions of python and pyenv-virtualenv for setting up virtual environments. You can learn how to install pyenv on your operating system by checking out their official github. Also it's important you have git installed on your system so you can easily clone this repository. If you're on Linux you can install git by running this command:
sudo apt-get install git
β‘
Configuring Python EnvironmentTo easily setup our environment I've created a shell script named 'setup.sh' for easily installing and configuring pyenv on your system. It's assumed we are working with Linux but there are ways to install pyenv on windows too. To install pyenv easily with the shell script run the following commands in your terminal:
- Clone this repository:
git clone https://github.com/Nneji123/Serving-Machine-Learning-Models.git
- Change the working directory
cd Serving-Machine-Learning-Models
- Run the script
./setup.sh
- After running the script you can check if pyenv successfully installed by running:
pyenv versions
And you should see Python 3.8.10 as the installed version.
Installing Dependencies and Creating virtual environments with pyenv
We will be working with python and some frameworks such as FastAPI, Flask, Streamlit etc and we will need to install their various dependencies. In each folder I've created specific requirements.txt files for installing the dependencies needed for each project. For example you can install the FastAPI application requirements with pip by running:
cd fastapi
pip install -r requirement.txt
Same goes for the other projects in this repository as well.
β‘
Building Machine Learning Model: Car Price PredictionIn this project we will be building a machine learning regression model that can predict the price of a car based on some features. The dataset used can be found on Kaggle and can also be found in this repository. You can check out the notebooks folder which contains the notebook used for analysing and visualising the data and building our model.
β‘
How to save Models with JoblibJoblib is a set of tools to provide lightweight pipelining in Python. You can read more about Joblib here. To save our model I used joblib to save the model as a pickle file(.pkl) so we can later use the model to make predictions. To save your models(assuming you've built a model) you can do that by running:
import joblib
model = LinearRegression
model.fit(X_train, y_train)
joblib.dump('model.pkl', model)
Version Control your models with DVC(Data Version Control)
What is DVC for? Data Version Control, or DVC, is a data and ML experiment management tool that takes advantage of the existing engineering toolset that we are familiar with (Git, CI/CD, etc.). DVC is meant to be run alongside Git. The git and DVC commands will often be used in tandem, one after the other. In this project I used DVC to manage our models and data. You can read more about DVC and how to use it here.
Creating Applications with your Model :computer
In this section we will be serving our models as applications using these frameworks:
- FastAPI
- Flask
- BentoML
- Mlflow
- Streamlit
- KivyMD
β‘
Serving Models with FastAPIFastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints.
The key features are:
-
Fast: Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). One of the - fastest Python frameworks available.
-
Fast to code: Increase the speed to develop features by about 200% to 300%. *
-
Fewer bugs: Reduce about 40% of human (developer) induced errors. *
-
Intuitive: Great editor support. Completion everywhere. Less time debugging.
-
Easy: Designed to be easy to use and learn. Less time reading docs.
-
Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.
-
Robust: Get production-ready code. With automatic interactive documentation.
-
Standards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.
To serve models with FastAPI I've created an example template in this repository in which I deployed the car price prediction model as an API which can be used to make POST requests to get predictions. To run that project locally on your system run the following:
cd fastapi
pip install -r requirement.txt
uvicorn app:app --reload
You should be able to view the API on your browser by visiting http://127.0.0.1:8000/
You can also view the deployed API here https://carpriceapi.herokuapp.com
In this tutorial you can learn more about how to serve your model as a RESTful API with FastAPI.
π·
Screenshot
GitHub
You can also check out other FastAPI applications on my
β‘
Serving Models with FlaskFlask is a micro web framework written in Python. It is classified as a microframework because it does not require particular tools or libraries. It has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions. However, Flask supports extensions that can add application features as if they were implemented in Flask itself. Extensions exist for object-relational mappers, form validation, upload handling, various open authentication technologies and several common framework related tools.
To serve models with flask I've created a template in this repository in which I deployed the car price prediction model as a web app with basic html and css. To run that project locally on your system run the following:
cd flaskapp
pip install -r requirements.txt
python app.py
You should be able to view the application on your browser by visiting http://127.0.0.1:5000/
You can also view the deployed application here: https://carflaskpred.herokuapp.com
π·
Screenshot
β‘
Serving Models with BentoMLBentoML is a Python open-source library that enables users to create a machine learning-powered prediction service in minutes, which helps to bridge the gap between data science and DevOps.
To serve models with Bentoml I've created a template in this repository in which I deployed the car price prediction model as an API with Bentoml. To run that project locally on your system run the following:
cd bentoml
pip install -r requirements.txt
python bentosklearn.py
bentoml serve service.py:service --reload
You should be able to view the application on your browser by visiting http://127.0.0.1:5000/
β‘
Serving Models with MlflowMLflow is a platform to streamline machine learning development, including tracking experiments, packaging code into reproducible runs, and sharing and deploying models. MLflow offers a set of lightweight APIs that can be used with any existing machine learning application or library (TensorFlow, PyTorch, XGBoost, etc), wherever you currently run ML code (e.g. in notebooks, standalone applications or the cloud).
To serve models with mlflow I've created a template in this repository in which I deployed the car price prediction model as an API with mlflow. To run that project locally on your system run the following:
cd mlflow
pip install -r requirements.txt
python mlflow_app.py
Then you can run this command below to view the Mlflow User Interface:
mlflow ui
β‘
Serving Models with StreamlitStreamlit is an open source app framework in Python language. It helps us create web apps for data science and machine learning in a short time. It is compatible with major Python libraries such as scikit-learn, Keras, PyTorch, SymPy(latex), NumPy, pandas, Matplotlib etc.
To serve models with Streamlit I've created a template in this repository in which I deployed the car price prediction model as a web app with streamlit. To run that project locally on your system run the following:
cd streamlitapp
pip install -r requirements.txt
streamlit run streamlit_app.py
You should be able to view the web application in your browser with this link http://127.0.0.1:8501/
You can also check out the streamlit application deployed on streamlit cloud here
π·
Screenshot
link
You can also check out my other Streamlit Projects with this
β‘
Serving Models as Desktop/Mobile ApplicationsYou can also deploy machine learning models as desktop and mobile applications with frameworks such as KivyMD. You can learn more about deploying models with KivyMD by checking out this tutorial.
I've also created a template application in this repository for deploying the car price prediction model with KivyMD. I also built the applications as an android app with buildozer and github actions which will be explained in later sections. You can check out and install the android applications by checking out the bin folder in the data branch of this repository.
To run that project, run the following commands:
cd androidapp
pip install -r requirements.txt
python main.py
You should see a screen similar to the image below:
β‘
How to Test your models and applications with PytestThe pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries.
β‘
Working with DockerDocker is a set of platform as a service products that use OS-level virtualization to deliver software in packages called containers. The service has both free and premium tiers.
In this repository I've deployed the FastAPI application using a Dockerfile. You can learn more about working with Docker and writing Dockerfiles here
β‘
Deploying your applications to AWS and HerokuIn this repository I've deployed the FastAPI and Flask applications to platforms such as AWS and Heroku. I'll be using the fastapi folder as an example of deploying applications to both AWS and Heroku.
β‘
Deploy to HerokuTo deploy the FastAPI application to Heroku run the following commands:
- Install the heroku cli
npm install -g heroku
- Login to Heroku
heroku login --interactive
- Change the working directory
cd fastapi
- Run this command so as to work with just the fastapi folder
git init
git add .
git commit -m "first commit"
- Create the heroku app
heroku create your-app-name
Replace your-app-name with the name of your choosing.
- Set the heroku cli git remote to that app
heroku git:remote your-app-name
- Set the heroku stack setting to container
heroku stack:set container
- Push to heroku
git push heroku master
And you should be able to view your deployed application by following the link e.g https://your-app-name.herokuapp.com
You can also view logs for your deployed application by running:
heroku logs -t -a your-app-name
β‘
Deploy to AWSYou can also deploy your application using an AWS EC2 instance(Ubuntu) by following the steps below. This is also assuming you have launched your instance, exposed the required ports and installed git in your instance. If you don't know how to do that you can check out this repository for more details.
Run the following commands in your AWS EC2 instance:
git clone https://github.com/Nneji123/Serving-Machine-Learning-Models.git
cd Serving-Machine-Learning-Models/fastapi
./fastapi-setup.sh
After running the commands above you can view your deployed application by going to the Public IP address location of your AWS instance. E.g if your public ip address is 3.91.202.12 visit http://3.91.202.12:80/docs to view your deployed API documentation.
β‘
Github ActionsGitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. Make code reviews, branch management, and issue triaging work the way you want.
β‘
Using Github Actions and Heroku for CI/CDIn this repository I've used Github actions to continuously deploy the Flask and FastAPI applications to Heroku i.e whenever I make a push or pull action in this repository the Github action will run and deploy new versions of those applications to Heroku. The 'action' files are stored in this folder
You can read more about using Github actions to automate your workflow here
Bump numpy from 1.19.5 to 1.24.0
Bumps numpy from 1.19.5 to 1.24.0.
Release notes
Sourced from numpy's releases.
... (truncated)
Commits
8cec820
Merge pull request #22813 from charris/prepare-1.24.0-release8d33e68
REL: Prepare for the NumPy 1.24.0 release.5ac09da
Merge pull request #22815 from charris/backport-22814df2d26f
BLD: use newer version of delocatee18104e
Merge pull request #22805 from charris/backport-228046d44424
REV: revert change tonumpyconfig.h
for sizeof(type) hardcoding on macOSc484593
Merge pull request #22795 from charris/backport-227910904c01
Change argument to npy_floatstatus_..._barrier() functions to ensure it34653f9
Merge pull request #22793 from charris/backport-2278921f7096
BUG: Fix infinite recursion in longdouble/large integer scalar opsDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump bentoml from 1.0.0a4 to 1.0.11
Bumps bentoml from 1.0.0a4 to 1.0.11.
Release notes
Sourced from bentoml's releases.
... (truncated)
Commits
cc38007
chore: provides shim for bentoctl (#3322)9ad5984
feat: client lazy load (#3323)c662b2f
fix: remove assertion for dtype (#3320)687c3e0
feat: parsing path for env (#3314)9a3159f
doc(monitoring): monitoring guide (#3300)210071a
fix(monitor): disable validate for Formatter (#3317)d4bb5cb
chore(pyproject): bumping python version typeshed to 3.11 (#3281)c91f83f
chore(deps): bump pytest-xdist[psutil] from 3.0.2 to 3.1.0 in /requirements (...39f9547
chore(deps): bump pylint from 2.15.7 to 2.15.8 in /requirements (#3308)a697deb
docs: wrong arguments when saving (#3306)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump numpy from 1.19.5 to 1.23.5
Bumps numpy from 1.19.5 to 1.23.5.
Release notes
Sourced from numpy's releases.
... (truncated)
Commits
de82cd9
Merge pull request #22626 from charris/prepare-1.23.5-release9c7ac34
REL: Prepare for the NumPy 1.23.5 Release.2c4cf9a
Merge pull request #22625 from charris/backport-22561dcd9404
BUG: Histogramdd breaks on big arrays in Windows (#22561)bb5e3a6
Merge pull request #22597 from charris/backport-225570d3d500
Merge pull request #22596 from charris/backport-2250338fe21f
Merge pull request #22595 from charris/backport-2245245329c1
Merge pull request #22593 from charris/backport-224473ca02ce
Merge pull request #22594 from charris/backport-224508cededd
Merge pull request #22592 from charris/backport-22393Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump bentoml from 1.0.0a4 to 1.0.10
Bumps bentoml from 1.0.0a4 to 1.0.10.
Release notes
Sourced from bentoml's releases.
... (truncated)
Commits
248979b
fix: from_sample override logic (#3202)39faf23
feat:from_sample
for IO descriptor (#3143)bd092f2
perf: refine onnx implementation (#3166)22bd3f8
fix(runner): set uvicorn keep-alive (#3198)2750460
chore: cleanup deadcode (#3196)10a1101
docs: cleanup whitespace and typo (#3195)566220e
feat: tensorflow multi outputs support (#3115)e1572cb
fix: don't ignore logging conf (#3192)364f9e5
fix(ssl): provide default values in configuration (#3191)a52a201
refactor(sdk): separate default monitoring impl(#3189)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump bentoml from 1.0.0a4 to 1.0.8
Bumps bentoml from 1.0.0a4 to 1.0.8.
Release notes
Sourced from bentoml's releases.
... (truncated)
Commits
8365375
qa: remove framework-requirements from dev-requirements.txt for now (#3168)5de6888
qa: retry env to be NoneType (#3167)92461d7
fix: pandas openAPI handle nulltype (#3165)541b533
fix(remote runner): disable retries by default (#3155)607cca2
style: type checking hack (#3162)871ca1f
revert: remove invalid options in quickstart (#3161)25c4b12
fix(prometheus): ensure metrics are lazily loaded (#3089)d564519
fix: framework ci (#3157)4220b51
fix: async bento client methods (#3152)78d3e00
docs: Update advanced guides format (#3154)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump scikit-learn from 1.1.1 to 1.1.3
Bumps scikit-learn from 1.1.1 to 1.1.3.
Release notes
Sourced from scikit-learn's releases.
Commits
ffc0f66
[cd build] trigger CD buildsf3f51f9
DOC add more info about the drop of support for 32-bit Python on Windows (#2...6ea9e2c
MAINT remove entry linked to 1.2 [cd build]016ec74
TST Relaxtest_gradient_boosting_early_stopping
(#24541)31c226e
CI Remove Windows 32 bit support (#24627)822622c
CI Remove remaining windows 32 references (#24657)7bc5a14
MAINT bumpversion 1.1.3 [cd build]9aa3054
DOC update index showing new releasedf102af
DOC add entries for the 1.1.3 release (#24744)7e6e82b
MAINT force NumPy version for building scikit-learn for CPython 3.10 in Windo...Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump numpy from 1.19.5 to 1.23.4
Bumps numpy from 1.19.5 to 1.23.4.
Release notes
Sourced from numpy's releases.
... (truncated)
Commits
f802155
Merge pull request #22425 from charris/prepare-1.23.4-release_1298174b
REL: Prepare for the NumPy 1.23.4 release (1)631072f
Merge pull request #22424 from charris/backport-22418f4a3195
TST, BLD: Fix failing aarch64 wheel builds.1cbd127
Merge pull request #22413 from charris/prepare-for-1.23.48cfc899
REL: Prepare for the NumPy 1.23.4 release.22a41b5
Merge pull request #22392 from charris/backport-22296f6a3c11
Adding missing Py_DECREF call on iter8274a16
Merge pull request #22391 from charris/backport-22372fa16a0c
Merge pull request #22390 from charris/backport-22360Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump bentoml from 1.0.0a4 to 1.0.7
Bumps bentoml from 1.0.0a4 to 1.0.7.
Release notes
Sourced from bentoml's releases.
... (truncated)
Commits
47e884f
fix(import): namespace collision (#3058)6cbf724
chore(lint): remove unused import (#3051)cdcb509
fix(config): respectapi_server.workers
(#3049)926b613
feat: support multipart upload for large bento and model (#3044)8ccf0a2
test(grpc): e2e + unit tests (#2984)b3bd5a7
qa: cleanup MLflow (#2945)c8e5587
configuration: migrate schema toapi_server
(#3046)76ade96
feat: gRPC tracking (#3015)ce99e45
dependencies: ignore broken pypi combination (#3043)40c9cd0
qa: ignore tools from distribution (#3045)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump bentoml from 1.0.0a4 to 1.0.6
Bumps bentoml from 1.0.0a4 to 1.0.6.
Release notes
Sourced from bentoml's releases.
... (truncated)
Commits
b3bd5a7
qa: cleanup MLflow (#2945)c8e5587
configuration: migrate schema toapi_server
(#3046)76ade96
feat: gRPC tracking (#3015)ce99e45
dependencies: ignore broken pypi combination (#3043)40c9cd0
qa: ignore tools from distribution (#3045)89fc521
qa(bentos): update latest options (#3042)d189df7
fix(configuration): should validate config early (#3041)7bf352b
chore: update links (#3040)a666072
feat(configuration): override options with envvar (#3018)9653402
docs: gRPC advanced guides (#3034)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump numpy from 1.19.5 to 1.23.3
Bumps numpy from 1.19.5 to 1.23.3.
Release notes
Sourced from numpy's releases.
... (truncated)
Commits
e47cbb6
Merge pull request #22234 from charris/prepare-1.23.3-releasee0e8991
REL: Prepare for the NumPy 1.23.3 release.9bf22bb
BUG: Better report integer division overflow (backport) (#22230)0f0d355
Merge pull request #22224 from charris/backport-2192855a5ca7
Merge pull request #22223 from charris/backport-219816cc4183
BUG: Fix the implementation of numpy.array_api.vecdot (#21928)fb9666f
BUG: Replace assert with correct errorfc0d627
TST: ensurenp.equal.reduce
raises aTypeError
754ec89
Merge pull request #22222 from charris/backport-2221263ab75d
Merge pull request #22221 from charris/backport-22204Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump pydantic from 1.9.1 to 1.10.2
Bumps pydantic from 1.9.1 to 1.10.2.
Release notes
Sourced from pydantic's releases.
... (truncated)
Changelog
Sourced from pydantic's changelog.
... (truncated)
Commits
bc74342
prepare for v1.10.2f1e9883
fix: dataclass wrapper was not always called (#4484)91bb8d4
Basic fix of GenericModel cache to detect order of args in Union models [#447...eccd85e
prevent long strings as int inputs (#4480)a4367c1
Revert percent encoding in URLs. (#4470)02cf7f5
fix mypy withdefault_factory=list
etc. (#4471)5a2ddec
Use tomllib on Python 3.11 (#4476)317bef3
build(deps): bump black from 22.6.0 to 22.8.0 (#4465)2add8a9
build(deps): bump hypothesis from 6.54.3 to 6.54.4 (#4464)f1fb4f2
build(deps): bump mkdocs-material from 8.4.0 to 8.4.2 (#4463)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump pydantic from 1.9.1 to 1.10.3
Bumps pydantic from 1.9.1 to 1.10.3.
Release notes
Sourced from pydantic's releases.
... (truncated)
Changelog
Sourced from pydantic's changelog.
... (truncated)
Commits
0a9e000
prepare for v1.10.3, fix #4552bf4b5ce
fix: use dataclasses proxy for frozen or empty dataclasses (#4878)a220f87
fix: Parsing of custom root models (#4883) (#4884)a825106
fix: avoid multiple calls of__post_init__
when dataclasses are inherited (...c04923c
fix: support assignment on DataclassProxy (#4880)18a91e3
Fixed datetime format specifier in docs (#4876) (#4879)1a1497e
fix history links (#4866)4f13260
Reduce binary sizes (#4862)dc33b47
fixed documentation typo (#4855) (#4858)6a27124
Replace deprecatedget_event_loop
withasyncio.run
(#4859) (#4860)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump numpy from 1.19.5 to 1.24.1
Bumps numpy from 1.19.5 to 1.24.1.
Release notes
Sourced from numpy's releases.
... (truncated)
Commits
a28f4f2
Merge pull request #22888 from charris/prepare-1.24.1-releasef8fea39
REL: Prepare for the NumPY 1.24.1 release.6f491e0
Merge pull request #22887 from charris/backport-2287248f5fe4
BUG: Use whole file for encoding checks withcharset_normalizer
[f2py] (#22...0f3484a
Merge pull request #22883 from charris/backport-22882002c60d
Merge pull request #22884 from charris/backport-2287838ef9ce
BUG: Fix integer overflow in in1d for mixed integer dtypes #22877 (#22878)bb00c68
MAINT: restore npymath implementations needed for freebsd64e09c3
Merge pull request #22875 from charris/backport-22869dc7bac6
TST: Ignore nan-warnings in randomized out testsDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump bentoml from 1.0.0a4 to 1.0.12
Bumps bentoml from 1.0.0a4 to 1.0.12.
Release notes
Sourced from bentoml's releases.
... (truncated)
Commits
b6a4158
fix: io descriptor backward compatibility (#3327)a2a4c5e
fix(container): podman health result string parsing (#3330)b9b86fd
fix: add upper bound for packaging version (#3331)2f5e247
fix: don't overwrite user base image (#3329)e498178
fix(runner): remote run_method with kwargs (#3326)7a8ee5f
docs: Update monitoring docs format (#3324)970c5b2
feat(grpc): adding service metadata (#3278)eb3df53
feat: grpc servicer implementation per version (#3316)4fdc981
fix(runner): content-type error (#3302)cc38007
chore: provides shim for bentoctl (#3322)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump scikit-learn from 1.1.1 to 1.2.0
Bumps scikit-learn from 1.1.1 to 1.2.0.
Release notes
Sourced from scikit-learn's releases.
Commits
dc580a8
Release 1.2.0 [cd build] (#25121)c7d5f58
Release 1.2.0rc1 [cd build] (#25045)c1cfc4d
ENH Extend PDP for nominal categorical features (#18298)7d1c318
DOC Update "Parallelism, resource management, and configuration" section (#24...df14322
ENH Add interaction constraint shortcuts to HistGradientBoosting* (#24849)f76ea1b
DOC Add more details regarding the improved efficiency in 1.1 and 1.2 (#25043)2459331
Fixes broken link for yu-shi MSC (#25040)f196344
ENH Improves error message for mixed types for feature names (#25018)1912ae5
DOC add displays in highlights (#25042)40d7d88
FEA add PredictionErrorDisplay (#18020)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)Bump kivymd from 0.104.2 to 1.1.1
Bumps kivymd from 0.104.2 to 1.1.1.
Commits
fd5f598
KivyMD 1.1.1ae3fee1
KivyMD 1.2.0.dev0539acaa
KivyMD 1.1.0f49f29b
Edit doc stringa1b8d7b
Edit doc string69d2c4d
Edit doc string8a015ce
Edit doc string2134f3a
Edit doc string635bd7a
Edit doc stringac33f3c
Edit doc stringDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)