blob: 5ff49a70859f1d1041df7d803642f3de83ac0b7f [file] [log] [blame]
/************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
use pgrx::prelude::*;
pgrx::pg_module_magic!();
use serde_json::json;
use std::collections::HashMap;
pub mod bindings;
extern crate serde_derive;
/*
* @param mini_batch: mini_batch of data. Assume all columns are string type in
* libsvm codding
*/
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "profiling_filtering_phase")]
#[allow(unused_variables)]
pub fn profiling_filtering_phase(mini_batch: String, config_file: String) -> String {
let mut task_map = HashMap::new();
task_map.insert("mini_batch", mini_batch);
task_map.insert("config_file", config_file);
let task_json = json!(task_map).to_string();
crate::bindings::ms::profiling_filtering_phase(&task_json).to_string()
}
/*
* @param mini_batch: training for one iteration.
* libsvm codding
*/
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "profiling_refinement_phase")]
#[allow(unused_variables)]
pub fn profiling_refinement_phase(mini_batch: String, config_file: String) -> String {
let mut task_map = HashMap::new();
task_map.insert("mini_batch", mini_batch);
task_map.insert("config_file", config_file);
let task_json = json!(task_map).to_string();
crate::bindings::ms::profiling_refinement_phase(&task_json).to_string()
}
/*
* @param mini_batch: training for one iteration.
* libsvm codding
*/
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "coordinator")]
#[allow(unused_variables)]
pub fn coordinator(time_score: String, time_train: String, time_budget: String, only_phase1: bool,
config_file: String) -> String {
let mut task_map = HashMap::new();
task_map.insert("budget", time_budget);
task_map.insert("score_time_per_model", time_score);
task_map.insert("train_time_per_epoch", time_train);
task_map.insert("only_phase1", only_phase1.to_string());
task_map.insert("config_file", config_file);
let task_json = json!(task_map).to_string();
crate::bindings::ms::coordinator(&task_json).to_string()
}
/*
* @param mini_batch: mini_batch of data. Assume all columns are string type in
* libsvm codding
*/
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "filtering_phase")]
#[allow(unused_variables)]
pub fn filtering_phase(mini_batch: String, n: i32, k: i32, config_file: String) -> String {
let mut task_map = HashMap::new();
task_map.insert("mini_batch", mini_batch);
task_map.insert("n", n.to_string());
task_map.insert("k", k.to_string());
task_map.insert("config_file", config_file);
let task_json = json!(task_map).to_string();
crate::bindings::ms::filtering_phase(&task_json).to_string()
}
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "refinement_phase")]
#[allow(unused_variables)]
pub fn refinement_phase(config_file: String) -> String {
let mut task_map = HashMap::new();
task_map.insert("config_file", config_file);
let task_json = json!(task_map).to_string();
crate::bindings::ms::refinement_phase().to_string()
}
/*
End-2-End model selection, All in UDF runtime.
*/
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "model_selection")]
#[allow(unused_variables)]
pub fn model_selection(mini_batch: String, time_budget: String, config_file: String) -> String {
let mut task_map = HashMap::new();
task_map.insert("mini_batch", mini_batch);
task_map.insert("budget", time_budget);
task_map.insert("config_file", config_file);
let task_json = json!(task_map).to_string();
crate::bindings::ms::model_selection(&task_json).to_string()
}
/*
* @param mini_batch: mini_batch of data. Assume all columns are string type in
* libsvm codding
*/
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "model_selection_workloads")]
#[allow(unused_variables)]
pub fn model_selection_workloads(mini_batch: String, n: i32, k: i32, config_file: String) -> String {
let mut task_map = HashMap::new();
task_map.insert("mini_batch", mini_batch);
task_map.insert("n", n.to_string());
task_map.insert("k", k.to_string());
task_map.insert("config_file", config_file);
let task_json = json!(task_map).to_string();
crate::bindings::ms::model_selection_workloads(&task_json).to_string()
}
// this two are filtering + refinement in GPU server
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "model_selection_trails")]
#[allow(unused_variables)]
pub fn model_selection_trails(mini_batch: String, time_budget: String, config_file: String) -> String {
let mut task_map = HashMap::new();
task_map.insert("mini_batch", mini_batch);
task_map.insert("budget", time_budget);
task_map.insert("config_file", config_file);
let task_json = json!(task_map).to_string();
crate::bindings::ms::model_selection_trails(&task_json).to_string()
}
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "model_selection_trails_workloads")]
#[allow(unused_variables)]
pub fn model_selection_trails_workloads(mini_batch: String, n: i32, k: i32, config_file: String) -> String {
let mut task_map = HashMap::new();
task_map.insert("mini_batch", mini_batch);
task_map.insert("n", n.to_string());
task_map.insert("k", k.to_string());
task_map.insert("config_file", config_file);
let task_json = json!(task_map).to_string();
crate::bindings::ms::model_selection_trails_workloads(&task_json).to_string()
}
// micro benchmarks
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "benchmark_filtering_phase_latency")]
#[allow(unused_variables)]
pub fn benchmark_filtering_phase_latency(explore_models: i32, config_file: String) -> String {
let mut task_map = HashMap::new();
task_map.insert("explore_models", explore_models.to_string());
task_map.insert("config_file", config_file);
let task_json = json!(task_map).to_string();
crate::bindings::ms::benchmark_filtering_phase_latency(&task_json).to_string()
}
#[cfg(feature = "python")]
#[pg_extern(immutable, parallel_safe, name = "benchmark_filtering_latency_in_db")]
#[allow(unused_variables)]
pub fn benchmark_filtering_latency_in_db(
explore_models: i32, dataset: String, config_file: String) -> String {
crate::bindings::ms::benchmark_filtering_latency_in_db(explore_models, &dataset, &config_file).to_string()
}