mirror of
https://github.com/wassname/optuna-dashboard.git
synced 2026-09-07 17:10:07 +08:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
import uuid
|
|
|
|
import optuna
|
|
from optuna.trial import TrialState
|
|
from optuna_dashboard.artifact.file_system import FileSystemBackend
|
|
from optuna_dashboard.streamlit import render_objective_form_widgets
|
|
from optuna_dashboard.streamlit import render_trial_note
|
|
|
|
import streamlit as st
|
|
|
|
|
|
artifact_path = os.path.join(os.path.dirname(__file__), "artifact")
|
|
artifact_backend = FileSystemBackend(base_path=artifact_path)
|
|
|
|
|
|
def get_tmp_dir() -> str:
|
|
if "tmp_dir" not in st.session_state:
|
|
tmp_dir_name = str(uuid.uuid4())
|
|
tmp_dir_path = os.path.join(tempfile.gettempdir(), tmp_dir_name)
|
|
os.makedirs(tmp_dir_path, exist_ok=True)
|
|
st.session_state.tmp_dir = tmp_dir_path
|
|
|
|
return st.session_state.tmp_dir
|
|
|
|
|
|
def start_streamlit() -> None:
|
|
tmpdir = get_tmp_dir()
|
|
study = optuna.load_study(
|
|
storage="sqlite:///streamlit-db.sqlite3", study_name="Human-in-the-loop Optimization"
|
|
)
|
|
selected_trial = st.sidebar.selectbox("Trial", study.trials, format_func=lambda t: t.number)
|
|
|
|
if selected_trial is None:
|
|
return
|
|
render_trial_note(study, selected_trial)
|
|
artifact_id = selected_trial.user_attrs.get("artifact_id")
|
|
if artifact_id:
|
|
with artifact_backend.open(artifact_id) as fsrc:
|
|
tmp_img_path = os.path.join(tmpdir, artifact_id + ".png")
|
|
with open(tmp_img_path, "wb") as fdst:
|
|
shutil.copyfileobj(fsrc, fdst)
|
|
st.image(tmp_img_path, caption="Image")
|
|
|
|
if selected_trial.state == TrialState.RUNNING:
|
|
render_objective_form_widgets(study, selected_trial)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
start_streamlit()
|