Delen via


Ray-clusters schalen in Azure Databricks

Meer informatie over het afstemmen van de grootte van uw Ray-cluster voor optimale prestaties, waaronder automatische schaalaanpassing, configuratie van hoofdknooppunten, heterogene clusters en resourcetoewijzing.

Een Ray-cluster maken in de modus voor automatisch schalen

In Ray 2.8.0 en hoger zijn Ray-clusters gestart op Azure Databricks ondersteuning voor integratie met automatische schaalaanpassing van Azure Databricks. Met deze automatische schaalaanpassingsintegratie wordt automatisch schalen van Azure Databricks-clusters intern geactiveerd in de Azure Databricks-omgeving.

Voer de volgende opdracht uit om automatisch schalen in te schakelen:

Voor Ray-versie lager dan 2.10:

from ray.util.spark import setup_ray_cluster

setup_ray_cluster(
  num_worker_nodes=8,
  autoscale=True,
)

Voor Ray versie 2.10 en hoger:

from ray.util.spark import setup_ray_cluster, shutdown_ray_cluster

setup_ray_cluster(
  min_worker_nodes=2,
  max_worker_nodes=4,
  num_cpus_per_node=4,
  collect_log_to_path="/dbfs/path/to/ray_collected_logs"
)

# Pass any custom Ray configuration with ray.init
ray.init(ignore_reinit_error=True)

De ray.util.spark.setup_ray_cluster API maakt een Ray-cluster op Apache Spark. Intern wordt een Apache Spark-achtergrondtaak gemaakt. Elke Apache Spark-taak in de taak maakt een Ray-werkknooppunt en het Ray-hoofdknooppunt wordt gemaakt op het stuurprogramma. De argumenten min_worker_nodes en max_worker_nodes vertegenwoordigen het bereik van Ray-werkknooppunten die moeten worden gemaakt en gebruikt voor Ray-workloads. Als het argument min_worker_nodes niet is gedefinieerd, wordt er een Ray-cluster met vaste grootte gestart met max_worker_nodes het aantal beschikbare werkrollen. Als u het aantal CPU- of GPU-kernen wilt opgeven dat aan elk Ray-werkknooppunt is toegewezen, stelt u het argument num_cpus_worker_node in (standaardwaarde: 1) of num_gpus_worker_node (standaardwaarde: 0).

Als automatische schaalaanpassing is ingeschakeld voor Ray-versie lager dan 2.10, num_worker_nodes geeft dit het maximum aantal Ray-werkknooppunten aan. Het standaard minimum aantal Ray-werkknooppunten is nul. Deze standaardinstelling betekent dat wanneer het Ray-cluster inactief is, het omlaag wordt geschaald naar nul Ray-werkknooppunten. Dit is mogelijk niet ideaal voor snelle reactietijd in alle scenario's, maar het kan de kosten aanzienlijk verlagen wanneer dit is ingeschakeld.

In de modus voor automatisch schalen kan num_worker_nodes niet worden ingesteld op ray.util.spark.MAX_NUM_WORKER_NODES.

Met de volgende argumenten configureert u de schaalaanpassings- en downscalingsnelheid:

  • autoscale_upscaling_speed vertegenwoordigt het aantal knooppunten dat in behandeling is als een veelvoud van het huidige aantal knooppunten. Hoe hoger de waarde, hoe agressiever de upscaling. Als dit bijvoorbeeld is ingesteld op 1,0, kan het cluster op elk gewenst moment groter worden dan 100%.
  • autoscale_idle_timeout_minutes geeft het aantal minuten aan dat moet worden doorgegeven voordat de automatische schaalaanpassing een niet-actief werkknooppunt verwijdert. Hoe kleiner de waarde, hoe agressiever de schaalaanpassing.

Met Ray 2.9.0 en hoger kunt u ook instellen autoscale_min_worker_nodes dat het Ray-cluster niet kan worden geschaald naar nul werkrollen wanneer het Ray-cluster niet actief is, waardoor het cluster wordt beëindigd.

Resources configureren die worden gebruikt door het Ray-hoofdknooppunt

Voor de Ray on Spark-configuratie beperkt Azure Databricks standaard resources die zijn toegewezen aan het Ray-hoofdknooppunt tot:

  • 0 CPU-kernen
  • 0 GPU's
  • Heap-geheugen van 128 MB
  • Geheugen voor objectopslag van 128 MB

Dit komt doordat het Ray-hoofdknooppunt meestal alleen wordt gebruikt voor globale coördinatie, niet voor het uitvoeren van Ray-taken. De resources van het Apache Spark-stuurprogrammaknooppunt worden gedeeld met meerdere gebruikers, dus met de standaardinstelling worden resources opgeslagen aan de kant van het Apache Spark-stuurprogramma. Met Ray 2.8.0 en hoger kunt u resources configureren die worden gebruikt door het Ray-hoofdknooppunt. Gebruik de volgende argumenten in de setup_ray_cluster-API:

  • num_cpus_head_node: cpu-kernen instellen die worden gebruikt door ray-hoofdknooppunt
  • num_gpus_head_node: GPU instellen die wordt gebruikt door ray-hoofdknooppunt
  • object_store_memory_head_node: het instellen van de geheugengrootte van het objectarchief per Ray-hoofdknooppunt

Ondersteuning voor heterogene clusters

U kunt een Ray on Spark-cluster maken voor efficiëntere en rendabelere trainingsuitvoeringen en verschillende configuraties instellen tussen het Ray-hoofdknooppunt en de Ray-werkknooppunten. Alle Ray-werkknooppunten moeten echter dezelfde configuratie hebben. Azure Databricks-clusters bieden geen volledige ondersteuning voor heterogene clusters, maar u kunt een Azure Databricks-cluster maken met verschillende typen stuurprogramma's en werkrollen door een clusterbeleid in te stellen. Voorbeeld:

{
  "node_type_id": {
    "type": "fixed",
    "value": "i3.xlarge"
  },
  "driver_node_type_id": {
    "type": "fixed",
    "value": "g4dn.xlarge"
  },
  "spark_version": {
    "type": "fixed",
    "value": "13.x-snapshot-gpu-ml-scala2.12"
  }
}

De configuratie van het Ray-cluster afstemmen

De aanbevolen configuratie voor elk Ray-werkknooppunt is als volgt: Minimaal 4 CPU-kernen per Ray-werkknooppunt. Minimaal 10 GB heap-geheugen voor elk Ray Worker-knooppunt.

Bij het aanroepen ray.util.spark.setup_ray_clusterraadt Azure Databricks dus aan om de instelling in te stellen num_cpus_per_node op een waarde die groter is dan of gelijk is aan 4.

Zie de volgende sectie voor meer informatie over het afstemmen van heap-geheugen voor elk Ray-werkknooppunt.

Geheugentoewijzing voor Ray-werkknooppunten

Elk Ray-werkknooppunt maakt gebruik van twee soorten geheugen: heapgeheugen en objectopslaggeheugen.

De toegewezen geheugengrootte voor elk type wordt bepaald zoals hieronder wordt beschreven.

Het totale geheugen dat aan elk Ray Worker-knooppunt is toegewezen, is: RAY_WORKER_NODE_TOTAL_MEMORY = (SPARK_WORKER_NODE_PHYSICAL_MEMORY / MAX_NUMBER_OF_LOCAL_RAY_WORKER_NODES * 0.8)

MAX_NUMBER_OF_LOCAL_RAY_WORKER_NODES is het maximum aantal Ray-werkknooppunten dat kan worden gestart op het Apache Spark-werkknooppunt. Dit wordt bepaald door het argument num_cpus_per_node of num_gpus_per_node.

Als u het argument object_store_memory_per_nodeniet instelt, zijn de heap-geheugengrootte en objectopslaggeheugengrootte toegewezen aan elk Ray-werkknooppunt: RAY_WORKER_NODE_HEAP_MEMORY = RAY_WORKER_NODE_TOTAL_MEMORY * 0.7OBJECT_STORE_MEMORY_PER_NODE = RAY_WORKER_NODE_TOTAL_MEMORY * 0.3

Als u het argument object_store_memory_per_nodeinstelt: RAY_WORKER_NODE_HEAP_MEMORY = RAY_WORKER_NODE_TOTAL_MEMORY - argument_object_store_memory_per_node

Daarnaast wordt de geheugengrootte van het object opgeslagen per Ray Worker-knooppunt beperkt door het gedeelde geheugen van het besturingssysteem. De maximumwaarde is: OBJECT_STORE_MEMORY_PER_NODE_CAP = (SPARK_WORKER_NODE_OS_SHARED_MEMORY / MAX_NUMBER_OF_LOCAL_RAY_WORKER_NODES * 0.8)

SPARK_WORKER_NODE_OS_SHARED_MEMORY is de /dev/shm schijfgrootte die is geconfigureerd voor het Apache Spark-werkknooppunt.

Aanbevolen procedure voor schalen

Het CPU- en GPU-nummer instellen voor elk Ray-werkknooppunt

U wordt aangeraden het argument num_cpus_worker_node in te stellen op het aantal CPU-kernen per Apache Spark-werkknooppunt. Op dezelfde manier is het instellen num_gpus_worker_node van het aantal GPU's per Apache Spark-werkknooppunt optimaal. Met deze configuratie start elk Apache Spark-werkknooppunt één Ray Worker-knooppunt dat volledig gebruikmaakt van de resources van elk Apache Spark-werkknooppunt.

Stel de omgevingsvariabele RAY_memory_monitor_refresh_ms in 0 op de configuratie van het Azure Databricks-cluster bij het starten van uw Apache Spark-cluster.

Configuratie van geheugenresources voor hybride Apache Spark- en Ray-workloads

Als u hybride Spark- en Ray-workloads uitvoert in een Azure Databricks-cluster, raadt Azure Databricks u aan om het Spark-uitvoergeheugen tot een kleine waarde te beperken. Stel bijvoorbeeld spark.executor.memory 4g in de configuratie van het Azure Databricks-cluster in.

De Apache Spark-uitvoerprogramma is een Java-proces dat GC lazily activeert, en de Apache Spark-gegevenssetcache maakt gebruik van veel Apache Spark-uitvoerprogrammageheugen. Dit vermindert het beschikbare geheugen dat Ray kan gebruiken. Verminder de spark.executor.memory configuratie om mogelijke fouten met onvoldoende geheugen te voorkomen.

Configuratie van rekenresources voor hybride Apache Spark- en Ray-workloads

Als u hybride Spark- en Ray-workloads uitvoert in een Azure Databricks-cluster, raden we u aan om clusterknooppunten of Ray-werkknooppunten automatisch schaalbaar te maken. Voorbeeld:

Als u een vast aantal werkknooppunten beschikbaar hebt om een Azure Databricks-cluster te starten, raden we u aan Ray-on-Spark automatisch schalen in te schakelen. Wanneer er geen Ray-workloads worden uitgevoerd, wordt het Ray-cluster omlaag geschaald, zodat resources kunnen worden vrijgemaakt voor gebruik door Apache Spark-taken. Wanneer Apache Spark-taken zijn voltooid en Ray opnieuw wordt gebruikt, wordt het Ray-on-Spark-cluster weer omhoog geschaald om aan de vraag te voldoen.

Bovendien kunt u de Azure Databricks- en Ray-on-spark-clusters automatisch schaalbaar maken. Als u bijvoorbeeld de automatisch schaalbare knooppunten van het Azure Databricks-cluster configureert op maximaal 10 knooppunten, configureert u de Ray-on-Spark-werkknooppunten op maximaal vier knooppunten en configureert u elk Ray-werkknooppunt om volledig gebruik te maken van de resources van elke Apache Spark-werkrol, kunnen Ray-workloads maximaal vier knooppuntbronnen in een dergelijke clusterconfiguratie gebruiken. Ter vergelijking: Apache Spark-taken kunnen maximaal zes knooppunten aan resources toewijzen.