
Master designing, integrating and deploying enterprise AI apps by breaking down complex problems into scalable, component-based solutions. Use Python as the primary language to build architectures for edge deployment.
Refine high level requirements for a real-time edge classification app that streams sensor data to devices like Raspberry Pi or Jetson Nano and outputs class probabilities.
Design a resilient microservices architecture that uses a message bus for loose coupling, applies the single responsibility principle, and uses flag buffers to future-proof AI apps.
Explore the difference between io bound and cpu bound tasks and distinguish concurrency from parallelism, illustrating how cpus, cores, and scheduling shape asynchronous io in enterprise ai apps.
Explore building concurrent applications with threads, using event loops, queues, and call stacks. Compare sequential and thread-based execution, and note overhead and the shift to event-driven approaches.
Master concurrency using event loops and async programming in Python, scheduling tasks on the call stack while other tasks wait for IO, using create_task to manage concurrent execution.
Explore NATS, a high-performance cloud-native open-source message bus that enables publish-subscribe with subject-based routing, distributed clustering, and authentication and authorization for secure, language-agnostic apps.
Learn how to download and run the nats-server from the open source project, using prebuilt binaries across Linux, Mac, and Windows, with optional port changes, tracing, authentication, TLS, and clustering.
Develop two simple apps that communicate via NATS, with a publisher and a subscriber, evolving through three versions that cover APIs, object-oriented programming, and state management.
Publishers and subscribers in version one use an async io loop and the next client library to connect to a net server, subscribe to topic one, and handle messages.
Explore version two of the publisher and subscriber using NATS and object-oriented patterns, introducing a dedicated publisher class with connect and start methods, and subscriber callbacks as class methods.
Explains version 3 of the publisher using NATS and threads to publish messages every second, with a data receiver and a publisher object, guided by the single responsibility principle.
Cluster two net servers to connect publisher and subscriber across machines, validate with ping pong, and route messages only to active subscribers.
Discover FlatBuffers, a Google binary data format for high-performance apps, offering compact, memory-efficient serialization with in-place deserialization and optional field support across languages.
Install flag before compiler and libraries for Windows, macOS, and Linux. Generate language stubs from a schema to enable Python, C++, C#, and JavaScript interoperability.
Explore the essentials of schema syntax and usage in Python, with a multi-part, step-by-step approach that updates your code as features are added or removed.
Explore primitives, strings, and tables in the flag before schema language, and learn Python serialization of robot objects using a builder and offsets.
Model robot power levels with enums in a byte-backed primitive type, defining three states: starter, decent, and top notch. Add the power level property and serialize strongly typed data.
Embed a custom object in a table by introducing a manufacturer table, importing its type, and building robot objects via a builder with manufacturer data and location for serialization.
Learn to design multi-file schemas by splitting robot and person tables into separate files, using include to resolve cross-file references, and updating compiler flags.
Explore serializing a vector of custom objects by embedding a robots vector inside a person object, including markers, offsets, and builder patterns with a Python sample walkthrough.
Build and deploy an enterprise ai app pipeline that classifies human activities from sensor data using three apps (stream, classifier, decided), a test data file, and a shared flat protocol.
Design and serialize flatbuffer messages for enterprise ai apps in python, including a classification request with a unique id and base64 sensor data, flattening 2d data for transmission.
Explore the streamer app's publisher, sensor data handling, and endless loop that shuffles test data and sends serialized examples through an event loop.
Learn to build a classifier app that uses the Janus thread-safe async queue to pass classification requests between main and async threads, with NATS messaging and top predictions.
Subscribe to the decision maker and evaluate classifier predictions against a 0.9 threshold to trigger an action when the highest prediction meets the threshold; otherwise, report inability to decide.
Run the full four-part AI pipeline locally and on an edge device by launching the streamer, classifier, and decider in a clustered mode with a virtual environment.
Docker uses Linux namespaces and cgroups to isolate apps in containers, built from images and managed by a lightweight container engine with registry support.
Pull and run simple docker images from the public registry, explore ubuntu and python images, run containers interactively, and manage images and containers with list and remove commands.
Create a custom Docker image by writing a Dockerfile with a base image and tags, set environment variables, define a working directory, copy requirements, and expose ports. Build and run the image with Docker build and Docker run, using caching and tagging to manage versions.
Write dockerfiles for the streamer, classifier, and decider, using python 3.8 buster as the base, install requirements, set environment variables, and push images to a Docker registry.
Run and connect docker containers for NATS, streamer, classifier, and decider by mapping host ports to container ports, enabling inter-container communication and exploring dockerized workflows.
Learn how Docker Compose orchestrates multi-container apps with a YAML file that defines services, images, ports, and dependencies, then use up and down to run and clean up.
Target Audience
Machine Learning Engineers & Data Scientists
What is unique about this course & What will you learn?
Why What & How of designing, integrating & deploying Enterprise Level Data Science/AI/ML applications
How to translate requirements into scalable architectural components?
How to break a big complex problem into simple & manageable parts using microservices style architecture?
An End-to-End real-world enterprise-level machine learning solution
Asynchronous IO - Foundations & Writing I/O bound applications in python 3
NATS - A Cloud Native Computing Foundation open source project to connect distributed applications
FlatBuffers - A language-independent, compact and fast binary structured data representation language
Docker & Docker-compose - The gold standard in deploying and orchestrating applications
Why should you learn all this?
A statistical or deep learning model is not an application rather it is an important component of a solution to real-world problems. A sophisticated solution to a complex problem generally consists of multiple applications written using different languages and running on a cluster of machines.
Your role as a Data Scientist and Machine Learning engineer is not just limited to a model building or tuning its performance rather it is expected that at the very minimum you will design your applications so that they can easily integrate with other applications of a big solution as well as are easily deployable using modern DevOps methodologies.
Mastering how to make AI applications integrate with other applications while ensuring scalability and upgradability will offer you a competitive advantage over others.
The good news is that mastering them is not difficult at all!
How is this course taught?
My teaching style covers 3 key aspects of mastering any technology:
Intuition
Theory
Code
For any solution first I describe the overall goal, its associated challenges, and how to break down a big complex problem into manageable components. This process of simplifying the problems into components will guide you in identifying & selecting the best technology to use. I then explain the why, what & how of the selected technologies (AsyncIO, NATS, Flatbuffers, Docker) with code examples. These code examples start simple and I then iteratively add features to bring them to the level of real-world applications.
I have taken immense care in preparing the material that has great animations to help you develop intuition behind the solutions.
I have made sure that coding sessions follow an iterative development style and more importantly are clear & delightful.
All the source code from the iterative cycles as well as full end to end solution has been provided in the resources.