SageMaker and AzureML are powerful platforms for machine learning. Understanding how to use them requires significant investment, together with a willingness to adopt their workflows, APIs and tools. Bodywork is focused only on machine learning deployment. It is easy to configure and imposes no constraints on how models, services and workflows can be engineered. Using Bodywork for deployment allows you to retain the freedom to use any component you choose to integrate into your MLOps stack. You also retain the freedom to deploy to any cloud platform and can even test entire deployments locally - something that is not currently possible with SageMaker or AzureML.
Kubeflow is a collection of cloud native technologies for machine learning, that have been loosely coupled together into a platform for machine learning on Kubernetes. The learning curve is steep, as it requires an understanding of how to use and adopt each component to meet your requirements. It assumes basic knowledge of Kubernetes and users are also responsible for building and maintaining the Docker images that define Kubeflow pipelines. By contrast, Bodywork does not require machine learning engineers to build and maintain Docker images or become comfortable with Kubernetes manifests. Instead, Bodywork will pull your codebase into pre-built containers and deploy workflows based on a single file of project-level configuration. You retain full-flexibility in how pipelines and services can be engineered, fitting Bodywork around your codebase for deployment.
No. One of Bodywork’s objectives is to bridge the gap between machine learning code and machine learning deployments. Having some understanding of Kubernetes is useful, but it isn’t necessary.
Yes. You are free to create custom Docker images, with any custom dependencies that you may require for executing your pipelines. Upload your custom image to Docker Hub and then reference it in your Bodywork configuration file.
Yes. As of Bodywork version 2.0.0, parameters can be passed as arguments to the Python module executed by each stage.