Files
2026-07-13 13:17:40 +08:00

246 lines
6.3 KiB
Python

# flake8: noqa
# isort: skip_file
# TODO: [V2] Deprecated doc code to delete.
import os
os.environ["RAY_TRAIN_V2_ENABLED"] = "0"
# __basic_start__
import ray
import ray.tune
import ray.train
from ray.tune import Tuner
from ray.train.xgboost import XGBoostTrainer
dataset = ray.data.read_csv("s3://anonymous@air-example-data/breast_cancer.csv")
trainer = XGBoostTrainer(
label_column="target",
params={
"objective": "binary:logistic",
"eval_metric": ["logloss", "error"],
"max_depth": 4,
},
datasets={"train": dataset},
scaling_config=ray.train.ScalingConfig(num_workers=2),
)
# Create Tuner
tuner = Tuner(
trainer,
# Add some parameters to tune
param_space={"params": {"max_depth": ray.tune.choice([4, 5, 6])}},
# Specify tuning behavior
tune_config=ray.tune.TuneConfig(metric="train-logloss", mode="min", num_samples=2),
)
# Run tuning job
tuner.fit()
# __basic_end__
# __xgboost_start__
import ray.data
import ray.train
import ray.tune
from ray.tune import Tuner
from ray.train.xgboost import XGBoostTrainer
dataset = ray.data.read_csv("s3://anonymous@air-example-data/breast_cancer.csv")
# Create an XGBoost trainer
trainer = XGBoostTrainer(
label_column="target",
params={
"objective": "binary:logistic",
"eval_metric": ["logloss", "error"],
"max_depth": 4,
},
num_boost_round=10,
datasets={"train": dataset},
)
param_space = {
# Tune parameters directly passed into the XGBoostTrainer
"num_boost_round": ray.tune.randint(5, 20),
# `params` will be merged with the `params` defined in the above XGBoostTrainer
"params": {
"min_child_weight": ray.tune.uniform(0.8, 1.0),
# Below will overwrite the XGBoostTrainer setting
"max_depth": ray.tune.randint(1, 5),
},
# Tune the number of distributed workers
"scaling_config": ray.train.ScalingConfig(num_workers=ray.tune.grid_search([1, 2])),
}
tuner = Tuner(
trainable=trainer,
run_config=ray.tune.RunConfig(name="test_tuner_xgboost"),
param_space=param_space,
tune_config=ray.tune.TuneConfig(
mode="min", metric="train-logloss", num_samples=2, max_concurrent_trials=2
),
)
result_grid = tuner.fit()
# __xgboost_end__
# __torch_start__
import os
import ray.train
import ray.tune
from ray.tune import Tuner
from ray.train.examples.pytorch.torch_linear_example import (
train_func as linear_train_func,
)
from ray.train.torch import TorchTrainer
trainer = TorchTrainer(
train_loop_per_worker=linear_train_func,
train_loop_config={"lr": 1e-2, "batch_size": 4, "epochs": 10},
scaling_config=ray.train.ScalingConfig(num_workers=1, use_gpu=False),
)
param_space = {
# The params will be merged with the ones defined in the TorchTrainer
"train_loop_config": {
# This is a parameter that hasn't been set in the TorchTrainer
"hidden_size": ray.tune.randint(1, 4),
# This will overwrite whatever was set when TorchTrainer was instantiated
"batch_size": ray.tune.choice([4, 8]),
},
# Tune the number of distributed workers
"scaling_config": ray.train.ScalingConfig(num_workers=ray.tune.grid_search([1, 2])),
}
tuner = Tuner(
trainable=trainer,
run_config=ray.tune.RunConfig(
name="test_tuner", storage_path=os.path.expanduser("~/ray_results")
),
param_space=param_space,
tune_config=ray.tune.TuneConfig(
mode="min", metric="loss", num_samples=2, max_concurrent_trials=2
),
)
result_grid = tuner.fit()
# __torch_end__
# __tune_dataset_start__
import ray.data
import ray.tune
from ray.data.preprocessors import StandardScaler
def get_dataset():
ds1 = ray.data.read_csv("s3://anonymous@air-example-data/breast_cancer.csv")
prep_v1 = StandardScaler(["worst radius", "worst area"])
ds1 = prep_v1.fit_transform(ds1)
return ds1
def get_another_dataset():
ds2 = ray.data.read_csv(
"s3://anonymous@air-example-data/breast_cancer_with_categorical.csv"
)
prep_v2 = StandardScaler(["worst concavity", "worst smoothness"])
ds2 = prep_v2.fit_transform(ds2)
return ds2
dataset_1 = get_dataset()
dataset_2 = get_another_dataset()
tuner = ray.tune.Tuner(
trainer,
param_space={
"datasets": {
"train": ray.tune.grid_search([dataset_1, dataset_2]),
}
# Your other parameters go here
},
)
# __tune_dataset_end__
# __tune_optimization_start__
from ray.tune.search.bayesopt import BayesOptSearch
from ray.tune.schedulers import HyperBandScheduler
from ray.tune import TuneConfig
config = TuneConfig(
# ...
search_alg=BayesOptSearch(),
scheduler=HyperBandScheduler(),
)
# __tune_optimization_end__
# __result_grid_inspection_start__
from ray.tune import Tuner, TuneConfig
tuner = Tuner(
trainable=trainer,
param_space=param_space,
tune_config=TuneConfig(mode="min", metric="loss", num_samples=5),
)
result_grid = tuner.fit()
num_results = len(result_grid)
# Check if there have been errors
if result_grid.errors:
print("At least one trial failed.")
# Get the best result
best_result = result_grid.get_best_result()
# And the best checkpoint
best_checkpoint = best_result.checkpoint
# And the best metrics
best_metric = best_result.metrics
# Or a dataframe for further analysis
results_df = result_grid.get_dataframe()
print("Shortest training time:", results_df["time_total_s"].min())
# Iterate over results
for result in result_grid:
if result.error:
print("The trial had an error:", result.error)
continue
print("The trial finished successfully with the metrics:", result.metrics["loss"])
# __result_grid_inspection_end__
# __run_config_start__
import ray.tune
run_config = ray.tune.RunConfig(
name="MyExperiment",
storage_path="s3://...",
checkpoint_config=ray.tune.CheckpointConfig(checkpoint_frequency=2),
)
# __run_config_end__
# __tune_config_start__
from ray.tune import TuneConfig
from ray.tune.search.bayesopt import BayesOptSearch
tune_config = TuneConfig(
metric="loss",
mode="min",
max_concurrent_trials=10,
num_samples=100,
search_alg=BayesOptSearch(),
)
# __tune_config_end__
# __tune_restore_start__
tuner = Tuner.restore(
path=os.path.expanduser("~/ray_results/test_tuner"),
trainable=trainer,
restart_errored=True,
)
tuner.fit()
# __tune_restore_end__