Hi, I'm Lak, and I lead the team that's putting together this course and this specialization. In this module, we will look at building hybrid machine learning models. You will learn how to build hybrid machine learning models and how to optimize TensorFlow graphs for mobile. Let's start by discussing a technology called Kubeflow, which helps us build hybrid cloud machine learning models. But why are we discussing hybrid in the first place? Why would you need anything other than Google Cloud? Google Cloud is a great place to do machine learning. You have access to ready-made models like the Vision API, Natural Language API, etc. The key aspect of these models is that they're trained on Google's massive datasets. Sometimes though, ready to run models like the Vision API don't quite fit. In that case, you might want to train a family of models using your own images and your own labels to customize and add to the Vision API. That is called AutoML, and that is possible only on the Cloud. But even if you're building custom machine-learning models, you have reason to do machine learning on gcp. While TensorFlow is open source, a serverless execution environment like Cloud ML Engine allows your data scientist do not have to worry about infrastructure, plus of course, the integration with distributed Cloud storage and serverless and BigQuery make the overall development experience a lot better than if you had to provision and manage all that infrastructure yourself. So far in this series of courses, we have assumed that you're in a cloud native environment, and so we prototyped and developed our code using Cloud Datalab and then once we had the code working on a small sample of data, we submitted the training job to Cloud ML Engine to operate on the full dataset. We also served out the model using Cloud ML Engine so that we didn't have to worry about infrastructure. There are times, however, when you cannot be fully Cloud Native. What kinds of situations? You may not be able to do machine learning solely on the Cloud. Perhaps you are tied to on-premises infrastructure, and your ultimate goal is to move to the public Cloud, but it's going to take a few years. Perhaps there are constraints about being able to move your training data off your on-premise cluster or datacenter. So you have to make do with a system that you have. Or maybe the data that is being produced is produced by a system that is running on a different Cloud, or the model predictions need to be consumed by an application on some other Cloud. You need a multi-cloud solution, not a solution that is solely GCP. Or maybe you are running machine-learning on the edge, and connectivity constraints force you to have to do your predictions on the edge, on the device itself. You have to do inference on the edge. This is a very common situation if you're doing Internet of Things. Here, for example, is Cisco's hybrid Cloud architecture. Cisco partnered with Google Cloud to bridge their private Cloud infrastructure and their existing applications with Google Cloud platform. Notice the use of Google Kubernetes Engine to manage your container deployments. Kubernetes is a container orchestration system that was designed and then open sourced by Google. Why Kubernetes? Using Kubernetes, it is possible to orchestrate containers, whether they are running on-prem or on the Cloud, any Cloud. One possible solution to retain the ability to move fast, minimize your infrastructure management needs, and still retain the ability to move or burst to GCP, is to use Kubernetes. Specifically, a project called Kubeflow helps you migrate between Cloud and on-prem environments. Kubeflow is an open source machine learning stack built on Kubernetes. On Google Cloud, you can run Kubeflow on Google Kubernetes Engine, GKE. However, you can run Kubeflow on anything from a phone to a laptop to an on-prem cluster, your code remains the same. Some of the configuration settings change, but that's it.