| --- |
| title: IrisModel |
| emoji: 🏢 |
| colorFrom: blue |
| colorTo: indigo |
| sdk: docker |
| pinned: false |
| license: mit |
| --- |
| |
| Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference |
|
|
| # packaging-ml-model |
| Learn how to package a machine learning model into a container |
|
|
|
|
|
|
| # Steps to use the repository |
|
|
| 1. Clone the repository |
| 2. Create a virtual environment ( to isolate the dependencies ) |
| 3. Install the requirements with the following command: |
|
|
| ``` |
| |
| pip install -r requirements.txt |
| ``` |
|
|
| # Build the model file |
| 1. Execute the following command to build the model |
|
|
| ``` |
| python model.py |
| |
| ``` |
|
|
| - This will build the model and serialize it into a file called |
| as model.joblib, this is what we'll load into memory when we |
| build our inference API via fastAPI |
|
|
| # Build a fastAPI based app |
|
|
| - The source code for this is available in the app.py file |
| - You can check whether it's working by executing the following |
| command: |
| |
| ``` |
| uvicorn main:app --reload |
| |
| ``` |
|
|
| # Generate a Docker file |
|
|
| Generate Dockerfile in the same directory as the app and add the |
| following contents to it: |
|
|
| ``` |
| |
| # Use Python base image |
| FROM python:3.9-slim |
| |
| # Set working directory in the container |
| WORKDIR /app |
| |
| # Copy requirements.txt to container |
| COPY requirements.txt . |
| |
| # Install dependencies |
| RUN pip install --no-cache-dir -r requirements.txt |
| |
| # Copy the FastAPI app files to the container |
| COPY app /app |
| |
| # Expose port 80 for FastAPI app |
| EXPOSE 80 |
| |
| # Command to start the FastAPI app |
| CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] |
| |
| ``` |
|
|
| # Build the Docker Image from the instructions given in the Dockerfile |
|
|
| ``` |
| docker build -t packaged-model-001 . |
| ``` |
|
|
| # Build the container out of the image |
| ``` |
| docker run -p 8000:80 packaged-model-001 |
| ``` |
|
|
|
|
| # Verify whether the container is running |
|
|
| - Use postman to call the post end-point available at localhost:8000/predict |
|
|
| ``` |
| |
| { |
| "sepal_length": 2, |
| "sepal_width": 3.0, |
| "petal_length": 4.0, |
| "petal_width": 1.5 |
| } |
| |
| ``` |
|
|
|
|
| # push the image to docker registry |
|
|
| 1. Login to Docker |
|
|
| ``` |
| |
| docker login |
| |
| ``` |
|
|
| - The above command should show text like the following: |
|
|
| ``` |
| Log in with your Docker ID or email address to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one. |
| You can log in with your password or a Personal Access Token (PAT). Using a limited-scope PAT grants better security and is required for organizations using SSO. Learn more at https://docs.docker.com/go/access-tokens/ |
| |
| Username: |
| ``` |
|
|
| - Use the PAT as the password |
| ** Note: You can also use your password but the use of PAT with minimal access is recommended. |
|
|
|
|
| # Create a repository on DockerHub |
|
|
| ``` |
| 1. Go to Dockerhub ( search on Google ) |
| |
| 2. Create an Account if not already existing |
| |
| 3. Create a new Repository |
| |
| ``` |
|
|
|
|
| # Tag your local image |
|
|
| ``` |
| |
| docker tag packaged-model-001:latest riio/packaged-model-001:latest |
| |
| ``` |
|
|
|
|
| ## Push the image to DockerHub |
|
|
| ``` |
| docker push riio/packaged-model-001:latest |
| ``` |
|
|
|
|
| ## Sample Output: |
|
|
| ``` |
| |
| (venv) username@machine packaging-ml-model % docker push riio/packaged-model-001:latest |
| The push refers to repository [docker.io/riio/packaged-model-001] |
| fd749012a9d2: Pushed |
| 963141bae3f4: Pushing 253.5MB |
| 4f83a3ffc58c: Pushed |
| 7b34bc82ecfd: Pushed |
| b958f60e4e67: Pushed |
| f02ce41627b1: Pushed |
| eeac00a5e55e: Pushed |
| 34e7752745be: Pushed |
| 8560597d922c: Pushing 100.2MB |
| ``` |
|
|
|
|
| ## Congratulations. |
|
|
| - You just packaged your machine learning model and made it available to the world with the power of containers. |
|
|
| ## How anybody can use your packaged model? |
|
|
| It's simple |
|
|
| ``` |
| docker pull riio/packaged-model-001:latest |
| |
| ``` |
|
|
|
|
| ## How to run the container ? |
|
|
| ``` |
| |
| docker run -p 8000:80 riio/packaged-model-001:latest |
| ``` |
|
|
|
|
|
|
| # Link to access the Container: |
|
|
|
|
| - https://model-deployment-005.purplecliff-0cc0d310.centralindia.azurecontainerapps.io/predict |