	{"id":63719,"date":"2021-10-25T17:00:23","date_gmt":"2021-10-25T16:00:23","guid":{"rendered":"https:\/\/www.artefact.com\/?post_type=news&#038;p=63719"},"modified":"2024-09-20T17:45:46","modified_gmt":"2024-09-20T16:45:46","slug":"serving-ml-models-at-scale-using-mlflow-on-kubernetes-part-2","status":"publish","type":"blog","link":"https:\/\/www.artefact.com\/nl\/blog\/serving-ml-models-at-scale-using-mlflow-on-kubernetes-part-2\/","title":{"rendered":"ML-modellen op schaal serveren met Mlflow op Kubernetes - Deel 2"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling article-author\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-background-color:#ffffff;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-bottom-small:8px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.2;\">Auteur<\/h2><\/div><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27150%27%20height%3D%270%27%20viewBox%3D%270%200%20150%200%27%3E%3Crect%20width%3D%27150%27%20height%3D%270%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/kais-laribi.jpeg\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left article-author-image\" style=\"width: 150px; border-radius: 54% 46% 77% 23% \/ 74% 40% 60% 26%; overflow: hidden;\" width=\"150\" height=\"auto\" \/><div class=\"fusion-title title fusion-title-2 fusion-sep-none fusion-title-text fusion-title-size-three article-author-name-title\" style=\"--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">Kais Laribi<\/h3><\/div><div class=\"fusion-text fusion-text-1 article-author-description\"><p>Senior Data Wetenschapper bij Artefact<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-margin-top:40px;--awb-margin-bottom:40px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-center fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_1 1_1 fusion-flex-column fusion-flex-align-self-center fusion-column-inner-bg-wrapper\" style=\"--awb-padding-top:20px;--awb-padding-right:20px;--awb-padding-bottom:20px;--awb-padding-left:20px;--awb-overflow:hidden;--awb-inner-bg-size:cover;--awb-border-color:rgba(10,17,40,0.1);--awb-border-top:1px;--awb-border-right:1px;--awb-border-bottom:1px;--awb-border-left:1px;--awb-border-style:solid;--awb-border-radius:4px 4px 4px 4px;--awb-inner-bg-border-radius:4px 4px 4px 4px;--awb-inner-bg-overflow:hidden;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><span class=\"fusion-column-inner-bg hover-type-none\"><a class=\"fusion-column-anchor\" href=\"https:\/\/medium.com\/artefact-engineering-and-data-science\/serving-ml-models-at-scale-using-mlflow-on-kubernetes-7a85c28d38e\" rel=\"noopener noreferrer\" target=\"_blank\"><span class=\"fusion-column-inner-bg-image\"><\/span><\/a><\/span><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-row fusion-flex-align-items-center\"><div class=\"fusion-text fusion-text-2\"><p><u>Lees ons artikel over<\/u><\/p>\n<\/div><div class=\"fusion-image-element\" style=\"--awb-margin-right:20px;--awb-margin-left:20px;--awb-max-width:150px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-1 hover-type-none\"><img decoding=\"async\" width=\"4000\" height=\"992\" title=\"Medium Blog\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog.png\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog.png\" alt class=\"lazyload img-responsive wp-image-60582\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%274000%27%20height%3D%27992%27%20viewBox%3D%270%200%204000%20992%27%3E%3Crect%20width%3D%274000%27%20height%3D%27992%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-200x50.png 200w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-400x99.png 400w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-600x149.png 600w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-800x198.png 800w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog-1200x298.png 1200w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/04\/Medium-Blog.png 4000w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 640px) 100vw, 4000px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-3\"><p>.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-4 description\"><p>Dit artikel is het tweede deel van een serie waarin we het proces doorlopen van het loggen van modellen met behulp van Mlflow, ze serveren als API endpoint en ze uiteindelijk opschalen naargelang de behoeften van onze applicatie. We raden u aan om ons vorige artikel te lezen, waarin we laten zien hoe u een volginstantie op k8s kunt implementeren en de praktische vereisten (geheimen, omgevingsvariabelen...) kunt controleren, omdat we daar hier verder op zullen bouwen.<br \/>\nIn het volgende laten we zien hoe u een machine-learningmodel dat al geregistreerd is in Mlflow kunt serveren en als API-eindpunt op k8s kunt blootstellen.<\/p>\n<\/div><\/div><\/div><\/div><\/div><article class=\"fusion-fullwidth fullwidth-box fusion-builder-row-4 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-3 fusion-sep-none fusion-title-text fusion-title-size-one\" style=\"--awb-margin-bottom-small:8px;\"><h1 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:70;line-height:1;\">Deel 2- Hoe een model als API op Kubernetes serveren?<\/h1><\/div><div class=\"fusion-title title fusion-title-4 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-bottom-small:8px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.2;\">Inleiding<\/h2><\/div><div class=\"fusion-text fusion-text-5\"><p>Het is duidelijk dat het bijhouden en optimaliseren van de prestaties van modellen een belangrijk onderdeel is van het maken van ML-modellen. De volgende uitdaging is om ze te integreren in een toepassing of product om hun voorspellingen te gebruiken. Dit noemen we modellen serveren of inferentie. Er zijn verschillende raamwerken en technieken waarmee we dit kunnen doen. Toch zullen we ons hier richten op Mlflow en laten zien hoe effici\u00ebnt en eenvoudig het kan zijn.<\/p>\n<\/div><div class=\"fusion-title title fusion-title-5 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-bottom-small:8px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.2;\">De serverafbeelding bouwen en implementeren<\/h2><\/div><div class=\"fusion-text fusion-text-6\"><p>De verschillende configuratiebestanden die hier gebruikt worden, maken deel uit van de\u00a0<a class=\"bv ig\" href=\"https:\/\/github.com\/artefactory-global\/mlflow-serving-example\" target=\"_blank\" rel=\"noopener ugc nofollow\">praktijkgerichte opslagplaats<\/a>\u00a0In principe moeten we:<\/p>\n<\/div><div class=\"fusion-title title fusion-title-6 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">1. Bereid het Mlflow serving docker image voor en push het naar de containerregistry op GCP.<\/h3><\/div><div class=\"fusion-text fusion-text-7\"><pre class=\"hp hq hr hs ht kg gv be\"><span id=\"09f2\" class=\"ej kh ii dm ki b kj kk kl s km\" data-selectable-paragraph=\"\">cd mlflow-serving-voorbeeld<\/span><span id=\"eda1\" class=\"ej kh ii dm ki b kj kn ko kp kq kr kl s km\" data-selectable-paragraph=\"\">docker build --tag $\/mlflow_serving:v1 <br \/>--bestand docker_mlflow_serving .<\/span><span id=\"855d\" class=\"ej kh ii dm ki b kj kn ko kp kq kr kl s km\" data-selectable-paragraph=\"\">docker push $\/mlflow_serving:v1<\/span><\/pre>\n<\/div><div class=\"fusion-title title fusion-title-7 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">2. Het Kubernetes implementatiebestand voorbereiden<\/h3><\/div><div class=\"fusion-text fusion-text-8\"><p>door de containersectie te wijzigen en deze toe te wijzen aan de\u00a0<strong>docker-afbeelding<\/strong>\u00a0eerder naar GCR geduwd,\u00a0<strong>het modelpad<\/strong>\u00a0en\u00a0<strong>de serverende poort.<\/strong><\/p>\n<\/div><div class=\"fusion-text fusion-text-9\"><div class=\"code\">\n<table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\" data-paste-markdown-skip=\"\">\n<tbody>\n<tr>\n<td id=\"file-mlflow_serving-yaml-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">apiVersion<\/span>: <span class=\"pl-s\">apps\/v1<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L2\" class=\"blob-num js-line-number\" data-line-number=\"2\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC2\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">vriendelijk<\/span>: <span class=\"pl-s\">Inzet<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L3\" class=\"blob-num js-line-number\" data-line-number=\"3\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC3\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">metadata<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L4\" class=\"blob-num js-line-number\" data-line-number=\"4\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC4\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">naam<\/span>: <span class=\"pl-s\">mlflow-serving<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L5\" class=\"blob-num js-line-number\" data-line-number=\"5\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC5\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">etiketten<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L6\" class=\"blob-num js-line-number\" data-line-number=\"6\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC6\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">app<\/span>: <span class=\"pl-s\">dien-ML-model-mlflow<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L7\" class=\"blob-num js-line-number\" data-line-number=\"7\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC7\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L8\" class=\"blob-num js-line-number\" data-line-number=\"8\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC8\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">spec<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L9\" class=\"blob-num js-line-number\" data-line-number=\"9\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC9\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">replica's<\/span>: <span class=\"pl-c1\">1<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L10\" class=\"blob-num js-line-number\" data-line-number=\"10\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC10\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">selector<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L11\" class=\"blob-num js-line-number\" data-line-number=\"11\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC11\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">matchLabels<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L12\" class=\"blob-num js-line-number\" data-line-number=\"12\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC12\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">app<\/span>: <span class=\"pl-s\">mlflow-serving<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L13\" class=\"blob-num js-line-number\" data-line-number=\"13\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC13\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">sjabloon<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L14\" class=\"blob-num js-line-number\" data-line-number=\"14\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC14\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">metadata<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L15\" class=\"blob-num js-line-number\" data-line-number=\"15\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC15\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">etiketten<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L16\" class=\"blob-num js-line-number\" data-line-number=\"16\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC16\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">app<\/span>: <span class=\"pl-s\">mlflow-serving<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L17\" class=\"blob-num js-line-number\" data-line-number=\"17\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC17\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L18\" class=\"blob-num js-line-number\" data-line-number=\"18\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC18\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">spec<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L19\" class=\"blob-num js-line-number\" data-line-number=\"19\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC19\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">containers<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L20\" class=\"blob-num js-line-number\" data-line-number=\"20\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC20\" class=\"blob-code blob-code-inner js-file-line\">- <span class=\"pl-ent\">naam<\/span>: <span class=\"pl-s\">mlflow-serving<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L21\" class=\"blob-num js-line-number\" data-line-number=\"21\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC21\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">Afbeelding<\/span>: <span class=\"pl-s\">GCR_REPO\/mlflow_serving:v1 <\/span><span class=\"pl-c\">1TP45Wissel hier<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L22\" class=\"blob-num js-line-number\" data-line-number=\"22\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC22\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">omgeving<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L23\" class=\"blob-num js-line-number\" data-line-number=\"23\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC23\" class=\"blob-code blob-code-inner js-file-line\">- <span class=\"pl-ent\">naam<\/span>: <span class=\"pl-s\">MODEL_URI<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L24\" class=\"blob-num js-line-number\" data-line-number=\"24\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC24\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">waarde<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\u201c<\/span>gs:\/\/..\/artifacts\/..\/..\/artifacts\/..<span class=\"pl-pds\">\u201c<\/span><\/span> <span class=\"pl-c\">1TP45Wissel hier<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L25\" class=\"blob-num js-line-number\" data-line-number=\"25\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC25\" class=\"blob-code blob-code-inner js-file-line\">- <span class=\"pl-ent\">naam<\/span>: <span class=\"pl-s\">DIENSTPOORT<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L26\" class=\"blob-num js-line-number\" data-line-number=\"26\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC26\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">waarde<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\u201c<\/span>8082<span class=\"pl-pds\">\u201c<\/span><\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L27\" class=\"blob-num js-line-number\" data-line-number=\"27\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC27\" class=\"blob-code blob-code-inner js-file-line\">- <span class=\"pl-ent\">naam<\/span>: <span class=\"pl-s\">GOOGLE_TOEPASSING_GEGEVENS<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L28\" class=\"blob-num js-line-number\" data-line-number=\"28\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC28\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">waarde<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\u201c<\/span>\/etc\/secrets\/sleutelbestand.json<span class=\"pl-pds\">\u201c<\/span><\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L29\" class=\"blob-num js-line-number\" data-line-number=\"29\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC29\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">volumeMounts<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L30\" class=\"blob-num js-line-number\" data-line-number=\"30\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC30\" class=\"blob-code blob-code-inner js-file-line\">- <span class=\"pl-ent\">naam<\/span>: <span class=\"pl-s\">gcsfs-creds<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L31\" class=\"blob-num js-line-number\" data-line-number=\"31\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC31\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">mountPath<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\u201c<\/span>\/etc\/secrets<span class=\"pl-pds\">\u201c<\/span><\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L32\" class=\"blob-num js-line-number\" data-line-number=\"32\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC32\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">alleen-lezen<\/span>: <span class=\"pl-c1\">Echt<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L33\" class=\"blob-num js-line-number\" data-line-number=\"33\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC33\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">middelen<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L34\" class=\"blob-num js-line-number\" data-line-number=\"34\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC34\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">verzoekt<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L35\" class=\"blob-num js-line-number\" data-line-number=\"35\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC35\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">cpu<\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">\u201c<\/span>1000m<span class=\"pl-pds\">\u201c<\/span><\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L36\" class=\"blob-num js-line-number\" data-line-number=\"36\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC36\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L37\" class=\"blob-num js-line-number\" data-line-number=\"37\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC37\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L38\" class=\"blob-num js-line-number\" data-line-number=\"38\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC38\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">volumes<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L39\" class=\"blob-num js-line-number\" data-line-number=\"39\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC39\" class=\"blob-code blob-code-inner js-file-line\">- <span class=\"pl-ent\">naam<\/span>: <span class=\"pl-s\">gcsfs-creds<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L40\" class=\"blob-num js-line-number\" data-line-number=\"40\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC40\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">geheim<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L41\" class=\"blob-num js-line-number\" data-line-number=\"41\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC41\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">secretName<\/span>: <span class=\"pl-s\">gcsfs-creds<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L42\" class=\"blob-num js-line-number\" data-line-number=\"42\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC42\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">items<\/span>:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L43\" class=\"blob-num js-line-number\" data-line-number=\"43\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC43\" class=\"blob-code blob-code-inner js-file-line\">- <span class=\"pl-ent\">toets<\/span>: <span class=\"pl-s\">sleutelbestand.json<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"file-mlflow_serving-yaml-L44\" class=\"blob-num js-line-number\" data-line-number=\"44\">\u00a0<\/td>\n<td id=\"file-mlflow_serving-yaml-LC44\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-ent\">pad<\/span>: <span class=\"pl-s\">sleutelbestand.json<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div><div class=\"fusion-title title fusion-title-8 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">3. Implementatieopdrachten uitvoeren<\/h3><\/div><div class=\"fusion-text fusion-text-10\"><p>kubectl create -f deployments\/mlflow-serving\/mlflow_serving.yaml<\/p>\n<\/div><div class=\"fusion-title title fusion-title-9 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">4. Stel de implementatie open voor externe toegang<\/h3><\/div><div class=\"fusion-text fusion-text-11\"><p>Met de volgende opdracht wordt een nieuwe resource aangemaakt om extern verkeer om te leiden naar onze API.<\/p>\n<pre class=\"hp hq hr hs ht kg gv be\"><span id=\"d7d7\" class=\"ej kh ii dm ki b kj kk kl s km\" data-selectable-paragraph=\"\">kubectl expose deployment mlflow-serving --port 8082 --type=\"LoadBalancer\"<\/span><\/pre>\n<\/div><div class=\"fusion-title title fusion-title-10 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">5. Controleer de implementatie en vraag het eindpunt op<\/h3><\/div><div class=\"fusion-text fusion-text-12\"><p>Als de implementatie succesvol is, zou mlflow-serving UP moeten zijn en zou er \u00e9\u00e9n pod beschikbaar moeten zijn. U kunt dat controleren door te typen\u00a0<em><strong class=\"jh ka\">kubectl get pods<\/strong><\/em><\/p>\n<\/div><div class=\"fusion-image-element\" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-2 hover-type-none\"><img decoding=\"async\" width=\"559\" height=\"60\" title=\"artikel-kais-deel2\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2.png\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2.png\" alt class=\"lazyload img-responsive wp-image-63932\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27559%27%20height%3D%2760%27%20viewBox%3D%270%200%20559%2060%27%3E%3Crect%20width%3D%27559%27%20height%3D%2760%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-200x21.png 200w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-400x43.png 400w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2.png 559w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 640px) 100vw, 559px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-13\"><p>De laatste stap is het controleren van het externe IP-adres dat werd toegewezen aan de loadbalancer die het verkeer omleidt naar onze API-container met behulp van\u00a0<strong><em>kubectl get diensten<\/em><\/strong>\u00a0en test de respons op een paar query's.<\/p>\n<\/div><div class=\"fusion-image-element\" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-3 hover-type-none\"><img decoding=\"async\" width=\"700\" height=\"100\" title=\"artikel-kais-deel2-2\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-2.png\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-2.png\" alt class=\"lazyload img-responsive wp-image-63933\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27700%27%20height%3D%27100%27%20viewBox%3D%270%200%20700%20100%27%3E%3Crect%20width%3D%27700%27%20height%3D%27100%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-2-200x29.png 200w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-2-400x57.png 400w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-2-600x86.png 600w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-2.png 700w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 640px) 100vw, 700px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-14\"><p>Een voorbeeldcode om deze query's uit te voeren vindt u in het volgende\u00a0<a class=\"bv ig\" href=\"https:\/\/github.com\/artefactory-global\/mlflow-serving-example\/blob\/main\/notebooks\/2.%20query%20mlflow%20serve%20API.ipynb\" target=\"_blank\" rel=\"noopener ugc nofollow\">notebook<\/a>\u00a0waarin we enkele rijen van data laden, kenmerken selecteren, converteren naar JSON-formaat en in een postverzoek naar de API sturen.<br \/>\nAls we nu de stappen uit ons vorige en huidige artikel combineren, ziet onze uiteindelijke architectuur er als volgt uit:<\/p>\n<\/div><div class=\"fusion-image-element\" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-4 hover-type-none\"><img decoding=\"async\" width=\"700\" height=\"383\" title=\"artikel-kais-deel2-3\" src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-3.png\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-3.png\" alt class=\"lazyload img-responsive wp-image-63934\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27700%27%20height%3D%27383%27%20viewBox%3D%270%200%20700%20383%27%3E%3Crect%20width%3D%27700%27%20height%3D%27383%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-3-200x109.png 200w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-3-400x219.png 400w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-3-600x328.png 600w, https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/10\/article-kais-part2-3.png 700w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 640px) 100vw, 700px\" \/><\/span><\/div><div class=\"fusion-title title fusion-title-11 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-bottom-small:8px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.2;\">Conclusie<\/h2><\/div><div class=\"fusion-text fusion-text-15\"><p>In dit artikel hebben we laten zien dat we eenvoudig machine learning-modellen kunnen implementeren als een API eindpunt met behulp van de Mlflow serving module.<\/p>\n<p>Zoals u misschien ziet, is er in onze huidige implementatie slechts \u00e9\u00e9n pod aangemaakt om het model te bedienen. Hoewel dit goed werkt voor kleine toepassingen waar we niet meerdere parallelle queries verwachten, zou het snel zijn grenzen kunnen laten zien op andere toepassingen, aangezien een enkele pod beperkte bronnen heeft. Bovendien kan de applicatie op deze manier niet meer dan \u00e9\u00e9n node aan rekenkracht gebruiken. In het volgende en laatste artikel van deze serie zullen we het schaalbaarheidsprobleem aanpakken. We zullen eerst de knelpunten belichten en proberen deze op te lossen om een schaalbare applicatie te krijgen die gebruik maakt van de kracht van ons Kubernetes-cluster.<\/p>\n<\/div><\/div><\/div><\/div><\/article><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-5 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-margin-top:40px;--awb-margin-bottom:40px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-center fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"max-width:calc( 1440px + 20px );margin-left: calc(-20px \/ 2 );margin-right: calc(-20px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_1_1 1_1 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-top:40px;--awb-padding-right:40px;--awb-padding-bottom:40px;--awb-padding-left:40px;--awb-overflow:hidden;--awb-bg-position:left center;--awb-bg-size:cover;--awb-border-color:rgba(10,17,40,0.1);--awb-border-style:solid;--awb-border-radius:4px 4px 4px 4px;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:10px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:10px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:10px;--awb-spacing-left-medium:10px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:10px;--awb-spacing-left-small:10px;\"><div class=\"fusion-column-wrapper lazyload fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column fusion-column-has-bg-image\" data-bg-url=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/03\/background.jpg\" data-bg=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/03\/background.jpg\"><div class=\"fusion-image-element\" style=\"text-align:center;--awb-margin-right:20px;--awb-margin-left:20px;--awb-max-width:150px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\"fusion-imageframe imageframe-none imageframe-5 hover-type-none\"><img decoding=\"async\" width=\"72\" height=\"41\" title=\"middelgrote\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%2772%27%20height%3D%2741%27%20viewBox%3D%270%200%2072%2041%27%3E%3Crect%20width%3D%2772%27%20height%3D%2741%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-orig-src=\"https:\/\/www.artefact.com\/\/wp-content\/uploads\/2021\/03\/medium.png\" alt class=\"lazyload img-responsive wp-image-60927\"\/><\/span><\/div><div class=\"fusion-title title fusion-title-12 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-three\" style=\"--awb-margin-top:20px;--awb-margin-bottom:0px;--awb-margin-bottom-small:8px;\"><h3 class=\"fusion-title-heading title-heading-center fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:20;line-height:1.2;\">Medium Blog bij Artefact.<\/h3><\/div><div class=\"fusion-text fusion-text-16\" style=\"--awb-content-alignment:center;\"><p>Dit artikel werd oorspronkelijk gepubliceerd op <strong>Medium.com<\/strong>.<br \/>\nVolg ons op ons medium Blog !<\/p>\n<\/div><div style=\"text-align:center;\"><a class=\"fusion-button button-flat button-medium button-default fusion-button-default button-1 fusion-button-default-span fusion-button-default-type\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"https:\/\/medium.com\/artefact-engineering-and-data-science\/serving-ml-models-at-scale-using-mlflow-on-kubernetes-7a85c28d38e\" aria-label=\"https:\/\/medium.com\/artefact-engineering-and-data-science\/serving-ml-models-at-scale-using-mlflow-on-kubernetes-7a85c28d38e\" href=\"https:\/\/medium.com\/artefact-engineering-and-data-science\/serving-ml-models-at-scale-using-mlflow-on-kubernetes-bf27258775e7\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Lees ons artikel<\/span><\/a><\/div><\/div><\/div><\/div><\/div><\/p>","protected":false},"excerpt":{"rendered":"<p>25 oktober 2021<br \/>\nDit artikel is het tweede deel van een serie waarin we het proces doorlopen van het loggen van modellen met behulp van Mlflow, ze serveren als API endpoint en ze uiteindelijk opschalen naargelang de behoeften van onze applicatie. We raden u aan om ons vorige artikel te lezen, waarin we laten zien hoe u een volginstantie op k8s kunt implementeren en de praktische vereisten (geheimen, omgevingsvariabelen...) kunt controleren, omdat we daar hier verder op zullen bouwen.<br \/>\nIn het volgende laten we zien hoe u een machine-learningmodel dat al geregistreerd is in Mlflow kunt serveren en als API-eindpunt op k8s kunt blootstellen.<\/p>","protected":false},"featured_media":65014,"parent":0,"template":"","meta":{"_acf_changed":false,"ep_exclude_from_search":false},"blog-category":[21939],"blog-language":[2991],"class_list":["post-63719","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog-category-medium","blog-language-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.artefact.com\/nl\/wp-json\/wp\/v2\/blog\/63719","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.artefact.com\/nl\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.artefact.com\/nl\/wp-json\/wp\/v2\/types\/blog"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.artefact.com\/nl\/wp-json\/wp\/v2\/media\/65014"}],"wp:attachment":[{"href":"https:\/\/www.artefact.com\/nl\/wp-json\/wp\/v2\/media?parent=63719"}],"wp:term":[{"taxonomy":"blog-category","embeddable":true,"href":"https:\/\/www.artefact.com\/nl\/wp-json\/wp\/v2\/blog-category?post=63719"},{"taxonomy":"blog-language","embeddable":true,"href":"https:\/\/www.artefact.com\/nl\/wp-json\/wp\/v2\/blog-language?post=63719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}