Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Ray plant onafhankelijke Python-taken en volgt hun voortgang voor je. In dit notebook start je Ray op een aangesloten 1xA10-berekening, dien je acht GPU-taken in zonder te wachten tot ze klaar zijn, en gebruik je het Ray-dashboard om ze één voor één te zien draaien op de beschikbare GPU.
Note
Dit voorbeeld vereist de Databricks AI-omgeving versie 5 of hoger.
Requirements
Dit notebook vereist AI Runtime met de AI v5-omgeving . Deze walkthrough gebruikt 1xA10 gekoppelde GPU-rekenkracht, zodat je kunt zien hoe Ray werk in de wachtrij plaatst.
Om het notitieboekje te verbinden:
- Selecteer Verbinden bovenaan het notitieboek.
- Selecteer serverloze GPU.
- Stel in het Environment-zijpaneel de Versneller in op 1xA10.
- Selecteer AI v5 als basisomgeving.
- Selecteer Toepassen en vervolgens Bevestigen.
AI v5 bevat Ray en CUDA-enabled PyTorch, dus dit voorbeeld installeert geen extra pakketten. Om alle acht taken tegelijk te zien draaien, kun je het notebook koppelen aan 8xH100 compute en het opnieuw uitvoeren.
Initialiseer Ray
Start Ray voor de notitieboeksessie met ray_init(). De functie toont informatie over de Ray-context en print een dashboardlink die werkt via de Databricks-driverproxy.
import ray
from serverless_gpu import ray_init
ray_init()
Bekijk Ray-bronnen
Voordat je werk indient, controleer de bronnen die Ray heeft ontdekt. Met 1xA10 compute zou de cluster één GPU moeten rapporteren.
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."
)
Definieer een GPU-taak
Het decoreren van een functie met @ray.remote(num_gpus=1) creëert een Ray-taak die elke keer dat deze draait één GPU reserveert. Deze taak voert een kleine CUDA-berekening uit en geeft details terug over de gebruikte GPU.
De sleep aanroep houdt elke taak lang genoeg actief om deze in het dashboard te inspecteren. Deze pauze is alleen bedoeld voor dashboardonderzoek en is niet bedoeld als benchmark.
@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,
}
Dien taken asynchroon in
Voordat je de volgende cel uitvoert, open je de link naar het dashboard die door ray_init() wordt weergegeven. Open vanaf de Vacature-pagina de lopende opdracht en bekijk de takenlijst na het indienen. Met 1xA10 compute zou je één taak moeten zien draaien terwijl de andere zeven wachten op GPU-capaciteit. Met 8xH100 rekenkracht kunnen alle acht taken tegelijkertijd draaien.
Elke .remote() aanroep stuurt een taak in zonder te wachten tot deze klaar is en geeft een objectreferentie terug.
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__}.")
Resultaten ophalen
Nadat je het dashboard hebt geïnspecteerd, geef je de objectreferenties door aan ray.get(). Ray wacht tot de taken klaar zijn en geeft de resultaten in volgorde van indiening terug.
results = ray.get(task_refs)
pprint(results, sort_dicts=False)
Met 1xA10 compute laten de resultaten zien dat alle acht taken één voor één dezelfde GPU gebruikten. Als je het notebook opnieuw uitvoert met 8xH100 rekenkracht, kan Ray alle acht taken tegelijk plannen zonder codewijzigingen.