Share via


Best practices voor deep learning in 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:

Databricks Machine Learning 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 Python-bibliotheken met notebookbereik of R-bibliotheken met notebookbereik om een specifieke set of versie van bibliotheken te gebruiken zonder dat dit van invloed is op andere clustergebruikers.
  • 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 in alle clouds. Zie Ondersteunde exemplaartypen voor 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.

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 Petastorm 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 voor zowel training als deductie. De referentieoplossing voor installatiekopieëntoepassingen biedt een voorbeeld van het optimaliseren van ETL voor afbeeldingen met behulp van Delta Lake.

Petastorm biedt API's waarmee u gegevens in parquet-indeling kunt voorbereiden voor gebruik door TensorFlow, Keras of PyTorch. De SparkConverter-API biedt Spark DataFrame-integratie. Petastorm biedt ook gegevenssharding voor gedistribueerde verwerking. Zie Gegevens laden met Petastorm 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 deep learning-training die elk 4 werkknooppunten met 1 GPU heeft. 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 voorbeeldnotitieblok voor een notebook.

Batchgrootte afstemmen

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

Learning overdragen

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 overdracht leren voor meer informatie en een voorbeeld.

Overstappen op gedistribueerde training

Databricks Runtime ML bevat HorovodRunner, spark-tensorflow-distributorTorchDistributor en Hyperopt om de overstap van één knooppunt naar gedistribueerde training te vergemakkelijken.

HorovodRunner

Horovod is een opensource-project waarmee deep learning-training wordt geschaald naar meerdere GPU's of gedistribueerde berekeningen. HorovodRunner, gebouwd door Databricks en opgenomen in Databricks Runtime ML, is een Horovod-wrapper die Spark-compatibiliteit biedt. Met de API kunt u code met één knooppunt schalen met minimale wijzigingen. HorovodRunner werkt met TensorFlow, Keras en PyTorch.

spark-tensorflow-distributor

spark-tensorflow-distributor is een opensource-systeemeigen pakket in TensorFlow voor gedistribueerde training met TensorFlow in Spark-clusters. Zie het voorbeeldnotitieblok.

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.

Hyperopt

Hyperopt biedt adaptieve hyperparameterafstemming voor machine learning. Met de SparkTrials-klasse kunt u iteratief parameters afstemmen voor deep learning-modellen parallel in een cluster.

Aanbevolen procedures voor deductie

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 modelverdiening 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 werkruimtemodelregister kunnen worden geïmplementeerd voor batch-, streaming- of onlinedeductie.

Online serveren

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.
  • State-of-the-art open modellen die beschikbaar worden 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, basismodellen zoals, OpenAI's GPT-4, Tropic's Claude en anderen. Eindpunten die deze modellen gebruiken, kunnen centraal worden beheerd en klanten kunnen frequentielimieten en toegangsbeheer voor hen instellen.

MLflow biedt ook API's voor implementatie naar verschillende beheerde services voor onlinedeductie, evenals API's voor het maken van Docker-containers voor aangepaste oplossingen.

Andere algemene beheerde services voor onlinedeductie zijn:

Batch- en streamingdeductie

Batch- en streamingscores bieden ondersteuning voor hoge doorvoer en lage kosten bij latenties zo laag als minuten. Zie MLflow gebruiken voor modeldeductie voor meer informatie.

  • Als u verwacht meer dan één keer toegang te krijgen tot gegevens voor deductie, kunt u overwegen om een voorverwerkingstaak te maken voor ETL de gegevens in een Delta Lake-tabel voordat u de deductietaak 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.