	{"id":63668,"date":"2021-10-22T11:15:55","date_gmt":"2021-10-22T10:15:55","guid":{"rendered":"https:\/\/www.artefact.com\/?post_type=news&#038;p=63668"},"modified":"2024-09-20T17:45:46","modified_gmt":"2024-09-20T16:45:46","slug":"serving-ml-models-at-scale-using-mlflow-on-kubernetes-part-1","status":"publish","type":"blog","link":"https:\/\/www.artefact.com\/de\/blog\/serving-ml-models-at-scale-using-mlflow-on-kubernetes-part-1\/","title":{"rendered":"ML-Modelle in gro\u00dfem Ma\u00dfstab mit Mlflow auf Kubernetes bereitstellen - Teil 1"},"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;\">Autor<\/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>Leitender Data-Wissenschaftler bei 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-bf27258775e7\" 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>Lesen Sie unseren Artikel \u00fcber<\/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=\"Mittel 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>MLflow ist ein h\u00e4ufig verwendetes Tool f\u00fcr die Verfolgung von Experimenten zum maschinellen Lernen, die Versionierung von Modellen und das Serving. In unserem ersten Artikel der Serie \u201cML-Modelle in gro\u00dfem Umfang bereitstellen\u201d erkl\u00e4ren wir, wie Sie die Tracking-Instanz auf Kubernetes bereitstellen und sie zum Protokollieren von Experimenten und Speichern von Modellen verwenden.<\/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;\">Teil 1 - Wie stelle ich eine Mlflow-Verfolgungsinstanz auf Kubernetes bereit?<\/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;\">Einf\u00fchrung<\/h2><\/div><div class=\"fusion-text fusion-text-5\"><p>Mlflow ist ein in der data Science\/ML-Community weit verbreitetes Tool zur Verfolgung von Experimenten und zur Verwaltung von Modellen f\u00fcr maschinelles Lernen in verschiedenen Phasen. Damit k\u00f6nnen wir Metriken, Modelle und Artefakte speichern, um die Leistung von Modellen einfach zu vergleichen und ihre Lebenszyklen zu verwalten. Au\u00dferdem bietet Mlflow ein Modul, mit dem Modelle als API-Endpunkt bereitgestellt werden k\u00f6nnen, was die Integration in beliebige Produkte oder Webanwendungen erleichtert.<\/p>\n<\/div><div class=\"fusion-text fusion-text-6\"><p>Der Einsatz von maschinellem Lernen in Online-Produkten ist zwar cool, aber je nach Modellgr\u00f6\u00dfe, Art (ML, Deep Learning,...) und Last (Nutzeranfragen) kann es eine Herausforderung sein, die ben\u00f6tigten Ressourcen zu dimensionieren und eine angemessene Antwortzeit zu garantieren. Daher ist die Verwendung einer skalierbaren Infrastruktur wie Kubernetes-Cluster der Schl\u00fcssel zur Aufrechterhaltung der Serviceverf\u00fcgbarkeit und Leistung in der Inferenzphase.<\/p>\n<p>In diesem Zusammenhang ver\u00f6ffentlichen wir eine dreiteilige Serie, in der wir die folgenden Fragen beantworten:<\/p>\n<\/div><ul style=\"--awb-line-height:27.2px;--awb-icon-width:27.2px;--awb-icon-height:27.2px;--awb-icon-margin:11.2px;--awb-content-margin:38.4px;\" class=\"fusion-checklist fusion-checklist-1 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">Wie kann ich die Mlflow-Tracking-Instanz in Kubernetes einrichten und verwenden?<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">Wie kann man Modelle f\u00fcr maschinelles Lernen mit Hilfe von Mlflow als API bereitstellen?<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">Wie k\u00f6nnen wir eine gro\u00dfe Anzahl von Anfragen bew\u00e4ltigen und unsere Inferenzaufgabe f\u00fcr industrialisierte Produkte skalierbar machen?<\/div><\/li><\/ul><div class=\"fusion-text fusion-text-7\"><p>Beginnen wir also diesen ersten Artikel mit einer Einf\u00fchrung in Kubernetes und seine Komponenten und gehen wir die Bereitstellung einer Tracking-Instanz f\u00fcr Protokollmodelle durch.<\/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;\">\u00dcberblick \u00fcber Kubernetes<\/h2><\/div><div class=\"fusion-text fusion-text-8\"><p>Kubernetes ist ein Open-Source-Projekt, das von Google im Jahr 2014 ver\u00f6ffentlicht wurde. Es handelt sich um ein Container-Kontroll- und Orchestrierungssystem, das die automatische Bereitstellung, Skalierung und Planung von Anwendungen erm\u00f6glicht. Es hat die folgende Architektur:<\/p>\n<\/div><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27705%27%20height%3D%270%27%20viewBox%3D%270%200%20705%200%27%3E%3Crect%20width%3D%27705%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\/article-kais.png\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left hover-enable\" style=\"width: 705px; border-radius: 59% 41% 41% 59% \/ 29% 48% 52% 71%; overflow: hidden;\" width=\"705\" height=\"auto\" \/><div class=\"fusion-text fusion-text-9\"><p><strong>Meister<\/strong>: Er verwaltet Eingabekonfigurationen, plant containerisierte Anwendungen auf den verschiedenen Knoten und \u00fcberwacht deren Status. Der Master besteht aus:<\/p>\n<\/div><ul style=\"--awb-line-height:27.2px;--awb-icon-width:27.2px;--awb-icon-height:27.2px;--awb-icon-margin:11.2px;--awb-content-margin:38.4px;\" class=\"fusion-checklist fusion-checklist-2 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><strong>API-Server:\u00a0<\/strong>erm\u00f6glicht die Interaktion mit dem Cluster und validiert die vom Entwickler gesendeten Befehle zur Aktualisierung des Clusters oder des App-Status.<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><strong>Planer<\/strong>: entscheidet<strong class=\"jh kt\">\u00a0<\/strong>auf welchen Knoten neue Objekte ausgef\u00fchrt werden sollen, um Stabilit\u00e4t und Lastausgleich zu gew\u00e4hrleisten.<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><strong>Etcd:<\/strong>\u00a0eine database mit Schl\u00fcsselwerten, die die verschiedenen Ressourcenkonfigurationen und -zust\u00e4nde speichert<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><strong>Controller Manager:<\/strong>\u00fcberwacht den Zustand des Clusters und der verschiedenen Ressourcen und stellt sicher, dass der aktuelle Zustand dem gew\u00fcnschten entspricht.<\/div><\/li><\/ul><div class=\"fusion-text fusion-text-10\"><p><strong>Knotenpunkte:<\/strong> Sie sind die Ausf\u00fchrungsknoten, in denen sich die bereitgestellten Container befinden. Ihre Hauptkomponenten sind:<\/p>\n<\/div><ul style=\"--awb-line-height:27.2px;--awb-icon-width:27.2px;--awb-icon-height:27.2px;--awb-icon-margin:11.2px;--awb-content-margin:38.4px;\" class=\"fusion-checklist fusion-checklist-3 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><strong>Pods:\u00a0<\/strong>sind die grundlegende Ausf\u00fchrungseinheit in Kubernetes. Ein Pod kapselt eine Anwendung entweder als einzelnen Container oder als mehrere Container, die mit gemeinsam genutzten Speichervolumes und Netzwerken zusammenarbeiten.<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p><strong>Kubelet:<\/strong>ist<strong class=\"jh kt\">\u00a0<\/strong>eine<strong class=\"jh kt\">\u00a0<\/strong>Agent zur \u00dcberpr\u00fcfung des Container-Status und zur Kommunikation mit dem Kubernetes-Master.<\/p>\n<\/div><\/li><\/ul><div class=\"fusion-text fusion-text-11\"><p>Es ist die erste Wahl, wenn eine Anwendung aus mehreren Diensten besteht, die miteinander kommunizieren, denn es stellt sicher, dass jeder Dienst seine eigene Container-Umgebung mit einer Reihe von Regeln f\u00fcr die Interaktion mit anderen hat. Au\u00dferdem bietet es die interessante M\u00f6glichkeit, eine Anwendung zu skalieren, ohne sich um die Verwaltung oder Synchronisierung neuer Dienste k\u00fcmmern zu m\u00fcssen, und Ressourcen zwischen verschiedenen Rechnern auszugleichen.<\/p>\n<p>Als data-Wissenschaftler oder ML-Ingenieure werden wir mit Kubernetes \u00fcber die Server-API interagieren, indem wir CLI-Befehle oder YAML-Konfigurationsdateien verwenden, um Anwendungen bereitzustellen und zu ver\u00f6ffentlichen oder den Status unserer Ressourcen abzurufen.<\/p>\n<\/div><div class=\"fusion-title title fusion-title-6 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;\">Praktische Vorraussetzungen<\/h2><\/div><div class=\"fusion-text fusion-text-12\"><p>F\u00fcr diese praktische \u00dcbung werden wir GCP als cloud-Anbieter verwenden. Zun\u00e4chst m\u00fcssen wir :<\/p>\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;\">1. Schaffen Sie die infrastrukturellen Elemente<\/h3><\/div><ul style=\"--awb-line-height:27.2px;--awb-icon-width:27.2px;--awb-icon-height:27.2px;--awb-icon-margin:11.2px;--awb-content-margin:38.4px;\" class=\"fusion-checklist fusion-checklist-4 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><strong>mlflow_gke:<\/strong> einen Eimer zum Speichern von Dateien, datasets...<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p><strong>mlflow-k8s<\/strong>: einen GKE-Cluster mit drei Knoten (e2-highcpu-4), um sowohl das Tracking-Modul als auch das maschinelle Lernmodell einzusetzen.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p><strong>Belastungstests:\u00a0<\/strong>einen GKE-Cluster mit drei Knoten (e2-standard-2), um Lasttests durchzuf\u00fchren. Er wird im dritten Artikel dieser Serie verwendet.<\/p>\n<\/div><\/li><\/ul><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27659%27%20height%3D%270%27%20viewBox%3D%270%200%20659%200%27%3E%3Crect%20width%3D%27659%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-article2.png\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left hover-enable\" style=\"width: 659px; border-radius: 59% 41% 41% 59% \/ 29% 48% 52% 71%; overflow: hidden;\" width=\"659\" height=\"auto\" \/><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;\">2. Konfigurieren Sie die lokale Workstation<\/h3><\/div><ul style=\"--awb-line-height:27.2px;--awb-icon-width:27.2px;--awb-icon-height:27.2px;--awb-icon-margin:11.2px;--awb-content-margin:38.4px;\" class=\"fusion-checklist fusion-checklist-5 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Installieren Sie die Python-Anforderungen f\u00fcr die Interaktion mit GCP und mlflow cli<\/p>\n<pre class=\"hp hq hr hs ht le gv be\"><span id=\"b8dc\" class=\"ej lf ii dm lg b lh li lj s lk\" data-selectable-paragraph=\"\">pip install mlflow gcsfs google-cloud google-cloud-storage kubernetes<\/span><\/pre>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">Haben\u00a0<a class=\"bv ig\" href=\"https:\/\/cloud.google.com\/sdk\/gcloud\/reference\/auth\/login\" target=\"_blank\" rel=\"noopener ugc nofollow\">gcloud<\/a>\u00a0und\u00a0<a class=\"bv ig\" href=\"https:\/\/cloud.google.com\/kubernetes-engine\/docs\/how-to\/cluster-access-for-kubectl\" target=\"_blank\" rel=\"noopener ugc nofollow\">kubectl<\/a>\u00a0mit den Anmeldeinformationen f\u00fcr den Zugriff auf das GCP-Projekt und die Cluster konfiguriert<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">Sie haben Helm CLI installiert und initialisiert. Bitte\u00a0<a class=\"bv ig\" href=\"https:\/\/helm.sh\/docs\/using_helm\/#installing-helm\" target=\"_blank\" rel=\"noopener ugc nofollow\">finden Sie hier die Anleitung<\/a>\u00a0f\u00fcr den Fall, dass Sie den Client noch nicht haben.<\/div><\/li><\/ul><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;\">3. Klonen Sie das Hands-on-Projekt-Repository, um den Code zu erhalten<\/h3><\/div><div class=\"fusion-text fusion-text-13\"><p>Git-Klon <a class=\"bv ig\" href=\"https:\/\/github.com\/artefactory-global\/mlflow-serving-example\" target=\"_blank\" rel=\"noopener ugc nofollow\">https:\/\/github.com\/artefactory-global\/mlflow-serving-example<\/a><\/p>\n<\/div><div class=\"fusion-title title fusion-title-10 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;\">Bereitstellung der Mlflow Tracking-Instanz<\/h2><\/div><div class=\"fusion-title title fusion-title-11 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. Einrichten der Cluster-Umgebung<\/h3><\/div><ul style=\"--awb-line-height:27.2px;--awb-icon-width:27.2px;--awb-icon-height:27.2px;--awb-icon-margin:11.2px;--awb-content-margin:38.4px;\" class=\"fusion-checklist fusion-checklist-6 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><strong>Erstellen Sie ein Dienstkonto, um die Interaktion mit GCS zu erm\u00f6glichen<br \/>\n<\/strong>Dies kann \u00fcber die Google cloud-Konsole erfolgen, unter dem Men\u00fcpunkt\u00a0<a class=\"bv ig\" href=\"https:\/\/console.cloud.google.com\/iam-admin\/serviceaccounts\" target=\"_blank\" rel=\"noopener ugc nofollow\">iam-Abschnitt<\/a>. Wir m\u00fcssen ein Dienstkonto mit der Berechtigung zum Verwalten von Speicherobjekten erstellen, einen Authentifizierungsschl\u00fcssel erzeugen und ihn als keyfile.json herunterladen.<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><strong>H\u00e4ngen Sie die Authentifizierungsdatei als Geheimnis ein<\/strong><strong class=\"jh kt\"><br \/>\n<\/strong>Geheimnisse erm\u00f6glichen es uns, die Zugangsdaten auf sichere Weise zu behandeln, so dass sie nur f\u00fcr die entsprechenden Ressourcen sichtbar sind.<strong class=\"jh kt\">\u00a0<\/strong>Zu diesem Zweck erstellen wir ein geheimes Volume und geben die Authentifizierungsdatei nur f\u00fcr die ben\u00f6tigten Container frei.<br \/>\n<span id=\"c3dd\" class=\"ej lf ii dm lg b lh li lj s lk\" data-selectable-paragraph=\"\">kubectl create secret generic gcsfs-creds -from-file=.\/keyfile.json<\/span><\/div><\/li><\/ul><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27634%27%20height%3D%270%27%20viewBox%3D%270%200%20634%200%27%3E%3Crect%20width%3D%27634%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-article3.png\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left hover-enable\" style=\"width: 634px; border-radius: 59% 41% 41% 59% \/ 29% 48% 52% 71%; overflow: hidden;\" width=\"634\" height=\"auto\" \/><div class=\"fusion-title title fusion-title-12 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. Verfolgung des Servereinsatzes<\/h3><\/div><ul style=\"--awb-line-height:27.2px;--awb-icon-width:27.2px;--awb-icon-height:27.2px;--awb-icon-margin:11.2px;--awb-content-margin:38.4px;\" class=\"fusion-checklist fusion-checklist-7 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><strong>Postgres-Speicher<\/strong><strong class=\"jh kt\"><br \/>\n<\/strong>Postgre dient als Backend-Speicherelement f\u00fcr mlflow, um Modelle metadata und Metriken zu speichern.<br \/>\nF\u00fcr die Bereitstellung werden wir Helm verwenden: ein Ressourcenmanager f\u00fcr Kubernetes, in dem viele Anwendungen in Form von Diagrammen oder Vorlagen verf\u00fcgbar sind, die mit einfachen Befehlen konfiguriert werden k\u00f6nnen.<\/p>\n<pre class=\"hp hq hr hs ht le gv be\"><span id=\"ac60\" class=\"ej lf ii dm lg b lh li lj s lk\" data-selectable-paragraph=\"\">#docs: https:\/\/artifacthub.io\/packages\/helm\/bitnami\/postgresql<\/span><span id=\"4dec\" class=\"ej lf ii dm lg b lh ln lo lp lq lr lj s lk\" data-selectable-paragraph=\"\">helm repo add bitnami https:\/\/charts.bitnami.com\/bitnami<\/span><span id=\"2bfe\" class=\"ej lf ii dm lg b lh ln lo lp lq lr lj s lk\" data-selectable-paragraph=\"\">helm install mlf-db bitnami\/postgresql --set postgresqlDatabase=mlflow_db --set postgresqlPassword=mlflow --set service.type=NodePort<\/span><\/pre>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-icon-check\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><strong>Verfolgungsinstanz<\/strong><strong class=\"jh kt\"><br \/>\n<\/strong>Wir werden auch Helm-Charts f\u00fcr die Bereitstellung des Tracking-Servers verwenden, aber zun\u00e4chst m\u00fcssen wir ein Docker-Image mit der gew\u00fcnschten Version erstellen, damit es von Helm heruntergeladen und bereitgestellt werden kann. Beachten Sie, dass das Image f\u00fcr Postgres bereits in einem \u00f6ffentlichen Repository enthalten war, aber hier werden wir unser eigenes Image erstellen.<\/p>\n<pre class=\"hp hq hr hs ht le gv be\"><span id=\"f69d\" class=\"ej lf ii dm lg b lh li lj s lk\" data-selectable-paragraph=\"\">cd mlflow-serving-beispiel<\/span><span id=\"b25e\" class=\"ej lf ii dm lg b lh ln lo lp lq lr lj s lk\" data-selectable-paragraph=\"\">docker build --tag $\/mlflow-tracking-server:v1 --file dockerfile_mlflow_tracking .<\/span><span id=\"38c4\" class=\"ej lf ii dm lg b lh ln lo lp lq lr lj s lk\" data-selectable-paragraph=\"\">docker push $\/mlflow-tracking-server:v1<\/span><\/pre>\n<\/div><\/li><\/ul><div class=\"fusion-text fusion-text-14\"><p>Sobald das Image in die Image-Registry \u00fcbertragen wurde, k\u00f6nnen wir es mit den folgenden Befehlen \u00fcber helm auf dem Cluster verteilen.<\/p>\n<pre class=\"hp hq hr hs ht le gv be\"><span id=\"c8ac\" class=\"ej lf ii dm lg b lh li lj s lk\" data-selectable-paragraph=\"\">helm repo hinzuf\u00fcgen mlflow-tracking <a class=\"bv ig\" href=\"https:\/\/artefactory-global.github.io\/mlflow-tracking-server\/\" target=\"_blank\" rel=\"noopener ugc nofollow\">https:\/\/artefactory-global.github.io\/mlflow-tracking-server\/<\/a><\/span><span id=\"f34c\" class=\"ej lf ii dm lg b lh ln lo lp lq lr lj s lk\" data-selectable-paragraph=\"\">helm install mlf-ts mlflow-tracking\/mlflow-tracking-server\n--setzen env.mlflowArtifactPath=$\n--set env.mlflowDBAddr=mlf-db-postgresql\n--set env.mlflowUser=postgres\n--set env.mlflowPass=mlflow\n-setzen env.mlflowDBName=mlflow_db\n--set env.mlflowDBPort=5432\n--set service.type=LoadBalancer\n--set image.repository=$\/mlflow-tracking-server\n--set image.tag=v1<\/span><\/pre>\n<p>Jetzt sollte Mlflow funktionieren und die Benutzeroberfl\u00e4che sollte \u00fcber die IP des Load Balancers zug\u00e4nglich sein. Wir k\u00f6nnen die zugewiesene IP \u00fcberpr\u00fcfen mit\u00a0<strong><em class=\"jz\">k<\/em><em>ubectl get Dienste<\/em><em class=\"jz\">.<\/em><\/strong><em class=\"jz\">A<\/em>Au\u00dferdem k\u00f6nnen wir die Bereitstellung debuggen, indem wir auf die Protokolle zugreifen<em class=\"jz\">\u00a0\u00fcber\u00a0<\/em><em><strong>kubectl beschreibt Pods<\/strong>.<\/em><br \/>Bislang sieht unsere derzeitige Architektur wie folgt aus:<\/p>\n<\/div><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27621%27%20height%3D%270%27%20viewBox%3D%270%200%20621%200%27%3E%3Crect%20width%3D%27621%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\/article-kais-4.png\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left hover-enable\" style=\"width: 621px; border-radius: 59% 41% 41% 59% \/ 29% 48% 52% 71%; overflow: hidden;\" width=\"621\" height=\"auto\" \/><div class=\"fusion-text fusion-text-15\"><p>Bitte beachten Sie, dass Load Balancer f\u00fcr jeden im Internet zug\u00e4nglich sind. Daher ist es wichtig, dass wir unsere Tracking-Instanz durch eine Authentifizierungsschicht absichern. Dies k\u00f6nnte mit dem\u00a0<a class=\"bv ig\" href=\"https:\/\/cloud.google.com\/iap\/docs\/enabling-kubernetes-howto\" target=\"_blank\" rel=\"noopener ugc nofollow\">identit\u00e4tsbewusster Proxy<\/a>\u00a0auf GCP, wird aber in diesem Artikel nicht behandelt.<\/p>\n<\/div><div class=\"fusion-title title fusion-title-13 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. Grundlegende Modellerstellung<\/h3><\/div><div class=\"fusion-text fusion-text-16\"><p>Nun, da unsere Infrastruktur und die Mlflow-Instanz bereit sind, k\u00f6nnen wir versuchen, ein einfaches ML-Modell auszuf\u00fchren und es zur sp\u00e4teren Verwendung in der Modellregistrierung zu speichern.<br \/>\nWir werden das Weinqualit\u00e4tsset data verwenden, das aus etwa 4900 Proben und 11 Merkmalen besteht, die die Eigenschaften des Weins widerspiegeln. Das Etikett reicht von 3 bis 9 und kann als Bewertung angesehen werden.<br \/>\nDies ist ein klassisches Beispiel, in dem wir ein Xgboost-Regressionsmodell trainieren und es zusammen mit seinen Parametern und Metriken speichern. Den vollst\u00e4ndigen Code finden Sie in diesem\u00a0<a class=\"bv ig\" href=\"https:\/\/github.com\/artefactory-global\/mlflow-serving-example\/blob\/main\/notebooks\/1.%20model_registry_example.ipynb\" target=\"_blank\" rel=\"noopener ugc nofollow\">Notizbuch<\/a>.<br \/>\nSie haben vielleicht schon bemerkt, dass die Integration von Mlflow sehr einfach ist und in dem folgenden Codeschnipsel zusammengefasst werden kann, der Folgendes aufruft\u00a0<em><strong>mlflow.start_run(), mlflow.log_param(), mlflow.log_metric() und mlflow.xgboost.log_model()<\/strong><\/em>um jeweils ein neues Experiment zu erstellen, die Trainingsparameter, die Bewertungsmetriken und das trainierte Modell selbst zu speichern.<\/p>\n<\/div>mit mlflow.start_run() als run:\n    \n      # mlflow-Sitzung starten\n      mlflow.log_param(\"max_depth\", max_depth)\n      mlflow.log_param(\"min_child_weight\", min_child_weight)\n      mlflow.log_param(\"sch\u00e4tzer\", sch\u00e4tzer)\n\n      # Modell erstellen und anpassen\n      model = xgb.XGBRegressor(\n               max_depth=max_depth,\n               min_child_weight=min_child_weight,\n               n_estimators=estimators\n               random_state=42)\n      model.fit(X_train, y_train)\n\n      # MLflow-Metriken\n      Vorhersagen = model.predict(X_test)\n      rmse = np.sqrt(mittlerer_quadratischer_Fehler(y_test, Vorhersagen))\n      mlflow.log_metric(\"rmse\", rmse)\n\n      # Log-Modell\n      mlflow.xgboost.log_model(model, \"xgboost-model\", registered_model_name = model_name)\n<div class=\"fusion-text fusion-text-17\"><p>Wenn Sie das mitgelieferte Notizbuch ausf\u00fchren, wird eine neue Zeile in der Tracking-Instanz-Schnittstelle hinzugef\u00fcgt, die dem neuen Experiment entspricht.<\/p>\n<\/div><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27642%27%20height%3D%270%27%20viewBox%3D%270%200%20642%200%27%3E%3Crect%20width%3D%27642%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\/article-kais5.png\" alt=\"Image\" class=\"lazyload artefact-elegant-image align-left hover-enable\" style=\"width: 642px; border-radius: 59% 41% 41% 59% \/ 29% 48% 52% 71%; overflow: hidden;\" width=\"642\" height=\"auto\" \/><div class=\"fusion-text fusion-text-18\"><p>Wenn wir schlie\u00dflich mit der Leistung des Modells zufrieden sind, k\u00f6nnen wir es aus der Tracking-Instanz laden und f\u00fcr die Inferenz in Python verwenden. Dies k\u00f6nnte auch mit dem zuvor geteilten Notebook geschehen. Beachten Sie, dass wir in diesem Beispiel das Modell \u00fcber die Lauf-ID geladen haben. Beachten Sie jedoch, dass Mlflow auch andere interessante M\u00f6glichkeiten bietet, Modelle \u00fcber Tags, Versionen oder Phasen zu identifizieren. Weitere Einzelheiten finden Sie in der Dokumentation zur Modellregistrierung\u00a0<a class=\"bv ig\" href=\"https:\/\/www.mlflow.org\/docs\/latest\/model-registry.html\" target=\"_blank\" rel=\"noopener ugc nofollow\">Hier<\/a>.<\/p>\n<\/div><div class=\"fusion-title title fusion-title-14 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;\">Fazit<\/h2><\/div><div class=\"fusion-text fusion-text-19\"><p>In diesem Artikel haben wir es geschafft, eine Mlflow-Tracking-Instanz f\u00fcr unsere data-Wissenschaftsexperimente einzurichten, und wir haben ein kurzes Beispiel durchgespielt, das zeigt, wie man ein Modell protokolliert und es f\u00fcr zuk\u00fcnftige Inferenzen in Python speichert. Im n\u00e4chsten Artikel dieser Serie werden wir lernen, wie wir dieses Modell als API bereitstellen k\u00f6nnen. Dies ist von gro\u00dfer Bedeutung, da es die Interaktion mit dem Modell und seine Integration in ein Produkt oder eine Anwendung erleichtert. Au\u00dferdem sorgt die Ausf\u00fchrung auf Kubernetes daf\u00fcr, dass es leicht skalierbar bleibt und verschiedene Laststufen bew\u00e4ltigen kann.<\/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-2 hover-type-none\"><img decoding=\"async\" width=\"72\" height=\"41\" title=\"mittel\" 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-15 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;\">Mittel Blog von Artefact.<\/h3><\/div><div class=\"fusion-text fusion-text-20\" style=\"--awb-content-alignment:center;\"><p>Dieser Artikel wurde urspr\u00fcnglich ver\u00f6ffentlicht auf <strong>Medium.com<\/strong>.<br \/>\nFolgen Sie uns auf unserem 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\" 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\">Unseren Artikel lesen<\/span><\/a><\/div><\/div><\/div><\/div><\/div><\/p>","protected":false},"excerpt":{"rendered":"<p>22. Oktober 2021<br \/>\nMLflow ist ein h\u00e4ufig verwendetes Tool f\u00fcr die Verfolgung von Experimenten zum maschinellen Lernen, die Versionierung von Modellen und das Serving. In unserem ersten Artikel der Serie \u201cML-Modelle in gro\u00dfem Umfang bereitstellen\u201d erkl\u00e4ren wir, wie Sie die Tracking-Instanz auf Kubernetes bereitstellen und sie zum Protokollieren von Experimenten und Speichern von Modellen verwenden.<\/p>","protected":false},"featured_media":65013,"parent":0,"template":"","meta":{"_acf_changed":false,"ep_exclude_from_search":false},"blog-category":[21939],"blog-language":[2991],"class_list":["post-63668","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog-category-medium","blog-language-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.artefact.com\/de\/wp-json\/wp\/v2\/blog\/63668","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.artefact.com\/de\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.artefact.com\/de\/wp-json\/wp\/v2\/types\/blog"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.artefact.com\/de\/wp-json\/wp\/v2\/media\/65013"}],"wp:attachment":[{"href":"https:\/\/www.artefact.com\/de\/wp-json\/wp\/v2\/media?parent=63668"}],"wp:term":[{"taxonomy":"blog-category","embeddable":true,"href":"https:\/\/www.artefact.com\/de\/wp-json\/wp\/v2\/blog-category?post=63668"},{"taxonomy":"blog-language","embeddable":true,"href":"https:\/\/www.artefact.com\/de\/wp-json\/wp\/v2\/blog-language?post=63668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}