Created by: voorhs
Лаконичный пример работы с новым апи для оптимизации пайплайна.
# load data
from autointent.context.data_handler import Dataset
from autointent.context.utils import load_data
train_dataset = load_data("./data/train_data.json")
val_dataset = load_data("./data/test_data.json")
# define search space
from autointent.pipeline.optimization import PipelineOptimizer
config = {
"nodes": [
{
"node_type": "scoring",
"metric": "scoring_roc_auc",
"search_space": [
{"module_type": "knn", "k": [5, 10], "weights": ["uniform", "distance", "closest"], "model_name": ["avsolatorio/GIST-small-Embedding-v0"]},
{"module_type": "linear", "model_name": ["avsolatorio/GIST-small-Embedding-v0"]},
],
},
{
"node_type": "prediction",
"metric": "prediction_accuracy",
"search_space": [
{"module_type": "threshold", "thresh": [0.5]},
{"module_type": "tunable"},
],
},
]
}
pipeline_optimizer = PipelineOptimizer.from_dict_config(config)
# optionally, configure your run
from autointent.configs.optimization_cli import LoggingConfig, VectorIndexConfig, EmbedderConfig
from pathlib import Path
pipeline_optimizer.set_config(LoggingConfig(run_name="sweet_cucumber", dirpath=Path(".").resolve(), dump_modules=False))
pipeline_optimizer.set_config(VectorIndexConfig(db_dir=Path("./my_vector_db").resolve(), device="cuda"))
pipeline_optimizer.set_config(EmbedderConfig(batch_size=16, max_length=32))
# run optimization
context = pipeline_optimizer.optimize_from_dataset(train_dataset, val_dataset)
# dump logs
context.dump()
Еще из фич:
- инициализация
Contextтеперь не такая громоздкая - модули можно не дампить, если указать
logs.dump_modules=Falseв конфиге
TODO:
- опция очищать ли модули из RAM (т.е. убрать gc.collect() и проч по запросу пользователя)
- очистка db_dir по запросу пользователя
- fix unintended runs directory creation