Batchbedömning med R-modeller för prognostisering av försäljning

Azure Batch
Azure Blob Storage
Azure Container Instances
Azure Logic Apps
Azure Machine Learning

Den här referensarkitekturen visar hur du utför batchbedömning med R-modeller med hjälp av Azure Batch. Azure Batch fungerar bra med parallella arbetsbelastningar och innehåller jobbschemaläggning och beräkningshantering. Batchinferens (bedömning) används ofta för att segmentera kunder, prognostisera försäljning, förutsäga kundbeteenden, förutsäga underhåll eller förbättra cybersäkerheten.

Architecture diagram showing batch scoring with R models on Azure.

Ladda ned en Visio-fil med den här arkitekturen.

Workflow

Den här arkitekturen består av följande komponenter.

Azure Batch kör prognosgenereringsjobb parallellt på ett kluster med virtuella datorer. Förutsägelser görs med hjälp av förtränade maskininlärningsmodeller som implementeras i R. Azure Batch kan automatiskt skala antalet virtuella datorer baserat på antalet jobb som skickas till klustret. På varje nod körs ett R-skript i en Docker-container för att poängsätta data och generera prognoser.

Azure Blob Storage lagrar indata, förtränade maskininlärningsmodeller och prognosresultat. Den ger kostnadseffektiv lagring för den prestanda som krävs för den här arbetsbelastningen.

Azure Container Instances tillhandahåller serverlös beräkning på begäran. I det här fallet distribueras en containerinstans enligt ett schema för att utlösa Batch-jobben som genererar prognoserna. Batch-jobben utlöses från ett R-skript med hjälp av doAzureParallel-paketet . Containerinstansen stängs automatiskt av när jobben har slutförts.

Azure Logic Apps utlöser hela arbetsflödet genom att distribuera containerinstanserna enligt ett schema. Med en Azure Container Instances-anslutningsapp i Logic Apps kan en instans distribueras på en rad utlösarhändelser.

Komponenter

Lösningsdetaljer

Även om följande scenario baseras på försäljningsprognoser för detaljhandeln, kan dess arkitektur generaliseras för alla scenarion som kräver generering av förutsägelser i större skala med hjälp av R-modeller. En referensimplementering för den här arkitekturen finns på GitHub.

Potentiella användningsfall

En stormarknadskedja måste prognostisera försäljningen av produkter under det kommande kvartalet. Prognosen gör det möjligt för företaget att hantera sin leveranskedja bättre och se till att det kan möta efterfrågan på produkter i var och en av sina butiker. Företaget uppdaterar sina prognoser varje vecka när nya försäljningsdata från föregående vecka blir tillgängliga och produktmarknadsföringsstrategin för nästa kvartal anges. Kvantilprognoser genereras för att uppskatta osäkerheten i de enskilda försäljningsprognoserna.

Bearbetningen omfattar följande steg:

  1. En Azure Logic App utlöser prognosgenereringsprocessen en gång i veckan.

  2. Logikappen startar en Azure Container Instance som kör Docker-containern för schemaläggaren, vilket utlöser bedömningsjobben i Batch-klustret.

  3. Bedömningsjobb körs parallellt mellan noderna i Batch-klustret. Varje nod:

    1. Hämtar Docker-avbildningen för arbetare och startar en container.

    2. Läser indata och förtränade R-modeller från Azure Blob Storage.

    3. Poängsätter data för att skapa prognoser.

    4. Skriver prognosresultat till bloblagring.

Följande bild visar den prognostiserade försäljningen för fyra produkter (SKU:er) i en butik. Den svarta linjen är försäljningshistoriken, den streckade linjen är medianprognosen (q50), det rosa bandet representerar de 25:e och 75:e percentilerna och det blå bandet representerar de 50:e och 95:e percentilerna.

Sales forecasts from batch scoring with R models.

Överväganden

Dessa överväganden implementerar grundpelarna i Azure Well-Architected Framework, som är en uppsättning vägledande grundsatser som kan användas för att förbättra kvaliteten på en arbetsbelastning. Mer information finns i Microsoft Azure Well-Architected Framework.

Prestanda

Containerbaserad distribution

Med den här arkitekturen körs alla R-skript i Docker-containrar . Användning av containrar säkerställer att skripten körs i en konsekvent miljö varje gång, med samma R-version och paketversioner. Separata Docker-avbildningar används för schemaläggaren och arbetscontainrarna, eftersom var och en har olika uppsättning R-paketberoenden.

Azure Container Instances tillhandahåller en serverlös miljö för att köra scheduler-containern. Scheduler-containern kör ett R-skript som utlöser de enskilda bedömningsjobb som körs i ett Azure Batch-kluster.

Varje nod i Batch-klustret kör arbetscontainern, som kör bedömningsskriptet.

Parallellisera arbetsbelastningen

När batchbedömningsdata med R-modeller bör du överväga hur arbetsbelastningen ska parallelliseras. Indata måste partitioneras så att bedömningsåtgärden kan distribueras över klusternoderna. Prova olika metoder för att identifiera det bästa valet för att distribuera din arbetsbelastning. Från fall till fall bör du överväga:

  • Hur mycket data som kan läsas in och bearbetas i minnet på en enskild nod.
  • Omkostnaderna för att starta varje batchjobb.
  • Omkostnaderna för att läsa in R-modellerna.

I det scenario som används för det här exemplet är modellobjekten stora och det tar bara några sekunder att generera en prognos för enskilda produkter. Därför kan du gruppera produkterna och köra ett enda Batch-jobb per nod. En loop i varje jobb genererar prognoser för produkterna sekventiellt. Den här metoden är det mest effektiva sättet att parallellisera den här arbetsbelastningen. Det förhindrar att många mindre Batch-jobb startas och att R-modellerna läses in upprepade gånger.

En alternativ metod är att utlösa ett Batch-jobb per produkt. Azure Batch bildar automatiskt en kö med jobb och skickar dem för att köras i klustret när noder blir tillgängliga. Använd automatisk skalning för att justera antalet noder i klustret, beroende på antalet jobb. Den här metoden är användbar om det tar relativt lång tid att slutföra varje bedömningsåtgärd, vilket motiverar omkostnaderna för att starta jobben och läsa in modellobjekten igen. Den här metoden är också enklare att implementera och ger dig flexibiliteten att använda automatisk skalning, vilket är viktigt om storleken på den totala arbetsbelastningen inte är känd i förväg.

Övervaka Azure Batch-jobb

Övervaka och avsluta Batch-jobb från fönstret Jobb i Batch-kontot i Azure-portalen. Övervaka batchklustret, inklusive tillståndet för enskilda noder, från fönstret Pooler .

Logga med doAzureParallel

doAzureParallel-paketet samlar automatiskt in loggar för alla stdout/stderr för varje jobb som skickas i Azure Batch. Dessa loggar finns i lagringskontot som skapades vid installationen. Om du vill visa dem använder du ett lagringsnavigeringsverktyg som Azure Storage Explorer eller Azure-portalen.

Om du snabbt vill felsöka Batch-jobb under utveckling kan du visa loggarna i din lokala R-session. Mer information finns i Avsnittet om hur du konfigurerar och skickar träningskörningar.

Kostnadsoptimering

Kostnadsoptimering handlar om att titta på sätt att minska onödiga utgifter och förbättra drifteffektiviteten. Mer information finns i Översikt över kostnadsoptimeringspelare.

De beräkningsresurser som används i den här referensarkitekturen är de mest kostsamma komponenterna. I det här scenariot skapas ett kluster med fast storlek när jobbet utlöses och stängs sedan av när jobbet har slutförts. Kostnaden uppstår bara när klusternoderna startas, körs eller stängs av. Den här metoden är lämplig för ett scenario där de beräkningsresurser som krävs för att generera prognoserna förblir relativt konstanta från jobb till jobb.

I scenarier där mängden beräkning som krävs för att slutföra jobbet inte är känd i förväg kan det vara mer lämpligt att använda automatisk skalning. Med den här metoden skalas klustrets storlek upp eller ned beroende på jobbets storlek. Azure Batch stöder ett antal autoskalningsformler som du kan ange när du definierar klustret med hjälp av doAzureParallel-API:et.

I vissa scenarier kan tiden mellan jobb vara för kort för att stänga av och starta klustret. I dessa fall kan du se till att klustret körs mellan jobb om det är lämpligt.

Azure Batch och doAzureParallel stöder användning av lågprioriterade virtuella datorer. De här virtuella datorerna har en betydande rabatt men riskerar att tillföras andra arbetsbelastningar med högre prioritet. Därför rekommenderas inte användning av lågprioriterade virtuella datorer för kritiska produktionsarbetsbelastningar. De är dock användbara för experimentella arbetsbelastningar eller utvecklingsarbetsbelastningar.

Distribuera det här scenariot

Om du vill distribuera den här referensarkitekturen följer du stegen som beskrivs i GitHub-lagringsplatsen .

Deltagare

Den här artikeln underhålls av Microsoft. Det har ursprungligen skrivits av följande medarbetare.

Huvudförfattare:

Om du vill se icke-offentliga LinkedIn-profiler loggar du in på LinkedIn.

Nästa steg