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_NODES
ayarlanamaz.
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 ayarlamanum_gpus_head_node
: Ray head node tarafından kullanılan GPU'ları ayarlamaobject_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_cluster
değ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_node
bağımsız değişkeni num_cpus_per_node
tarafından belirlenir.
bağımsız değişkenini object_store_memory_per_node
ayarlamazsanı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.7
OBJECT_STORE_MEMORY_PER_NODE = RAY_WORKER_NODE_TOTAL_MEMORY * 0.3
bağımsız değişkenini object_store_memory_per_node
ayarlarsanı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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin