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:

Databricks Machine Learning 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ä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.

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 Petastorm 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.

Petastorm tillhandahåller API:er som gör att du kan förbereda data i parquet-format för användning av TensorFlow, Keras eller PyTorch. SparkConverter-API:et tillhandahåller Spark DataFrame-integrering. Petastorm tillhandahåller också datasharding för distribuerad bearbetning. Mer information finns i Läsa in data med Petastorm .

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 Hyperopt.

Ö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 HorovodRunner, spark-tensorflow-distributor, TorchDistributor och Hyperopt för att underlätta övergången från en nod till distribuerad träning.

HorovodRunner

Horovod är ett projekt med öppen källkod som skalar djupinlärningsträning till multi-GPU eller distribuerad beräkning. HorovodRunner, som skapats av Databricks och ingår i Databricks Runtime ML, är en Horovod-omslutning som ger Spark-kompatibilitet. Med API:et kan du skala kod med en nod med minimala ändringar. HorovodRunner fungerar med TensorFlow, Keras och PyTorch.

spark-tensorflow-distributor

spark-tensorflow-distributor är ett internt paket med öppen källkod i TensorFlow för distribuerad träning med TensorFlow i Spark-kluster. Se exempelanteckningsboken.

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.

Hyperopt

Hyperopt tillhandahåller anpassningsbar hyperparameterjustering för maskininlärning. Med klassen SparkTrials kan du iterativt finjustera parametrar för djupinlärningsmodeller parallellt över ett kluster.

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 grundmodeller 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 .