Aracılığıyla paylaş


Azure Databricks'te Ray kümelerini ölçeklendirme

Otomatik ölçeklendirme, baş düğüm yapılandırması, heterojen kümeler ve kaynak ayırma gibi en iyi performans için Ray kümenizin boyutunu ayarlamayı öğrenin.

Otomatik ölçeklendirme modunda Ray kümesi oluşturma

Ray 2.8.0 ve üzeri sürümleriyle Azure Databricks'te başlatılan Ray kümeleri, Azure Databricks otomatik ölçeklendirmesi ile tümleştirmeyi destekler. Bu otomatik ölçeklendirme tümleştirmesi, Azure Databricks ortamında dahili olarak Azure Databricks kümesi otomatik ölçeklendirmesini tetikler.

Otomatik ölçeklendirmeyi etkinleştirmek için aşağıdaki komutu çalıştırın:

2.10'un altındaki Ray sürümü için:

from ray.util.spark import setup_ray_cluster

setup_ray_cluster(
  num_worker_nodes=8,
  autoscale=True,
)

Ray sürüm 2.10 ve üzeri için:

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)

API, ray.util.spark.setup_ray_cluster Apache Spark üzerinde bir Ray kümesi oluşturur. Dahili olarak bir arka plan Apache Spark işi oluşturur. İşteki her Apache Spark görevi bir Işın çalışanı düğümü oluşturur ve sürücüde Ray baş düğümü oluşturulur. Bağımsız değişkenler ve max_worker_nodes Ray iş yükleri min_worker_nodes için oluşturulup kullanılacak Işın çalışanı düğümleri aralığını temsil eder. Bağımsız değişken min_worker_nodes tanımsız bırakılırsa, kullanılabilir çalışan sayısıyla max_worker_nodes sabit boyutlu bir Ray kümesi başlatılır. Her Işın çalışanı düğümüne atanan CPU veya GPU çekirdeği sayısını belirtmek için bağımsız değişkeni num_cpus_worker_node (varsayılan değer: 1) veya num_gpus_worker_node (varsayılan değer: 0) ayarlayın.

2.10'un altındaki Ray sürümü için otomatik ölçeklendirme etkinleştirildiyse maksimum num_worker_nodes Işın çalışan düğümü sayısını gösterir. Varsayılan en az Ray çalışan düğümü sayısı sıfırdır. Bu varsayılan ayar, Ray kümesinin boşta olduğu zaman ölçeği sıfır Ray çalışan düğümüne indirdiğini gösterir. Bu, tüm senaryolarda hızlı yanıt verme için ideal olmayabilir, ancak etkinleştirildiğinde maliyetleri önemli ölçüde azaltabilir.

Otomatik ölçeklendirme modunda, num_worker_nodes olarak ray.util.spark.MAX_NUM_WORKER_NODESayarlanamaz.

Aşağıdaki bağımsız değişkenler, yukarı ve aşağı ölçeklendirme hızını yapılandırır:

  • autoscale_upscaling_speed geçerli düğüm sayısının katı olarak beklemeye izin verilen düğüm sayısını temsil eder. Değer ne kadar yüksekse, yukarı ölçeklendirme de o kadar agresif olur. Örneğin, bu değer 1,0 olarak ayarlanırsa kümenin boyutu her zaman en fazla %100 büyüyebilir.
  • autoscale_idle_timeout_minutes , otomatik ölçeklendirici boşta çalışan düğümünü kaldırmadan önce geçmesi gereken dakika sayısını temsil eder. Değer ne kadar küçük olursa, aşağı ölçeklendirme de o kadar agresif olur.

Ray 2.9.0 ve üzeri sürümleriyle, Ray kümesi boşta olduğunda Ray kümesinin ölçeğinin sıfır çalışana indirilmesini önlemek için de ayarlayabilirsiniz autoscale_min_worker_nodes ve bu da kümenin sonlandırılmasını sağlayabilir.

Ray head düğümü tarafından kullanılan kaynakları yapılandırma

Varsayılan olarak, Spark üzerinde Ray yapılandırması için Azure Databricks, Işın baş düğümüne ayrılan kaynakları şu şekilde kısıtlar:

  • 0 CPU çekirdeği
  • 0 GPU
  • 128 MB yığın belleği
  • 128 MB nesne deposu belleği

Bunun nedeni, Ray baş düğümünü genellikle yalnızca genel koordinasyon için kullanılır, Işın görevlerini çalıştırmak için kullanılmaz. Apache Spark sürücü düğümü kaynakları birden çok kullanıcıyla paylaşıldığından, varsayılan ayar kaynakları Apache Spark sürücü tarafında kaydeder. Ray 2.8.0 ve üzeri ile Ray head düğümü tarafından kullanılan kaynakları yapılandırabilirsiniz. setup_ray_cluster API'sinde aşağıdaki bağımsız değişkenleri kullanın:

  • num_cpus_head_node: Ray head düğümü tarafından kullanılan CPU çekirdeklerini ayarlama
  • num_gpus_head_node: Ray head node tarafından kullanılan GPU'ları ayarlama
  • object_store_memory_head_node: Ray head düğümüne göre nesne deposu bellek boyutunu ayarlama

Heterojen kümeler için destek

Daha verimli ve uygun maliyetli eğitim çalıştırmaları için Spark kümesinde bir Ray oluşturabilir ve Işın baş düğümü ile Ray çalışan düğümleri arasında farklı yapılandırmalar ayarlayabilirsiniz. Ancak, tüm Ray çalışan düğümlerinin aynı yapılandırmaya sahip olması gerekir. Azure Databricks kümeleri heterojen kümeleri tam olarak desteklemez, ancak küme ilkesi ayarlayarak farklı sürücü ve çalışan örneği türlerine sahip bir Azure Databricks kümesi oluşturabilirsiniz. Örneğin:

{
  "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"
  }
}

Ray kümesi yapılandırmasını ayarlama

Her Işın çalışanı düğümü için önerilen yapılandırma şu şekildedir: Işın çalışanı düğümü başına en az 4 CPU çekirdeği. Her Ray çalışan düğümü için en az 10 GB yığın belleği.

Bu nedenle, Azure Databricks çağrılırken ray.util.spark.setup_ray_clusterdeğerinin 4'ten büyük veya buna eşit bir değere ayarlanmasını num_cpus_per_node önerir.

Her Işın çalışanı düğümü için yığın belleği ayarlama hakkında ayrıntılı bilgi için sonraki bölüme bakın.

Ray çalışan düğümleri için bellek ayırma

Her Işın çalışanı düğümü iki tür bellek kullanır: yığın belleği ve nesne deposu belleği.

Her tür için ayrılan bellek boyutu aşağıda açıklandığı gibi belirlenir.

Her Işın çalışanı düğümüne ayrılan toplam bellek: 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 Apache Spark çalışan düğümünde başlatabileceğiniz en fazla Ray çalışan düğümü sayısıdır. Bu, veya num_gpus_per_nodebağımsız değişkeni num_cpus_per_node tarafından belirlenir.

bağımsız değişkenini object_store_memory_per_nodeayarlamazsanız, her Ray çalışan düğümüne ayrılan yığın bellek boyutu ve nesne deposu bellek boyutu şunlardır: RAY_WORKER_NODE_HEAP_MEMORY = RAY_WORKER_NODE_TOTAL_MEMORY * 0.7OBJECT_STORE_MEMORY_PER_NODE = RAY_WORKER_NODE_TOTAL_MEMORY * 0.3

bağımsız değişkenini object_store_memory_per_nodeayarlarsanız: RAY_WORKER_NODE_HEAP_MEMORY = RAY_WORKER_NODE_TOTAL_MEMORY - argument_object_store_memory_per_node

Buna ek olarak, Işın çalışanı düğümü başına nesne deposu bellek boyutu işletim sisteminin paylaşılan belleğiyle sınırlıdır. En büyük değer: 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/dev/shm, Apache Spark çalışan düğümü için yapılandırılan disk boyutudur.

Ölçeklendirme için en iyi yöntem

Her Işın çalışanı düğümü için CPU ve GPU numarasını ayarlama

Bağımsız değişkeni num_cpus_worker_node Apache Spark çalışan düğümü başına CPU çekirdeği sayısına ayarlamanızı öneririz. Benzer şekilde, Apache Spark çalışan düğümü başına GPU sayısına ayar num_gpus_worker_node yapmak da en uygun seçenektir. Bu yapılandırmayla her Apache Spark çalışan düğümü, her Apache Spark çalışan düğümünün kaynaklarını tam olarak kullanacak bir Işın çalışanı düğümü başlatır.

Apache Spark kümenizi başlatırken ortam değişkenini RAY_memory_monitor_refresh_ms 0 Azure Databricks küme yapılandırması içinde olarak ayarlayın.

Apache Spark ve Ray hibrit iş yükleri için bellek kaynağı yapılandırması

Azure Databricks kümesinde karma Spark ve Ray iş yükleri çalıştırıyorsanız Azure Databricks, Spark yürütücü belleğini küçük bir değere düşürmenizi önerir. Örneğin, Azure Databricks kümesi yapılandırmasında ayarlayın spark.executor.memory 4g .

Apache Spark yürütücüsü, GC'yi gevşek bir şekilde tetikleyen bir Java işlemidir ve Apache Spark veri kümesi önbelleği çok fazla Apache Spark yürütücü belleği kullanır. Bu, Ray'in kullanabileceği kullanılabilir belleği azaltır. Bellek yetersiz hatalarından kaçınmak için yapılandırmayı spark.executor.memory azaltın.

Apache Spark ve Ray karma iş yükleri için hesaplama kaynağı yapılandırması

Hibrit Spark ve Ray iş yüklerini bir Azure Databricks kümesinde çalıştırıyorsanız, küme düğümlerini veya Işın çalışanı düğümlerini otomatik olarak ölçeklenebilir hale getirmenizi öneririz. Örneğin:

Azure Databricks kümesini başlatmak için kullanabileceğiniz sabit sayıda çalışan düğümü varsa, Ray-on-Spark otomatik ölçeklendirmesini etkinleştirmenizi öneririz. Hiçbir Ray iş yükü çalıştırılmadığında, Işın kümesi ölçeği küçültülür ve kaynakların Apache Spark görevleri tarafından kullanım için serbest bırakılabilmesini sağlar. Apache Spark görevleri tamamlandığında ve Ray yeniden kullanıldığında, Ray-on-Spark kümesi talebi karşılamak için ölçeği yeniden artıracaktır.

Ayrıca Azure Databricks ve Ray-on-spark kümelerini otomatik olarak ölçeklenebilir hale getirebilirsiniz. Örneğin, Azure Databricks kümesinin otomatik olarak ölçeklendirilebilir düğümlerini en fazla 10 düğüme yapılandırır, Ray-on-Spark çalışan düğümlerini en fazla dört düğüme yapılandırır ve Apache Spark çalışanı başına çalışacak bir Işın çalışanı düğümü ayarlarsanız, Ray iş yükleri bu tür bir küme yapılandırmasında en fazla dört düğüm kaynağını kullanabilir. Buna karşılık Apache Spark işleri en fazla altı düğüm değerinde kaynak ayırabilir.