Ray Wrapper: Linear Regression and SVM

Ray Wrapper: Linear Regression and SVM 
 Самые простые примеры из ray_wrapper/examples/ — хорошая отправная точка, чтобы понять паттерн ray.tune.Tuner , используемый во всех остальных моделях пакета mlumina.ray_wrapper . У обеих моделей есть только tune.py (готовой функции train_* без подбора гиперпараметров для них не предусмотрено). 
 Linear Regression — ray_wrapper/examples/lin_reg/tune.py 
 ray.init(address="auto")

search_space = {
 "fit_intercept": tune.choice([True, False]),
 "positive": tune.choice([True, False]),
 "test_size": 0.2,
 "random_state": 42,
}

tune_lin_reg(search_space=search_space, num_samples=4, resources={"CPU": 1}, max_concurrent_trials=4)
 
 Внутри ( ray_wrapper/models/lin_reg/lin_reg.py ) каждый trial строит sklearn-датасет diabetes ( build_sklearn_ray_datasets , регрессия), обучает sklearn.linear_model.LinearRegression с параметрами из search_space , репортит rmse / r2 . Отбор — ASHAScheduler(metric="rmse", mode="min") . test_size / random_state передаются как обычные (не варьируемые) значения конфига — tune.choice / tune.loguniform применяются только к fit_intercept / positive . 
 SVM — ray_wrapper/examples/svm/tune.py 
 ray.init(address="auto")

search_space = {
 "kernel": tune.choice(["rbf", "linear", "poly"]),
 "C": tune.loguniform(1e-2, 1e2),
 "gamma": tune.choice(["scale", "auto"]),
 "degree": tune.choice([2, 3, 4]),
 "class_weight": tune.choice([None, "balanced"]),
 "test_size": 0.2,
 "random_state": 42,
}

tune_svm(search_space=search_space, num_samples=8, resources={"CPU": 1}, max_concurrent_trials=4)
 
 В отличие от lin_reg, это классификация : внутри ( ray_wrapper/models/svm/svm.py ) каждый trial строит датасет breast_cancer (бинарная классификация), обучает Pipeline(StandardScaler → SVC(kernel, C, gamma, degree, class_weight)) , репортит accuracy . Отбор — ASHAScheduler(metric="accuracy", mode="max") . 
 Как запустить 
 Оба скрипта вызывают ray.init(address="auto") — рассчитаны на запуск изнутри кластера (в контейнере head / worker , где переменная окружения RAY_ADDRESS /сокет автообнаружения кластера уже настроены), либо нужно подключаться явно через ray://<head>:10001 , поправив скрипт: 
 # из контейнера head/worker
python ray_wrapper/examples/lin_reg/tune.py
python ray_wrapper/examples/svm/tune.py
 
 Результаты ( tune.Tuner.fit() → ResultGrid ) сохраняются локально в /tmp/ray_results/tune_lin_reg_<uuid> / tune_svm_<uuid> на том узле, где физически исполнялся driver-процесс trial'а — при работе на многих worker'ах это может быть не тот узел, с которого был запущен скрипт.