Metodtips för djupinlärning i Azure Databricks
Den här artikeln innehåller tips för djupinlärning om Azure Databricks och information om inbyggda verktyg och bibliotek som är utformade för att optimera arbetsbelastningar för djupinlärning, till exempel följande:
- Delta - och Mosaikströmning för att läsa in data
- Optuna för parallellisering av träning
- Pandas UDF:er för slutsatsdragning
Databricks Mosaic AI tillhandahåller förbyggd djupinlärningsinfrastruktur med Databricks Runtime for Machine Learning, som innehåller de vanligaste djupinlärningsbiblioteken som TensorFlow, PyTorch och Keras. Den har också inbyggt, förkonfigurerat GPU-stöd, inklusive drivrutiner och stödbibliotek.
Databricks Runtime ML innehåller även alla funktioner i Azure Databricks-arbetsytan, till exempel skapande och hantering av kluster, biblioteks- och miljöhantering, kodhantering med Databricks Git-mappar, automationsstöd inklusive Databricks-jobb och API:er samt integrerat MLflow för modellutvecklingsspårning och modelldistribution och -servering.
Resurs- och miljöhantering
Azure Databricks hjälper dig att både anpassa din djupinlärningsmiljö och hålla miljön konsekvent mellan användare.
Anpassa utvecklingsmiljön
Med Databricks Runtime kan du anpassa utvecklingsmiljön på notebook-, kluster- och jobbnivå.
- Använd Python-bibliotek med notebook-omfattning eller R-bibliotek med notebook-omfattning för att använda en specifik uppsättning eller version av bibliotek utan att påverka andra klusteranvändare.
- Installera bibliotek på klusternivå för att standardisera versioner för ett team eller ett projekt.
- Konfigurera ett Azure Databricks-jobb för att säkerställa att en upprepad aktivitet körs i en konsekvent, oföränderlig miljö.
Använda klusterprinciper
Du kan skapa klusterprinciper som vägleder dataforskare till rätt val, till exempel att använda ett kluster med en nod för utveckling och använda ett autoskalningskluster för stora jobb.
Överväg A100 GPU:er för djupinlärningsarbetsbelastningar
A100 GPU:er är ett effektivt val för många djupinlärningsuppgifter, till exempel träning och justering av stora språkmodeller, bearbetning av naturligt språk, objektidentifiering och klassificering samt rekommendationsmotorer.
- Databricks stöder A100 GPU:er i alla moln. En fullständig lista över GPU-typer som stöds finns i Instanstyper som stöds.
- A100 GPU:er har vanligtvis begränsad tillgänglighet. Kontakta molnleverantören för resursallokering eller överväg att reservera kapacitet i förväg.
GPU-schemaläggning
Optimera GPU-schemaläggning för att maximera dina GPU:er för distribuerad djupinlärningsträning och slutsatsdragning. Se GPU-schemaläggning.
Metodtips för datainläsning
Molndatalagring är vanligtvis inte optimerat för I/O, vilket kan vara en utmaning för djupinlärningsmodeller som kräver stora datamängder. Databricks Runtime ML innehåller Delta Lake och Mosaic Streaming för att optimera dataflödet för djupinlärningsprogram.
Databricks rekommenderar att du använder Delta Lake-tabeller för datalagring. Delta Lake förenklar ETL och gör att du kan komma åt data effektivt. Särskilt för bilder hjälper Delta Lake till att optimera inmatning för både träning och slutsatsdragning. Referenslösningen för bildprogram är ett exempel på hur du optimerar ETL för bilder med Delta Lake.
Databricks rekommenderar Mosaic Streaming för datainläsning på PyTorch eller Mosaic Composer, särskilt när det gäller distribuerade arbetsbelastningar. De tillhandahållna API:erna StreamingDataset och StreamingDataLoader gör det enklare att träna stora datamängder samtidigt som du maximerar korrekthetsgarantier, prestanda, flexibilitet och användarvänlighet i en distribuerad miljö. Mer information finns i Läsa in data med mosaikströmning .
Metodtips för att träna djupinlärningsmodeller
Databricks rekommenderar att du använder Databricks Runtime for Machine Learning och MLflow-spårning och automatisk loggning för all modellträning.
Börja med ett kluster med en nod
Ett GPU-kluster med en enda nod (endast drivrutin) är vanligtvis snabbast och mest kostnadseffektivt för utveckling av djupinlärningsmodeller. En nod med 4 GPU:er kommer sannolikt att gå snabbare för djupinlärningsträning som 4 arbetsnoder med 1 GPU vardera. Det beror på att distribuerad utbildning medför nätverkskommunikationskostnader.
Ett kluster med en nod är ett bra alternativ under snabb, iterativ utveckling och för träningsmodeller på små till medelstora data. Om din datauppsättning är tillräckligt stor för att göra träningen långsam på en enda dator kan du överväga att flytta till multi-GPU och till och med distribuerad beräkning.
Använda TensorBoard- och klustermått för att övervaka träningsprocessen
TensorBoard är förinstallerat i Databricks Runtime ML. Du kan använda den i en notebook-fil eller på en separat flik. Mer information finns i TensorBoard .
Klustermått är tillgängliga i alla Databricks-körningar. Du kan undersöka nätverks-, processor- och minnesanvändningen för att inspektera flaskhalsar. Mer information finns i klustermått.
Optimera prestanda för djupinlärning
Du kan och bör använda tekniker för prestandaoptimering för djupinlärning på Databricks.
Tidig stoppning
Tidigt stopp övervakar värdet för ett mått som beräknas på valideringsuppsättningen och stoppar träningen när måttet slutar att förbättras. Detta är ett bättre tillvägagångssätt än att gissa på ett stort antal epoker att slutföra. Varje djupinlärningsbibliotek tillhandahåller ett internt API för tidig stoppning. Se till exempel API:er för EarlyStopping-återanrop för TensorFlow/Keras och PyTorch Lightning. Ett exempel på en notebook-fil finns i TensorFlow Keras-exempelanteckningsboken.
Justering av batchstorlek
Justering av batchstorlek hjälper till att optimera GPU-användningen. Om batchstorleken är för liten kan inte beräkningarna fullt ut använda GPU-funktionerna. Du kan använda klustermått för att visa GPU-mått.
Justera batchstorleken tillsammans med inlärningsfrekvensen. En bra tumregel är att när du ökar batchstorleken med n ökar du inlärningshastigheten med sqrt(n). När du justerar manuellt kan du prova att ändra batchstorleken med en faktor 2 eller 0,5. Fortsätt sedan justera för att optimera prestanda, antingen manuellt eller genom att testa en mängd olika hyperparametrar med hjälp av ett automatiserat verktyg som Optuna.
Överföra utbildning
Med överföringsinlärning börjar du med en tidigare tränad modell och ändrar den efter behov för ditt program. Överföringsinlärning kan avsevärt minska den tid som krävs för att träna och finjustera en ny modell. Mer information och ett exempel finns i Funktionalisering för överföringsinlärning .
Flytta till distribuerad utbildning
Databricks Runtime ML innehåller TorchDistributor, DeepSpeed och Ray för att underlätta övergången från en nod till distribuerad träning.
TorchDistributor
TorchDistributor är en modul med öppen källkod i PySpark som underlättar distribuerad träning med PyTorch i Spark-kluster, som gör att du kan starta PyTorch-träningsjobb som Spark-jobb. Se Distribuerad träning med TorchDistributor.
Optuna
Optuna tillhandahåller anpassningsbar hyperparameterjustering för maskininlärning.
Metodtips för slutsatsdragning
Det här avsnittet innehåller allmänna tips om hur du använder modeller för slutsatsdragning med Azure Databricks.
För att minimera kostnaderna bör du överväga både processorer och slutsatsdragningsoptimerade GPU:er, till exempel NC-T4_v3-serien. Det finns ingen tydlig rekommendation eftersom det bästa valet beror på modellstorlek, datadimensioner och andra variabler.
Använd MLflow för att förenkla distribution och modellhantering. MLflow kan logga valfri djupinlärningsmodell, inklusive anpassad förbearbetning och efterbearbetningslogik. Modeller i Unity-katalogen eller modeller som registrerats i arbetsytans modellregister kan distribueras för batch-, direktuppspelnings- eller online-slutsatsdragning.
Online-servering
Det bästa alternativet för servering med låg svarstid är onlineservering bakom ett REST API. Databricks tillhandahåller modellservering för online-slutsatsdragning. Modellservern tillhandahåller ett enhetligt gränssnitt för att distribuera, styra och fråga AI-modeller och har stöd för följande:
- Anpassade modeller. Det här är Python-modeller som paketeras i MLflow-format. Exempel är scikit-learn, XGBoost, PyTorch och Hugging Ansiktstransformatormodeller.
- Toppmoderna öppna modeller som görs tillgängliga av Foundation Model-API:er. Dessa modeller är utvalda grundmodellarkitekturer som stöder optimerad slutsatsdragning. Basmodeller som Llama-2-70B-chat, BGE-Large och Mistral-7B är till exempel tillgängliga för omedelbar användning med prissättning för betala per token . För arbetsbelastningar som kräver prestandagarantier och finjusterade modellvarianter kan du distribuera dem med etablerat dataflöde.
- Externa modeller. Det här är modeller som finns utanför Databricks. Till exempel generativa AI-modeller som OpenAI:s GPT-4, Anthropics Claude och andra. Slutpunkter som hanterar dessa modeller kan styras centralt och kunderna kan upprätta hastighetsbegränsningar och åtkomstkontroller för dem.
Alternativt tillhandahåller MLflow API:er för distribution till olika hanterade tjänster för online-slutsatsdragning, samt API:er för att skapa Docker-containrar för anpassade serveringslösningar.
Andra vanliga hanterade tjänster för online-slutsatsdragning är:
Slutsatsdragning för batch- och strömning
Batch- och strömningsbedömning stöder poängsättning med högt dataflöde och låg kostnad vid svarstider så låga som minuter. Mer information finns i Använda MLflow för modellinferens.
- Om du förväntar dig att komma åt data för slutsatsdragning mer än en gång kan du skapa ett förbearbetningsjobb för att ETL-data till en Delta Lake-tabell innan du kör slutsatsdragningsjobbet. På så sätt sprids kostnaden för att mata in och förbereda data över flera läsningar av data. Genom att separera förbearbetning från slutsatsdragning kan du också välja olika maskinvara för varje jobb för att optimera kostnader och prestanda. Du kan till exempel använda processorer för ETL och GPU:er för slutsatsdragning.
- Använd Spark Pandas UDF:er för att skala batch- och strömningsinferens i ett kluster.
- När du loggar en modell från Azure Databricks tillhandahåller MLflow automatiskt slutsatsdragningskod för att tillämpa modellen som en Pandas UDF.
- Du kan också optimera din slutsatsdragningspipeline ytterligare, särskilt för stora djupinlärningsmodeller. Ett exempel finns i referenslösningen för avbildnings-ETL .