You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_python_log.py 4.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. from flaml.tune.space import unflatten_hierarchical
  2. from flaml import AutoML
  3. from sklearn.datasets import fetch_california_housing
  4. import os
  5. import unittest
  6. import logging
  7. import tempfile
  8. import io
  9. class TestLogging(unittest.TestCase):
  10. def test_logging_level(self):
  11. from flaml import logger, logger_formatter
  12. with tempfile.TemporaryDirectory() as d:
  13. training_log = os.path.join(d, "training.log")
  14. # Configure logging for the FLAML logger
  15. # and add a handler that outputs to a buffer.
  16. logger.setLevel(logging.INFO)
  17. buf = io.StringIO()
  18. ch = logging.StreamHandler(buf)
  19. ch.setFormatter(logger_formatter)
  20. logger.addHandler(ch)
  21. # Run a simple job.
  22. automl = AutoML()
  23. automl_settings = {
  24. "time_budget": 1,
  25. "metric": "rmse",
  26. "task": "regression",
  27. "log_file_name": training_log,
  28. "log_training_metric": True,
  29. "n_jobs": 1,
  30. "model_history": True,
  31. "keep_search_state": True,
  32. "learner_selector": "roundrobin",
  33. }
  34. X_train, y_train = fetch_california_housing(return_X_y=True)
  35. n = len(y_train) >> 1
  36. print(automl.model, automl.classes_, automl.predict(X_train))
  37. automl.fit(
  38. X_train=X_train[:n],
  39. y_train=y_train[:n],
  40. X_val=X_train[n:],
  41. y_val=y_train[n:],
  42. **automl_settings
  43. )
  44. logger.info(automl.search_space)
  45. logger.info(automl.low_cost_partial_config)
  46. logger.info(automl.points_to_evaluate)
  47. logger.info(automl.cat_hp_cost)
  48. import optuna as ot
  49. study = ot.create_study()
  50. from flaml.tune.space import define_by_run_func, add_cost_to_space
  51. sample = define_by_run_func(study.ask(), automl.search_space)
  52. logger.info(sample)
  53. logger.info(unflatten_hierarchical(sample, automl.search_space))
  54. add_cost_to_space(
  55. automl.search_space, automl.low_cost_partial_config, automl.cat_hp_cost
  56. )
  57. logger.info(automl.search_space["ml"].categories)
  58. if automl.best_config:
  59. config = automl.best_config.copy()
  60. config["learner"] = automl.best_estimator
  61. automl.trainable({"ml": config})
  62. from flaml import tune, BlendSearch
  63. from flaml.automl import size
  64. from functools import partial
  65. low_cost_partial_config = automl.low_cost_partial_config
  66. search_alg = BlendSearch(
  67. metric="val_loss",
  68. mode="min",
  69. space=automl.search_space,
  70. low_cost_partial_config=low_cost_partial_config,
  71. points_to_evaluate=automl.points_to_evaluate,
  72. cat_hp_cost=automl.cat_hp_cost,
  73. resource_attr=automl.resource_attr,
  74. min_resource=automl.min_resource,
  75. max_resource=automl.max_resource,
  76. config_constraints=[
  77. (partial(size, automl._state), "<=", automl._mem_thres)
  78. ],
  79. metric_constraints=automl.metric_constraints,
  80. )
  81. analysis = tune.run(
  82. automl.trainable,
  83. search_alg=search_alg, # verbose=2,
  84. time_budget_s=1,
  85. num_samples=-1,
  86. )
  87. print(min(trial.last_result["val_loss"] for trial in analysis.trials))
  88. config = analysis.trials[-1].last_result["config"]["ml"]
  89. automl._state._train_with_config(config["learner"], config)
  90. for _ in range(3):
  91. print(
  92. search_alg._ls.complete_config(
  93. low_cost_partial_config,
  94. search_alg._ls_bound_min,
  95. search_alg._ls_bound_max,
  96. )
  97. )
  98. # Check if the log buffer is populated.
  99. self.assertTrue(len(buf.getvalue()) > 0)
  100. import pickle
  101. with open("automl.pkl", "wb") as f:
  102. pickle.dump(automl, f, pickle.HIGHEST_PROTOCOL)
  103. print(automl.__version__)
  104. pred1 = automl.predict(X_train)
  105. with open("automl.pkl", "rb") as f:
  106. automl = pickle.load(f)
  107. pred2 = automl.predict(X_train)
  108. delta = pred1 - pred2
  109. assert max(delta) == 0 and min(delta) == 0
  110. automl.save_best_config("test/housing.json")