Dela via


Programdesign för AI-arbetsbelastningar i Azure

Det finns många alternativ att tänka på när du skapar ett program som har AI-funktioner. Dina unika funktionella och icke-funktionella krav, till exempel om användningsfallet är traditionell maskininlärning, generativ, deterministisk eller en kombination av AI-typer, hjälper dig att begränsa beslut på hög nivå om din design. Du kommer att överväga de här alternativen när du går från designområden på hög nivå till designområden på lägre nivå.

Som beskrivs i artikeln Kom igång är om du vill skapa en egen modell eller använda en fördefinierad modell ett av de första viktiga besluten att fatta. Tänk på följande när du använder en fördefinierad modell:

  • Katalogkällor. Utforska lagringsplatser som Hugging Face Model Hub, TensorFlow Hub och Azure AI Foundry-portalens modellkatalog för att hitta förtränade modeller. Dessa plattformar tillhandahåller en omfattande katalog med modeller för olika uppgifter.

  • Licensiering. Se till att modellens licensvillkor passar dina mål för säkerhet, efterlevnad och program, särskilt om du planerar att distribuera programmet eller integrera det med andra tjänster.

  • Viktiga komponenter. Titta på modellens arkitektur, träningsdata, prestanda och licensiering för att avgöra om den är finjusterad för din uppgift eller domän.

Vägledning om hur du väljer en värdplattform finns i Överväganden för modellvärd- och inferensplattformen.

Den här artikeln beskriver vanliga designområden och faktorer att tänka på när du fattar beslut om teknik och tillvägagångssätt.

Rekommendationer

I följande tabell sammanfattas rekommendationerna i den här artikeln.

Rekommendation beskrivning
Prioritera lösningar utanför hyllan. När det är praktiskt använder du PaaS-lösningar (Plattform som en tjänst) för att hantera arbetsbelastningsfunktioner. Använd fördefinierade och förtränade modeller där det är möjligt för att minimera drift- och utvecklingsbelastningen för dina arbetsbelastnings- och driftteam.
Abstrakta funktioner bort från klienten. Håll klienten så tunn som möjligt genom att utforma backend-tjänster för att hantera övergripande problem som hastighetsbegränsning och redundansåtgärder.
Blockera åtkomst till datalager. Kod i AI-systemet bör inte komma åt dina datalager direkt. Dirigera alla databegäranden via ett API-lager. API:erna bör skapas specifikt för den uppgift som krävs.
Isolera dina modeller. Precis som med datalagren använder du ett API-lager för att fungera som en gateway för begäranden till modellen. Vissa PaaS-lösningar som Azure OpenAI Service och Azure Machine Learning använder SDK:er för detta ändamål. Många verktyg, till exempel promptflöde, innehåller inbyggt stöd för att sprida API:er till tjänsten.
Utforma komponenter som ska kunna distribueras oberoende av varandra. AI-modeller, datapipelines, frontend-komponenter och mikrotjänster som förbearbetning av data, extrahering av funktioner och slutsatsdragning bör kunna distribueras oberoende för att optimera flexibiliteten, skalbarheten och driftsbarheten för din arbetsbelastning.

Containerize-komponenter

För att säkerställa att dina oberoende distribuerade komponenter är helt fristående och för att effektivisera dina distributioner bör du överväga containerisering som en del av din designstrategi. Följande komponenter ska vara containerbaserade:

  • Microservices. Enskilda mikrotjänster som hanterar specifika funktioner i programmet, till exempel databehandling, modellinferens och användarautentisering, ska vara containerbaserade. Den här metoden möjliggör oberoende distribution och skalning och underlättar effektivare uppdateringar och underhåll.

  • AI-modeller. Containerisera AI-modeller för att säkerställa att alla beroenden, bibliotek och konfigurationer paketeras tillsammans. Den här metoden isolerar modellmiljön från värdsystemet för att förhindra versionskonflikter och säkerställa konsekvent beteende i olika distributionsmiljöer.

  • Databearbetningsprocessflöden. Alla databearbetningsuppgifter som föregår eller följer modellinferens, till exempel datarensning, transformering och extrahering av funktioner, bör containeriseras. Den här metoden förbättrar reproducerbarheten och förenklar hanteringen av beroenden.

  • Infrastrukturtjänster. Tjänster som tillhandahåller infrastrukturstöd, till exempel databaser och cachelagringslager, kan också dra nytta av containerisering. Containerisering av dessa tjänster hjälper till att upprätthålla versionskonsekvens och underlättar skalning och hantering av dessa komponenter.

Samlokalisera AI-komponenter med andra arbetsbelastningskomponenter

Det finns flera bra skäl att samplacera dina AI-komponenter med andra arbetsbelastningskomponenter, men det finns kompromisser som är kopplade till detta. Du kan vilja samplacera komponenter av följande skäl:

  • Känslighet för latens. Samlokalisera AI-komponenter med andra tjänster, till exempel API-värdtjänster, när det är viktigt med låg svarstid. Om du till exempel behöver slutsatsdragning i realtid för att förbättra användarupplevelsen kan det minimera den tid det tar att hämta resultat genom att placera AI-modeller nära API:et.

  • Dataproximitet. När AI-modeller kräver frekvent åtkomst till specifika datauppsättningar, till exempel ett sökindex, kan samlokalisering av dessa komponenter förbättra prestanda och minska kostnaderna för dataöverföring för att påskynda bearbetning och slutsatsdragning.

  • Resursanvändning. Om specifika komponenter har kompletterande resursbehov, till exempel processor och minne, kan samlokalisering av dem optimera resursanvändningen. En modell som kräver betydande beräkning kan till exempel dela resurser med en tjänst som har lägre krav på samma gång.

kompromiss. Det finns kompromisser att tänka på när det handlar om att samordna komponenterna. Du kan förlora möjligheten att distribuera eller skala komponenter separat. Du kan också öka risken för fel genom att öka den potentiella explosionsradien för incidenter.

Utvärdera användningen av orkestratorer i generativa AI-lösningar

En orkestrerare hanterar ett arbetsflöde genom att samordna kommunikationen mellan de olika komponenterna i AI-lösningen som annars skulle vara svår att hantera i komplexa arbetsbelastningar. Vi rekommenderar att du skapar en orkestrerare i din design om din arbetsbelastning har någon av följande egenskaper:

  • Komplexa arbetsflöden. Arbetsflödet omfattar flera steg, till exempel förbearbetning, modelllänkning eller efterbearbetning.

  • villkorlig logik. Beslut, som att dirigera resultat till olika modeller, måste fattas dynamiskt baserat på modellutdata.

  • skalning och resurshantering. Du måste hantera resursallokering för högvolymprogram med hjälp av modellskalning som baseras på efterfrågan.

  • Tillståndshantering. Du måste hantera tillståndet och minnet för användarinteraktioner.

  • Datahämtning. Du måste kunna hämta förhöjda data från indexet.

Överväganden för att använda flera modeller

När din arbetsbelastning använder flera modeller är en orkestrerare viktig. Orchestrator dirigerar data och begäranden till lämplig modell baserat på användningsfallet. Planera för dataflöde mellan modeller, så att utdata från en modell kan fungera som indata för en annan. Planering kan omfatta datatransformering eller berikande processer.

Orkestrering och agenter

För generativa AI-arbetsbelastningar bör du överväga att använda en agentbaserad, ibland kallad agentisk, metod för din design för att lägga till utökningsbarhet i orkestreringen. Agenter tillhandahåller kontextbundna funktioner. De delar många egenskaper med mikrotjänster och utför uppgifter tillsammans med en orkestrerare. Orchestratorn kan tillgängliggöra uppgifter till en pool av agenter, eller agenter kan registrera kapaciteter med orchestratorn. Båda metoderna gör det möjligt för orkestratorn att dynamiskt avgöra hur frågan ska delas upp och dirigeras mellan agenterna.

Agentbaserade metoder är idealiska när du har ett gemensamt användargränssnitt som har flera, utvecklande funktioner som kan anslutas till upplevelsen för att lägga till fler förmågor och förankra data i flödet över tid.

För komplexa arbetsbelastningar som har många agenter är det mer effektivt att tillåta agenter att samarbeta dynamiskt i stället för att använda en orkestrerare för att dela upp uppgifter och tilldela dem.

Kommunikationen mellan orkestratorn och agenterna bör följa ett mönster för ämneskö, där agenter är prenumeranter på ett ämne och dirigeraren skickar ut uppgifter via en kö.

Att använda en agentisk metod fungerar bäst med ett orkestreringsmönster snarare än ett koreografimönster.

Mer information finns i Överväganden för orkestreringsplattformen.

Utvärdera användningen av API-gatewayer

API-gatewayer som Azure API Management abstraherar funktioner från API:er, vilket frikopplar beroenden mellan tjänsten som gör begäran och API:et. API-gatewayer ger följande fördelar för AI-arbetsbelastningar:

  • Flera mikrotjänster. Gatewayer hjälper dig att hantera flera AI-modellslutpunkter när du behöver tillämpa konsekventa principer, till exempel hastighetsbegränsning och autentisering.

  • Trafikhantering. Gatewayer hjälper dig att hantera appar med hög trafik effektivt genom att hantera begäranden, cachelagra svar och distribuera belastningar.

  • Security. Gatewayer ger centraliserad åtkomstkontroll, loggning och skydd mot hot för API:erna bakom gatewayen.

Använda designmönster för AI-program

Flera vanliga designmönster har etablerats i branschen för AI-program. Du kan använda dem för att förenkla din design och implementering. De här designmönstren omfattar:

  • Modellensemble. Det här designmönstret omfattar att kombinera förutsägelser från flera modeller för att förbättra noggrannheten och robustheten genom att minimera svagheterna i enskilda modeller.

  • Arkitektur för mikrotjänster. Genom att dela upp komponenter i oberoende distributionsbara tjänster kan du förbättra skalbarheten och underhållsbarheten. Det gör att team kan arbeta med olika delar av programmet samtidigt.

  • händelsedriven arkitektur. Genom att använda händelser för att utlösa åtgärder kan frikopplade komponenter och realtidsbearbetning göra systemet mer dynamiskt och anpassningsbart för att ändra data.

RAG-mönster och segmenteringsstrategier

Mönstret Retrieval-Augmented Generation (RAG) kombinerar generativa modeller med hämtningssystem, vilket gör det möjligt för modellen att komma åt externa kunskapskällor för bättre kontext och noggrannhet. Se serien med artiklar Design och utveckla en RAG-lösning för djupgående vägledning om detta mönster. Det finns två RAG-metoder:

  • Just-in-time. Den här metoden hämtar relevant information dynamiskt vid tidpunkten för en begäran för att säkerställa att de senaste data alltid används. Det är fördelaktigt i scenarier som kräver realtidskontext, men det kan medföra svarstid.

  • förberäknad (cachelagrad). Den här metoden omfattar cachelagring av hämtningsresultat för att minska svarstiderna genom att hantera förberäknade data. Den är lämplig för scenarier med hög efterfrågan där konsekventa data kan lagras. Data kanske inte återspeglar den senaste informationen, vilket kan leda till relevansproblem.

När du använder ett RAG-mönster är en väldefinierad segmenteringsstrategi avgörande för att optimera arbetsbelastningens prestandaeffektivitet. Börja med vägledningen som tillhandahålls i Design och utveckla en RAG-lösning-serien. Här följer några ytterligare rekommendationer att tänka på:

  • Implementera en dynamisk segmenteringsstrategi som justerar segmentstorlekar baserat på datatyp, frågekomplexitet och användarkrav. Detta kan förbättra hämtningseffektiviteten och konservering av kontexten.

  • Införliva feedbackslingor för att förfina segmenteringsstrategier baserat på prestandadata.

  • Bevara data härstamning för segment genom att underhålla metadata och unika identifierare som länkar tillbaka till jordningskällan. Tydlig dokumentation av härkomst hjälper till att säkerställa att användarna förstår datans ursprung, dess transformationer och hur de bidrar till resultatet.

När designmönster ska användas

Överväg att använda dessa designmönster när ditt användningsfall uppfyller det villkor som beskrivs:

  • Komplexa arbetsflöden. När du har komplexa arbetsflöden eller interaktioner mellan flera AI-modeller kan mönster som RAG eller mikrotjänster hjälpa till att hantera komplexitet och säkerställa tydlig kommunikation mellan komponenter.

  • skalbarhetskrav. Om efterfrågan på ditt program varierar kan ett mönster som mikrotjänster göra det möjligt för enskilda komponenter att skala separat för att hantera varierande belastningar utan att påverka den övergripande systemprestandan.

  • datadrivna applikationer. Om ditt program kräver omfattande datahantering kan en händelsedriven arkitektur ge svarstider i realtid och effektiv databehandling.

Kommentar

Mindre program eller POC:er drar vanligtvis inte nytta av dessa designmönster. Dessa program bör utformas för enkelhetens skull. Om du har begränsningar för resurser (budget, tid eller personalstyrka) är det på samma sätt en bättre metod att använda en enkel design som kan omstruktureras senare än att använda ett komplext designmönster.

Välj rätt ramverk och bibliotek

Valet av ramverk och bibliotek är nära sammanflätat med programdesign. De påverkar prestanda, skalbarhet och underhåll. Designkrav kan dock begränsa dina ramverksalternativ. Användning av semantisk kernel-SDK uppmuntrar till exempel ofta en mikrotjänstbaserad design där varje agent eller funktion kapslas in i sin egen tjänst. Tänk på dessa faktorer när du väljer ramverk och bibliotek:

  • Programkrav. Kraven för programmet, till exempel bearbetning i realtid eller batchbearbetning, kan begränsa valet av ramverk. Om programmet till exempel kräver låg svarstid kan du behöva använda ett ramverk som har asynkrona funktioner.

  • Integration kräver. Designen kan kräva specifika integreringar med andra system eller tjänster. Om ett ramverk inte stöder de protokoll eller dataformat som krävs kan du behöva ompröva designen eller välja ett annat ramverk.

  • Teamexpertis. Utvecklingsteamets kompetensuppsättning kan begränsa ramverksalternativen. En design som förlitar sig på ett mindre välbekant ramverk kan leda till ökad utvecklingstid och komplexitet, så du kanske vill använda ett mer välbekant verktyg.

Utforma en strategi för identiteter, auktorisering och åtkomst

Generellt sett bör du närma dig identitet, auktorisering och åtkomst på samma sätt som när du normalt utformar program. Du bör använda en identitetsprovider, till exempel Microsoft Entra-ID, för att hantera dessa områden så mycket som möjligt. Många AI-program har dock unika utmaningar som kräver särskilt övervägande. Ibland är det svårt eller till och med omöjligt att bevara åtkomstkontrollistor (ACL: er) via systemet utan ny utveckling.

Se Guide för att utforma en säker multitenant RAG inferenslösning för att lära dig hur du lägger till metadata för säkerhetstrimning i dokument och segment. Den här trimning kan baseras på säkerhetsgrupper eller liknande organisationskonstruktioner.

Överväg icke-funktionella krav

Din arbetsbelastning kan ha icke-funktionella krav som utgör utmaningar på grund av faktorer som är inneboende i AI-tekniker. Här följer några vanliga icke-funktionella krav och deras utmaningar:

  • Svarstid för modellinferens/tidsgränser. AI-program kräver ofta realtids- eller nästan realtidssvar. Att utforma för låg latens är avgörande. Det handlar om att optimera modellarkitektur, databearbetningspipelines och maskinvaruresurser. Det är också viktigt att implementera cachelagringsstrategier och säkerställa effektiv modellinläsning för att undvika timeouter och ge snabba svar.

  • Begränsningar i token- eller begäranflöde. Många AI-tjänster begränsar antalet token eller dataflödet för begäranden, särskilt med molnbaserade modeller. Design för dessa begränsningar kräver noggrann hantering av indatastorlekar, batchbearbetning av begäranden vid behov och potentiellt implementering av hastighetsbegränsnings- eller kömekanismer för att hantera användarnas förväntningar och förhindra avbrott i tjänsten.

  • scenarier för kostnader och återbetalningar. Design för kostnadstransparens innebär att implementera funktioner för användningsspårning och rapportering som underlättar återbetalningsmodeller. Dessa funktioner gör det möjligt för organisationer att allokera kostnader korrekt mellan avdelningar. Återbetalningshantering hanteras vanligtvis av en API-gateway, till exempel Azure API Management-.

Nästa steg