Running Examples via Scheduler
Running Examples via Scheduler
Для каждой модели в ray_wrapper/examples/ рядом с train.py/tune.py лежит schedule_*.py — тот же пример, но запускаемый не напрямую, а через постановку задачи в очередь сервиса scheduler (порт 8264, подробнее — книга «Документация MLumina», страница Scheduler).
Общий паттерн
import requests
SCHEDULER_URL = "http://127.0.0.1:8264/add_task"
task_json = {
"name": "fcnn",
"entrypoint": "python ray_wrapper/examples/fcnn/tune.py",
"runtime_env": {
"working_dir": "/home/ray/src/mlumina",
"pip": ["ray", "torch", "tqdm"],
},
"priority": 0,
"cpu": 0,
"gpu": 0,
"memory": 1,
"timeout": 0,
}
response = requests.post(SCHEDULER_URL, json=task_json, timeout=60)
print(response.status_code)
print(response.json())
Существующие файлы: lin_reg/schedule_lin_reg_tune.py, svm/schedule_svm_tune.py, fcnn/schedule_fcnn_train.py, fcnn/schedule_fcnn_tune.py, cnn/schedule_cnn_train.py, cnn/schedule_cnn_tune.py, vit/cifar_10/schedule_cifar10_train.py, vit/cifar_10/schedule_cifar10_tune.py, vit/cifar_100/schedule_cifar100_train.py, vit/cifar_100/schedule_cifar100_tune.py — по одному на каждую пару train/tune, кроме lin_reg и svm (у них есть только tune).
На что обратить внимание
working_dir— путь внутри контейнера, а не на машине, откуда отправляется HTTP-запрос (/home/ray/src/mlumina— это то, что смонтировано в контейнерschedulerвdocker-compose.yml). Отправлять такие запросы имеет смысл из среды, где этот путь существует и виден Ray-кластеру — то есть из контейнеров стека, а не с произвольного ноутбука разработчика.- Поле
"name": "fcnn"захардкожено одинаково во всехschedule_*.py, включаяschedule_lin_reg_tune.py,schedule_svm_tune.py,schedule_cifar10_train.pyи т.д. — это copy-paste-артефакт, не ошибка запуска: имя используется только для генерацииTask.id(mlumina-{name}-priority-...-{uuid}) и отображения в очереди/дашборде, само задание при этом запускает правильныйentrypoint. Тем не менее в дашборде планировщика все такие задачи будут выглядеть как "fcnn" независимо от реальной модели — при желании стоит поправитьnameпод конкретную задачу перед отправкой. "cpu": 0, "gpu": 0, "memory": 1— это ресурсы, которые планировщик резервирует для допуска задачи в очередь (проверка_check_resources_by_allocationпротивray.cluster_resources()), а не то, что реально ограничивает Ray-задачу при выполнении — фактическое потребление ресурсов определяется тем, что делает самentrypoint-скрипт (scale_config,resources=и т.п. внутри train/tune-функций).Scheduler._add_task_to_queueотклоняет задачу только еслиcpu == 0 and gpu == 0 and memory == 0одновременно — здесьmemory=1этого не допускает, так что все такие задания успешно проходят допуск."timeout": 0— без ограничения по времени выполнения (планировщик не станет автоматически отменять задачу по таймауту).
Как отправить задачу
Изнутри контейнера, у которого есть доступ к scheduler по сети (например, head/worker, либо curl/python с той же Docker-сети):
python ray_wrapper/examples/fcnn/schedule_fcnn_tune.py
Прогресс — через GET http://<host>:8264/get_task_queue, GET /get_running_tasks_list или веб-дашборд по адресу http://<host>:8264/.
No comments to display
No comments to display