Best practices voor deep learning op Azure Databricks
Dit artikel bevat tips voor deep learning in Azure Databricks en informatie over ingebouwde hulpprogramma's en bibliotheken die zijn ontworpen voor het optimaliseren van deep learning-workloads, zoals de volgende:
- Delta - en Mozaïekstreaming om gegevens te laden
- Optuna voor het parallelliseren van training
- Pandas UDFs voor inferentie
Databricks Mosaic AI biedt vooraf gebouwde Deep Learning-infrastructuur met Databricks Runtime voor Machine Learning, waaronder de meest voorkomende Deep Learning-bibliotheken zoals TensorFlow, PyTorch en Keras. Het heeft ook ingebouwde, vooraf geconfigureerde GPU-ondersteuning, waaronder stuurprogramma's en ondersteunende bibliotheken.
Databricks Runtime ML bevat ook alle mogelijkheden van de Azure Databricks-werkruimte, zoals het maken en beheren van clusters, bibliotheek- en omgevingsbeheer, codebeheer met Databricks Git-mappen, automatiseringsondersteuning, waaronder Databricks-taken en API's, en geïntegreerde MLflow voor het bijhouden en implementeren van modellen en het leveren van modellen.
Resource- en omgevingsbeheer
Met Azure Databricks kunt u uw Deep Learning-omgeving aanpassen en de omgeving consistent houden voor alle gebruikers.
De ontwikkelomgeving aanpassen
Met Databricks Runtime kunt u uw ontwikkelomgeving aanpassen op notebook-, cluster- en taakniveaus.
- Gebruik notebook-scoped Python-bibliotheken of notebook-scoped R-bibliotheken om een specifieke set of versie van bibliotheken te gebruiken zonder andere gebruikers van de cluster te beïnvloeden.
- Installeer bibliotheken op clusterniveau om versies voor een team of een project te standaardiseren.
- Stel een Azure Databricks--taak in om ervoor te zorgen dat een herhaalde taak wordt uitgevoerd in een consistente, onveranderlijke omgeving.
Clusterbeleid gebruiken
U kunt clusterbeleid maken om gegevenswetenschappers naar de juiste keuzes te leiden, zoals het gebruik van een cluster met één knooppunt voor ontwikkeling en het gebruik van een cluster voor automatisch schalen voor grote taken.
Overweeg A100 GPU's voor Deep Learning-workloads
A100 GPU's zijn een efficiënte keuze voor veel deep learning-taken, zoals het trainen en afstemmen van grote taalmodellen, verwerking van natuurlijke taal, objectdetectie en classificatie en aanbevelingsengines.
- Databricks ondersteunt A100 GPU's op alle clouds. Zie Ondersteunde exemplaartypenvoor de volledige lijst met ondersteunde GPU-typen.
- A100 GPU's hebben meestal beperkte beschikbaarheid. Neem contact op met uw cloudprovider voor resourcetoewijzing of overweeg om vooraf capaciteit te reserveren.
GPU-toewijzing
Optimaliseer GPU-planning om het beste uit uw GPU's te halen voor gedistribueerde trainingen in deep learning en inferentie. See GPU scheduling.
Best practices voor het laden van gegevens
Cloudgegevensopslag is doorgaans niet geoptimaliseerd voor I/O, wat een uitdaging kan zijn voor deep learning-modellen waarvoor grote gegevenssets nodig zijn. Databricks Runtime ML bevat Delta Lake en Mosaic Streaming- om de gegevensdoorvoer voor deep learning-toepassingen te optimaliseren.
Databricks raadt het gebruik van Delta Lake-tabellen aan voor gegevensopslag. Delta Lake vereenvoudigt ETL en biedt u efficiënt toegang tot gegevens. Met name voor afbeeldingen helpt Delta Lake bij het optimaliseren van opname, zowel voor training als inferentie. De referentieoplossing voor afbeeldingstoepassingen biedt een voorbeeld van het optimaliseren van ETL voor afbeeldingen met Delta Lake.
Databricks raadt Mozaïekstreaming aan voor het laden van gegevens op PyTorch of Mosaic Composer, met name wanneer het om gedistribueerde workloads gaat. De geleverde StreamingDataset - en StreamingDataLoader-API's helpen de training over grote gegevenssets te vereenvoudigen en tegelijkertijd de juistheidsgaranties, prestaties, flexibiliteit en gebruiksgemak in een gedistribueerde omgeving te maximaliseren. zie Gegevens laden met Mozaïekstreaming voor meer informatie.
Best practices voor het trainen van Deep Learning-modellen
Databricks raadt aan om Databricks Runtime te gebruiken voor het bijhouden en automatisch registreren van modellen voor machine learning en MLflow voor alle modeltrainingen.
Beginnen met een cluster met één knooppunt
Een GPU-cluster met één knooppunt (alleen stuurprogramma) is doorgaans het snelst en meest rendabel voor het ontwikkelen van deep learning-modellen. Eén knooppunt met 4 GPU's is waarschijnlijk sneller voor de training van deep learning dan 4 werkknooppunten met elk 1 GPU. Dit komt doordat gedistribueerde training overhead voor netwerkcommunicatie veroorzaakt.
Een cluster met één knooppunt is een goede optie tijdens snelle, iteratieve ontwikkeling en voor het trainen van modellen voor kleine tot middelgrote gegevens. Als uw gegevensset groot genoeg is om de training traag te maken op één computer, kunt u overwegen om over te stappen op meerdere GPU's en zelfs gedistribueerde rekenkracht.
Metrische gegevens van TensorBoard en cluster gebruiken om het trainingsproces te bewaken
TensorBoard is vooraf geïnstalleerd in Databricks Runtime ML. U kunt deze gebruiken in een notitieblok of op een afzonderlijk tabblad. Zie TensorBoard voor meer informatie.
Metrische clustergegevens zijn beschikbaar in alle Databricks-runtimes. U kunt het netwerk-, processor- en geheugengebruik onderzoeken om te controleren op knelpunten. Zie metrische clustergegevens voor meer informatie.
Prestaties optimaliseren voor deep learning
U kunt en moet gebruikmaken van technieken voor het optimaliseren van deep learning-prestaties op Databricks.
Vroeg stoppen
Vroeg stoppen bewaakt de waarde van een metrische waarde die wordt berekend op de validatieset en stopt de training wanneer de metrische waarde stopt met verbeteren. Dit is een betere aanpak dan een goed aantal tijdvakken te raden om te voltooien. Elke deep learning-bibliotheek biedt een systeemeigen API voor vroege stop; Zie bijvoorbeeld de EarlyStopping callback-API's voor TensorFlow/Keras en voor PyTorch Lightning. Zie TensorFlow Keras-voorbeeldnotebook voor een voorbeeldnotebook.
Optimalisatie van de batchgrootte
Batchgrootteafstemming helpt het GPU-gebruik te optimaliseren. Als de batchgrootte te klein is, kunnen de berekeningen de GPU-mogelijkheden niet volledig gebruiken. U kunt metrische clustergegevens gebruiken om gpu-metrische gegevens weer te geven.
Pas de batchgrootte aan in combinatie met de leersnelheid. Een goede vuistregel is wanneer u de batchgrootte met n verhoogt, de leersnelheid verhogen met sqrt(n). Probeer bij het handmatig afstemmen de batchgrootte te wijzigen met een factor 2 of 0,5. Ga vervolgens door met het optimaliseren van de prestaties, handmatig of door een verscheidenheid aan hyperparameters te testen met behulp van een geautomatiseerd hulpprogramma zoals Optuna.
Transferleren
Met transfer learning begint u met een eerder getraind model en wijzigt u het naar behoefte voor uw toepassing. Het overbrengen van leren kan de tijd die nodig is om een nieuw model te trainen en af te stemmen aanzienlijk verminderen. Zie Featurization voor transfer-learning voor meer informatie en een voorbeeld.
Overstappen op gedistribueerde training
Databricks Runtime ML bevat TorchDistributor, DeepSpeed en Ray om de overstap van één knooppunt naar gedistribueerde training te vergemakkelijken.
TorchDistributor
TorchDistributor is een opensource-module in PySpark waarmee gedistribueerde training met PyTorch op Spark-clusters wordt gefaciliteerd, waarmee u PyTorch-trainingstaken kunt starten als Spark-taken. Zie Gedistribueerde training met TorchDistributor.
Optuna
Optuna biedt adaptieve hyperparameterafstemming voor machine learning.
Beste werkwijzen voor inferentie
Deze sectie bevat algemene tips over het gebruik van modellen voor deductie met Azure Databricks.
Als u de kosten wilt minimaliseren, kunt u zowel CPU's als gpu's die zijn geoptimaliseerd voor deductie, zoals de NC-T4_v3-serie, overwegen. Er is geen duidelijke aanbeveling, omdat de beste keuze afhankelijk is van modelgrootte, gegevensdimensies en andere variabelen.
Gebruik MLflow om de implementatie en modeldeployment te vereenvoudigen. MLflow kan elk Deep Learning-model vastleggen, inclusief aangepaste voorverwerkings- en postverwerkingslogica. Modellen in Unity Catalog of modellen die zijn geregistreerd in het Werkruimte Modelregister kunnen worden geïmplementeerd voor batch-, streaming- of online-inferentie.
Online dienstverlening
De beste optie voor server met lage latentie is online serveren achter een REST API. Databricks biedt Model Serving voor onlinedeductie. Model serving biedt een geïntegreerde interface voor het implementeren, beheren en opvragen van AI-modellen en biedt ondersteuning voor het volgende:
- Aangepaste modellen. Dit zijn Python-modellen die zijn verpakt in de MLflow-indeling. Voorbeelden hiervan zijn scikit-learn-, XGBoost-, PyTorch- en Hugging Face-transformatiemodellen.
- Geavanceerde open modellen beschikbaar gesteld door Foundation Model-API's. Deze modellen zijn gecureerde basismodelarchitecturen die geoptimaliseerde deductie ondersteunen. Basismodellen zoals Llama-2-70B-chat, BGE-Large en Mistral-7B zijn bijvoorbeeld beschikbaar voor direct gebruik met prijzen voor betalen per token . Voor workloads waarvoor prestatiegaranties en verfijnde modelvarianten zijn vereist, kunt u deze implementeren met ingerichte doorvoer.
- Externe modellen. Dit zijn modellen die buiten Databricks worden gehost. Bijvoorbeeld generatieve AI-modellen zoals GPT-4 van OpenAI, Lantropic's Claude en andere. Eindpunten die deze modellen gebruiken, kunnen centraal worden beheerd en klanten kunnen frequentielimieten en toegangsbeheer voor hen instellen.
MLflow biedt API's voor de implementatie naar verschillende beheerde diensten voor online inferentie, evenals API's voor het maken van Docker-containers voor aangepaste oplossingen voor bediening.
Andere algemene beheerde services voor onlinedeductie zijn:
Batch- en streaminginference
Batch- en streaming scoreverwerking bieden ondersteuning voor een hoge doorvoer en lage kosten, met latenties van slechts enkele minuten. Voor meer informatie, zie Implementeer modellen voor batchinferentie en voorspelling.
- Als u verwacht meer dan één keer toegang te krijgen tot gegevens voor inference, kunt u overwegen om een voorverwerkingsjob te maken om de gegevens te ETL'en in een Delta Lake-tabel voordat u de inference-taak uitvoert. Op deze manier worden de kosten voor het opnemen en voorbereiden van de gegevens verspreid over meerdere leesbewerkingen van de gegevens. Door voorverwerking van deductie te scheiden, kunt u voor elke taak ook verschillende hardware selecteren om de kosten en prestaties te optimaliseren. U kunt bijvoorbeeld CPU's gebruiken voor ETL en GPU's voor deductie.
- Gebruik Spark Pandas UDF's om batch- en streamingdeductie over een cluster te schalen.
- Wanneer u een model vanuit Azure Databricks aanmeldt, biedt MLflow automatisch deductiecode om het model toe te passen als pandas UDF.
- U kunt uw deductiepijplijn ook verder optimaliseren, met name voor grote Deep Learning-modellen. Zie de referentieoplossing voor afbeelding ETL voor een voorbeeld.