You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:在Google Colaboratory中实现Optuna人机循环优化及工件集成

在Google Colab中实现带Artifacts的Optuna人机循环优化及Dashboard监控

一、Optuna Artifacts集成到Colab Dashboard的实现步骤

1. 安装必要依赖

先补充安装Optuna Artifacts及相关依赖:

!pip install optuna optuna-dashboard optuna-artifacts
# 若用Google Drive做持久化存储,无需额外安装,Colab自带相关支持

2. 配置Artifacts存储后端

Colab中推荐两种存储方案:

  • 临时本地存储:适合短期实验,会话结束后数据丢失
  • Google Drive挂载:适合长期保存artifacts,会话重启后可恢复

方案1:挂载Google Drive(推荐)

from google.colab import drive
drive.mount('/content/drive')

# 定义Drive上的artifacts存储路径
ARTIFACTS_DIR = "/content/drive/MyDrive/optuna_artifacts"
import os
os.makedirs(ARTIFACTS_DIR, exist_ok=True)

方案2:本地临时存储

ARTIFACTS_DIR = "/tmp/optuna_artifacts"
import os
os.makedirs(ARTIFACTS_DIR, exist_ok=True)

3. 关联Artifacts与Optuna Study

创建Study时绑定artifacts存储,同时在trial逻辑中添加artifacts保存代码:

import optuna
from optuna_artifacts import FileSystemArtifactStore
from optuna_artifacts import upload_artifact

# 初始化artifacts存储
artifact_store = FileSystemArtifactStore(base_path=ARTIFACTS_DIR)

# 创建Study并绑定存储
study = optuna.create_study(study_name="human_in_loop_opt", direction="maximize")
study._storage._artifact_store = artifact_store

# 带artifacts保存的目标函数
def objective(trial):
    # 示例优化逻辑:参数搜索与得分计算
    param1 = trial.suggest_float("param1", 0.1, 1.0)
    param2 = trial.suggest_int("param2", 1, 10)
    score = param1 * param2

    # 保存参数日志到artifacts
    with open("/tmp/trial_params.txt", "w") as f:
        f.write(f"param1: {param1}\nparam2: {param2}\nscore: {score}")
    upload_artifact(trial, "/tmp/trial_params.txt", "params_log.txt")

    # 保存可视化结果到artifacts(示例:得分趋势图)
    import matplotlib.pyplot as plt
    plt.plot([1,2,3], [param1, param2, score])
    plt.title("Trial Performance")
    plt.savefig("/tmp/score_trend.png")
    upload_artifact(trial, "/tmp/score_trend.png", "score_trend.png")

    return score

4. 启动带Artifacts支持的Dashboard

基于你参考的Stack Overflow代码,修改为支持artifacts的版本(以localtunnel为例):

import threading
import subprocess
import time

# 后台启动Dashboard
def run_dashboard():
    cmd = [
        "optuna-dashboard",
        "sqlite:///optuna_study.db",  # 与create_study对应的存储路径
        f"--artifact-store", f"file://{ARTIFACTS_DIR}"
    ]
    subprocess.run(cmd)

threading.Thread(target=run_dashboard, daemon=True).start()

# 启动localtunnel暴露端口
!npm install -g localtunnel
!lt --port 8080

运行后复制localtunnel生成的链接,即可在浏览器查看带artifacts的Dashboard,每个trial详情页会展示上传的文件。

二、Optuna人机循环优化的最佳实践

  • 设置明确的人工触发规则:比如连续3个trial目标值无提升、得分低于预设阈值时自动暂停,用回调实现:
    def intervention_callback(study, trial):
        if len(study.trials) >=3:
            recent_scores = [t.value for t in study.trials[-3:]]
            if max(recent_scores) <= study.best_value * 0.95:
                study.stop()
                print("触发人工干预:连续3个trial无明显提升")
    
    study.optimize(objective, n_trials=100, callbacks=[intervention_callback])
    
  • 人工调整后恢复优化:暂停后修改参数范围或目标逻辑,再继续优化,同时标记人工调整:
    # 调整后的目标函数
    def adjusted_objective(trial):
        param1 = trial.suggest_float("param1", 0.3, 1.0)  # 缩小参数范围
        param2 = trial.suggest_int("param2", 5, 10)
        score = param1 * param2
        # 添加人工调整标记
        trial.set_user_attr("adjustment", "narrowed param ranges")
        return score
    
    study.optimize(adjusted_objective, n_trials=50)
    
  • 用Dashboard辅助决策:通过Dashboard快速查看trial的参数、得分、artifacts(如性能图),无需在Colab中逐一排查日志。
  • 留存人工操作记录:把每次调整的原因、修改内容写入文本文件,作为artifacts绑定到对应trial,方便实验复盘。

三、Artifacts核心使用场景

  • 模型资产保存:每个trial训练的模型权重、配置文件,方便后续加载验证最优模型。
  • 实验日志留存:训练过程的输出日志、参数明细,用于排查实验异常。
  • 可视化结果归档:损失曲线、混淆矩阵等图表,直观展示trial性能。
  • 人工操作记录:将人工调整的决策原因、参数修改内容存入artifacts,形成完整实验链路。

内容的提问来源于stack exchange,提问作者Xixao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:36:16