{"id":2411,"date":"2020-01-10T12:14:49","date_gmt":"2020-01-10T11:14:49","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/uncategorized\/machine-learning-as-a-service-serving-reusable-ml-models\/"},"modified":"2021-12-23T12:59:19","modified_gmt":"2021-12-23T11:59:19","slug":"machine-learning-as-a-service-serving-reusable-ml-models","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/","title":{"rendered":"Machine learning as a service \u2013 serving reusable ML models"},"content":{"rendered":"\n<p><span id=\"urn:enhancement-4c8f4ae0\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/artificial_intelligence\">Artificial intelligence<\/span> and <span id=\"urn:enhancement-639fca75\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/machine_learning\">machine learning<\/span> are huge topics at the moment. So, when I saw the title of this talk at <strong>Codemotion Amsterdam 2019<\/strong> I was intrigued. The talk was given by three <span id=\"urn:enhancement-e63cffb4\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_developer\">developers<\/span> from ING, who build components for the rest of the business. Read on to find out how they managed to create a solution that can efficiently serve ML models across multiple teams.<\/p>\n\n\n\n<div class=\"wp-block-image image regular\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/229528_fullimage_cnt-codemotion2019_9423b9821774bec92f0fe9bd6257bcf1_800.jpg\" alt=\"\"\/><figcaption>ING <span id=\"urn:enhancement-5df547e1\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_developer\">developers<\/span> Effi Bennekers, Pierre Venter and Marcin Pakulnicki<\/figcaption><\/figure><\/div>\n\n\n\n<p>Effi Bennekers, Pierre Venter and Marcin Pakulnicki work as <span id=\"urn:enhancement-739e1401\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_developer\">developers<\/span> in ING\u2019s Omnichannel and DevOps teams, providing tools and services for other teams to use. Many teams at ING now use <span id=\"urn:enhancement-4ebf50f6\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/machine_learning\">machine learning<\/span> (ML) models. But generally, the teams have worked in isolation from each other. Each team researches ML, locates a suitable model from an external source, trains it with their data and then uses it. But this is a bad idea because teams keep reinventing the wheel. So the challenge was to create a system that allowed teams to share their trained models.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"59dgt\">Autonomy equals anarchy?<\/h2>\n\n\n\n<p>At ING, development teams have a lot of autonomy. This means they are free to choose what technology to use and to find their own solutions to problems. Over recent years, a trend has developed. Teams identify a problem that can be solved by <span id=\"urn:enhancement-3d62282\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/machine_learning\">machine learning<\/span>. They do some research and choose a well-known ML library. They then source their own data and train a model. This model is then pushed to their repo and packaged into the source code.<\/p>\n\n\n\n<p>So, what\u2019s the problem, you might ask? Well firstly, ING teams have high churn. So, the next time the team sees an identical problem they go through the whole process again from scratch. Secondly, because models are being baked into production code, they can\u2019t be updated when the data changes. Thirdly, there is little or no knowledge transfer between teams. This leads to wasted effort. Finally, all too often the models end up getting lost and have to be recreated from scratch.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"8m908\">Scaling is sensible<\/h2>\n\n\n\n<p>The solution was to build a system that can serve multiple models from a central repository. These models can be version-controlled and can be reused by multiple teams. The models should be accessible via <span id=\"urn:enhancement-5b2e3214\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_programming_interface\">APIs<\/span> as shown below.<\/p>\n\n\n\n<div class=\"wp-block-image image regular\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/1_925f3099cff0cdf1d3247a50438ead7c_800.png\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ac9r0\">Automatic classification of feedback<\/h2>\n\n\n\n<p>As an illustration, the speakers showed how to improve the <span id=\"urn:enhancement-f1c56c6e\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/process_computing\">process<\/span> for <span id=\"urn:enhancement-7c4143a4\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statistical_classification\">classifying<\/span> user feedback. This user feedback comes from multiple sources such as reviews, Twitter, direct communications, etc. It needs to be properly categorised so that the appropriate team can action it. The old-fashioned approach involved employing people to <span id=\"urn:enhancement-21493d99\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statistical_classification\">classify<\/span> all the feedback. Feedback was captured in a spreadsheet and then manually assigned to one of 52 very specific categories. Needless to say, that <span id=\"urn:enhancement-b832b30b\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/process_computing\">process<\/span> was not very quick and gave rise to an internal saying \u201cBanking in the rearview mirror\u201d.<\/p>\n\n\n\n<p>The aim was to create a system that was able to <span id=\"urn:enhancement-8c856f6c\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statistical_classification\">classify<\/span> the feedback much faster. In turn, this would allow the relevant team to identify the problem and code a new feature for production. The solution was clearly to develop a <span id=\"urn:enhancement-eb03c8b9\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/machine_learning\">machine learning<\/span> system that can do this <span id=\"urn:enhancement-79f1fc77\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statistical_classification\">classification<\/span> automatically. But this service has to be available to every team across the company. So, they came up with \u201cThe Voice\u201d. This is a web <span id=\"urn:enhancement-70f06ac8\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> that can be used to <span id=\"urn:enhancement-fe16cc36\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statistical_classification\">classify<\/span> any feedback by clustering and labelling it.<\/p>\n\n\n\n<p>The Voice is effectively <span id=\"urn:enhancement-e8434951\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statistical_classification\">classifying<\/span> user feedback using ML as a service. It receives input from users of the <span id=\"urn:enhancement-ecd03c28\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span>. It then performs an ML\/rules-based analysis. Then the feedback is immediately passed to the responsible team.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"46unr\">Data labelling and model training<\/h2>\n\n\n\n<p>As with all categorisation problems in ML, there are two distinct stages. Firstly, you need to label the data. Then you need to <span id=\"urn:enhancement-7ad889af\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statistical_classification\">classify<\/span> it.<\/p>\n\n\n\n<div class=\"wp-block-image image regular\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/2_996066191c983a5535409d6a53751b1e_800.png\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<p>The team knew they had unlabelled data to start with, but because they knew the number of categories they could easily use <strong>KMeans clustering<\/strong> to label the data. Having labelled the data, they could then <span id=\"urn:enhancement-ea50fec7\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statistical_classification\">classify<\/span> it. Because of the relatively low sample count they used the <strong>SDG <span id=\"urn:enhancement-190135bc\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statistical_classification\">classifier<\/span><\/strong>. They then demonstrated how they can use this model for live feedback.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ev633\">Containerising ML models<\/h2>\n\n\n\n<p>The next challenge is how to package a model like this so that it can be served via a suitable platform. Importantly, the actual training of the model is out of scope. The answer is to use <u><a href=\"https:\/\/www.docker.com\/\">Docker<\/a><\/u> to containerise the models. They also needed to be able to serve multiple versions of the same model (e.g. for A\/B testing). This needed them to use GRPC for routing. The initial <span id=\"urn:enhancement-11980154\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_versioning\">version<\/span> of the architecture used a combination of <span id=\"urn:enhancement-9d39c869\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/docker_software\">Docker<\/span>, <u><a href=\"https:\/\/zookeeper.apache.org\/\">zookeeper<\/a><\/u>, <u><a href=\"https:\/\/kafka.apache.org\/\">Kafka<\/a><\/u> and a custom-built ML platform <span id=\"urn:enhancement-9f03b4e3\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span>.<\/p>\n\n\n\n<p>The initial architecture worked well. But because ING is a bank there are regulatory compliance issues that need to be addressed. They also had to be able to scale and prevent this system from being a single source of failure. The solution to that was to containerise the whole system, packaging just the relevant models into each container. The resulting architecture is shown below.<\/p>\n\n\n\n<div class=\"wp-block-image image regular\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/3_2994f198e5171491108bb52b1d5790b0_800.png\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<p>The final set of challenges were around how to make the system handle data frames (the data abstraction used by most ML libraries) and how to streamline the build\/release platform. The resulting solution uses <u><a href=\"https:\/\/docs.gitlab.com\/runner\/\">GitLab Runner<\/a><\/u> to coordinate things. The resulting pipeline has three phases:<\/p>\n\n\n\n<div class=\"wp-block-image image regular\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/4_cd595281e2be6b5075694fe03febb2f9_800.png\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"f5ki9\">Conclusions<\/h2>\n\n\n\n<p>Building a system that is capable of serving ML models in a scalable manner is hard. Doing so in a tightly regulated industry like banking is even harder. But the benefits are clear. The end result is a system that can serve multiple ML models and <span id=\"urn:enhancement-6ec09963\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_versioning\">versions<\/span> scalably, securely and efficiently. By containerising the models within a parent container, the team created a system that is robust, easy to <span id=\"urn:enhancement-6c55694a\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_deployment\">deploy<\/span> and doesn\u2019t suffer from the curse of centralisation.<\/p>\n\n\n\n<p><!-- strchf script --><script>        if(window.strchfSettings === undefined) window.strchfSettings = {};    window.strchfSettings.stats = {url: \"https:\/\/codemotion.storychief.io\/machine-learning-as-a-service-serving-reusable-ml-models?id=922042436&type=2\",title: \"Machine learning as a service \u2013 serving reusable ML models\",id: \"66543c6c-96d5-4792-a44b-49339654b7a1\"};            (function(d, s, id) {      var js, sjs = d.getElementsByTagName(s)[0];      if (d.getElementById(id)) {window.strchf.update(); return;}      js = d.createElement(s); js.id = id;      js.src = \"https:\/\/d37oebn0w9ir6a.cloudfront.net\/scripts\/v0\/strchf.js\";      js.async = true;      sjs.parentNode.insertBefore(js, sjs);    }(document, 'script', 'storychief-jssdk'))    <\/script><!-- End strchf script --><\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>At Codemotion Amsterdam 2019, ING developers delivered a speech about how they managed to create a solution that can efficiently serve ML models across multiple teams.<\/p>\n","protected":false},"author":7,"featured_media":2412,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":4,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[35],"tags":[77],"collections":[],"class_list":{"0":"post-2411","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-machine-learning","8":"tag-codemotion-amsterdam","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Machine learning as a service: serving reusable ML models - Codemotion<\/title>\n<meta name=\"description\" content=\"At Codemotion Amsterdam 2019, ING developers discussed how they managed to create a solution that can efficiently serve ML models across multiple teams.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Machine learning as a service \u2013 serving reusable ML models\" \/>\n<meta property=\"og:description\" content=\"At Codemotion Amsterdam 2019, ING developers discussed how they managed to create a solution that can efficiently serve ML models across multiple teams.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-10T11:14:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-23T11:59:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1013\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Toby Moncaster\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@tobym76\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Toby Moncaster\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/\"},\"author\":{\"name\":\"Toby Moncaster\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8b9f025e7d76754fb3d4ffd428b0813b\"},\"headline\":\"Machine learning as a service \u2013 serving reusable ML models\",\"datePublished\":\"2020-01-10T11:14:49+00:00\",\"dateModified\":\"2021-12-23T11:59:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/\"},\"wordCount\":981,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg\",\"keywords\":[\"Codemotion Amsterdam\"],\"articleSection\":[\"Machine Learning\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/\",\"name\":\"Machine learning as a service: serving reusable ML models - Codemotion\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg\",\"datePublished\":\"2020-01-10T11:14:49+00:00\",\"dateModified\":\"2021-12-23T11:59:19+00:00\",\"description\":\"At Codemotion Amsterdam 2019, ING developers discussed how they managed to create a solution that can efficiently serve ML models across multiple teams.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg\",\"width\":1013,\"height\":675,\"caption\":\"Machine learning as a service \u2013 serving reusable ML models\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI\/ML\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Machine Learning\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Machine learning as a service \u2013 serving reusable ML models\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8b9f025e7d76754fb3d4ffd428b0813b\",\"name\":\"Toby Moncaster\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g\",\"caption\":\"Toby Moncaster\"},\"description\":\"I am an experienced freelance writer. I specialise in making complex topics accessible to wider audiences. My interests include TCP\/IP, data protection and AI. I currently work with B2B startups across the world. I hold 5 patents, edited 3 RFCs and received a PhD in computer science from the University of Cambridge.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/tobymoncaster\/\",\"https:\/\/x.com\/tobym76\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Machine learning as a service: serving reusable ML models - Codemotion","description":"At Codemotion Amsterdam 2019, ING developers discussed how they managed to create a solution that can efficiently serve ML models across multiple teams.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/","og_locale":"en_US","og_type":"article","og_title":"Machine learning as a service \u2013 serving reusable ML models","og_description":"At Codemotion Amsterdam 2019, ING developers discussed how they managed to create a solution that can efficiently serve ML models across multiple teams.","og_url":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2020-01-10T11:14:49+00:00","article_modified_time":"2021-12-23T11:59:19+00:00","og_image":[{"width":1013,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg","type":"image\/jpeg"}],"author":"Toby Moncaster","twitter_card":"summary_large_image","twitter_creator":"@tobym76","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Toby Moncaster","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/"},"author":{"name":"Toby Moncaster","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8b9f025e7d76754fb3d4ffd428b0813b"},"headline":"Machine learning as a service \u2013 serving reusable ML models","datePublished":"2020-01-10T11:14:49+00:00","dateModified":"2021-12-23T11:59:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/"},"wordCount":981,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg","keywords":["Codemotion Amsterdam"],"articleSection":["Machine Learning"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/","url":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/","name":"Machine learning as a service: serving reusable ML models - Codemotion","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg","datePublished":"2020-01-10T11:14:49+00:00","dateModified":"2021-12-23T11:59:19+00:00","description":"At Codemotion Amsterdam 2019, ING developers discussed how they managed to create a solution that can efficiently serve ML models across multiple teams.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg","width":1013,"height":675,"caption":"Machine learning as a service \u2013 serving reusable ML models"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/machine-learning-as-a-service-serving-reusable-ml-models\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"AI\/ML","item":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/"},{"@type":"ListItem","position":3,"name":"Machine Learning","item":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/machine-learning\/"},{"@type":"ListItem","position":4,"name":"Machine learning as a service \u2013 serving reusable ML models"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8b9f025e7d76754fb3d4ffd428b0813b","name":"Toby Moncaster","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g","caption":"Toby Moncaster"},"description":"I am an experienced freelance writer. I specialise in making complex topics accessible to wider audiences. My interests include TCP\/IP, data protection and AI. I currently work with B2B startups across the world. I hold 5 patents, edited 3 RFCs and received a PhD in computer science from the University of Cambridge.","sameAs":["https:\/\/www.linkedin.com\/in\/tobymoncaster\/","https:\/\/x.com\/tobym76"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000-600x600.jpg","author_info":{"display_name":"Toby Moncaster","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg",1013,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000-768x512.jpg",768,512,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg",1013,675,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg",1013,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg",1013,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000.jpg",100,67,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/20190402-Codemotion2019-hr-26-1_1bd1373a670cd07306ec3797221b8e84_2000-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Toby Moncaster","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/"},"uagb_comment_info":0,"uagb_excerpt":"At Codemotion Amsterdam 2019, ING developers delivered a speech about how they managed to create a solution that can efficiently serve ML models across multiple teams.","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/2411","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=2411"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/2411\/revisions"}],"predecessor-version":[{"id":2425,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/2411\/revisions\/2425"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/2412"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=2411"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=2411"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=2411"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=2411"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}