Ray Core AI Runtime üzerinde Merhaba Dünya

Ray, bağımsız Python görevlerini planlar ve ilerlemelerini sizin için takip eder. Bu defterde, Ray'i ekli 1xA10 hesaplama sisteminde başlatıyorsunuz, her birinin bitmesini beklemeden sekiz GPU görevi gönderiyorsunuz ve Ray kontrol panelini kullanarak mevcut GPU'da birer teker çalışmalarını izliyorsunuz.

Note

Bu örnek Databricks AI ortamının 5 veya üzeri sürümünü gerektirir.

Requirements

Bu dizüstü bilgisayar, AI v5 ortamında AI Runtime gerektirir. Bu kılavuz, Ray’in kuyruklama işlemini gözlemleyebilmeniz için 1xA10 ekli GPU işlem gücünü kullanır.

Dizüstü bilgisayarı bağlamak için:

  1. Defterin üstündeki Bağla'yı seçin.
  2. Sunucusuz GPU'ya tıklayın.
  3. Çevre yan panelinde Accelerator'u1xA10'a ayarlayın.
  4. Temel ortam olarak AI v5'i seçin.
  5. Başvur seçeneğini seçin, ardından Onayla'yı seçin.

AI v5, Ray ve CUDA özellikli PyTorch içerir, bu yüzden bu örnek ek paketler yüklemez. Tüm sekiz görevin aynı anda çalıştığını görmek için defteri 8xH100 hesaplamaya bağlayıp tekrar çalıştırabilirsiniz.

Ray'i başlatın

Not defteri oturumu için Ray’i ray_init() ile başlatın. Bu fonksiyon, Ray bağlamı hakkında bilgi gösterir ve Databricks sürücü proxy'si üzerinden çalışan bir dashboard bağlantısı yazdırır.

import ray
from serverless_gpu import ray_init

ray_init()

Ray kaynaklarını kontrol edin

Çalışmayı göndermeden önce, Ray'in keşfettiği kaynakları kontrol edin. 1xA10 hesaplama ile küme bir GPU rapor etmelidir.

from pprint import pprint

cluster_resources = ray.cluster_resources()
available_resources = ray.available_resources()

pprint(
    {
        "cluster_resources": cluster_resources,
        "available_resources": available_resources,
    },
    sort_dicts=False,
)

if cluster_resources.get("GPU", 0) < 1:
    raise RuntimeError(
        "Ray did not detect a GPU. Attach the notebook to 1xA10 or 8xH100 compute, then rerun it."
    )

Bir GPU görevi tanımlayın

Bir işlevi @ray.remote(num_gpus=1) ile işaretlemek, her çalıştırıldığında bir GPU ayıran bir Ray görevi oluşturur. Bu görev küçük bir CUDA hesaplaması yapar ve kullandığı GPU hakkında detayları geri döndürür.

sleep çağrısı, her görevi gösterge panelinde incelemeye yetecek kadar uzun süre etkin tutar. Bu duraklama sadece gösterge paneli keşfi içindir ve kıyaslama olarak kullanılmak üzere değildir.

@ray.remote(num_gpus=1)
def run_gpu_task(task_id: int, inspection_seconds: int) -> dict:
    import os
    import time

    import ray
    import torch

    values = torch.arange(1, 5, dtype=torch.float32, device="cuda") + task_id
    computation_result = torch.square(values).sum().item()
    torch.cuda.synchronize()
    time.sleep(inspection_seconds)

    return {
        "task_id": task_id,
        "ray_gpu_ids": ray.get_gpu_ids(),
        "cuda_visible_devices": os.environ.get("CUDA_VISIBLE_DEVICES"),
        "gpu_model": torch.cuda.get_device_name(0),
        "computation_result": computation_result,
    }

Görevleri asenkron olarak gönder

Bir sonraki hücreyi çalıştırmadan önce, ray_init() tarafından yazdırılan kontrol paneli bağlantısını açın. İşler sayfasından çalıştırılan işi açın ve teslim ettikten sonra görev listesini izleyin. 1xA10 işlem gücüyle, bir görevin çalıştığını, diğer yedisinin ise GPU kapasitesini beklediğini görmelisiniz. 8xH100 hesaplama ile tüm sekiz görev aynı anda çalışabilir.

Her .remote() çağrı, görevin bitmesini beklemeden bir görev gönderir ve bir nesne referansı döndürür.

task_refs = [run_gpu_task.remote(task_id, inspection_seconds=10) for task_id in range(8)]

print(f"Submitted {len(task_refs)} tasks.")
print(f"Each submission returned a {type(task_refs[0]).__name__}.")

Sonuçları alın

Gösterge panelini inceledikten sonra, nesne referanslarını 'ye verin ray.get(). Ray görevlerin bitmesini bekler ve sonuçları teslim sırasına göre geri getirir.

results = ray.get(task_refs)
pprint(results, sort_dicts=False)

1xA10 hesaplama ile sonuçlar, tüm sekiz görevin aynı GPU'yu birer ardına kullandığını gösteriyor. Notebook'u 8xH100 hesaplama ile yeniden çalıştırırsanız, Ray tüm sekiz görevi aynı anda kod değişikliği olmadan planlayabilir.

Örnek defter

AI Runtime üzerinde Ray Core Hello World

Dizüstü bilgisayar al