数据与AI
用 Pydantic 参数为 marimo…
当要把 marimo notebook 改造成既能用 UI 调参迭代、又能通过 CLI 定时或批处理运行的脚本,并需要环境变量、W&B、columns 与网格搜索支持时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 Pydantic 参数为 marim特定
解决思路
- 用 Pydantic BaseModel 声明批处理任务的参数真源,例如 `ModelParams`,字段用 `Field(default=..., description=...)` 描述默认值和用途;ML 场景可包含 `sample_size`、`learning_rate` 等。
- 在 marimo 中用 UI 表单填写这些参数:用 `mo.md("{sample_size}\n{learning_rate}").batch(sample_size=..., learning_rate=...).form()` 绑定控件(如 `mo.ui.slider`),作为交互模式参数来源。
- 同时实现 CLI 模式:判断 `mo.app_meta().mode == "script"`,在脚本模式下从 `mo.cli_args()` 读取参数。
- 为 CLI 添加帮助/空参数处理:如果 `"help" in mo.cli_args()` 或参数为空,打印 Usage(如 `uv run git_archaeology.py --repo <url> [--samples <n>]`),并遍历 `ModelParams.model_fields` 输出每个参数的 description 和 default/required,然后 `exit()`。
- 将 CLI 参数名中的连字符替换为下划线后实例化 ModelParams:`ModelParams(**{k.replace("-", "_"): v for k, v in mo.cli_args().items()})`。
- 非脚本模式则从 UI 表单取值实例化:`model_params = ModelParams(**el.value)`。
- 让用户可用命令行运行,如 `uv run notebook.py --sample-size 4096 --learning-rate 0.005`,以实现 UI 迭代测试和 CLI 批处理运行同在。
- 利用该模式用小样本/快速参数运行 notebook,以检查 batch job 中是否存在 bug。
- 在动手修改前,先询问用户哪些参数希望暴露为 CLI 可配置项,并让用户确认改动后再修改 notebook。
- 确认用户是否需要 Weights & Biases 支持(yes/no)。如果需要,确保将 ModelParams 记录到 W&B,并将 `wandb_project` 和 `wandb_run_name` 加入 ModelParams。
- 如果用户要启动 ML 训练任务,使用 `references/starting-point.py` 作为起点。
- 保持 `references/starting-point.py` notebook 中的 columns 不变。
- 如需读取环境变量,用 python-dotenv 读取存在的 `.env` 文件;同时在 notebook 顶部添加 `EnvConfig`,让用户可在 UI 中手动填写 key。
- 用 wigglystuff 的 EnvConfig 声明并校验环境变量,例如 `OPENAI_API_KEY` 用 openai client 验证、`WANDB_API_KEY` 用 `wandb.login(key=k, verify=True)` 验证;在需要 key 的 cell 中调用 `config.require_valid()` 阻塞直到有效,并用 `config["KEY"]` 或 `config.get("KEY", default)` 访问。
- 对大型 marimo notebook 的 columns 布局,保持 columns 完整;如需插入 cell,继续使用 `@app.cell(column=0, hide_code=True)` 等保持列归属。
- 准备正式计算时,考虑数据集 batch size,并添加充足日志,便于用户发现运行问题。
- 当用户要运行超参数 sweep,指向 `references/grid.py`;该脚本与 `references/starting-point.py` 开箱配合,从与 `ModelParams` 字段匹配的搜索空间中随机采样组合,并把每个组合作为独立 job 启动。
- 网格搜索默认先 dry run:运行 `uv run grid.py` 检查组合;确认后再传 `--launch` 真正提交 job。用 `--count` 控制采样组合数,用 `--seed` 控制 RNG 种子。
- 网格启动器参考实现使用 Hugging Face Jobs 作为计算提供方,但可替换为 Modal、RunPod 或任何能运行 uv script 的提供方。
适用边界 · 注意事项
- 当 notebook 不是 marimo,或不能用 `mo.app_meta()`/`mo.cli_args()` 时,这套 UI+CLI 双模式不适用。
- 当用户只做一次性交互分析、不需要 CLI/定时/批处理运行时,不必引入 Pydantic ModelParams 和 CLI 分支。
- 当用户未确认要暴露的 CLI 参数或不允许修改 notebook/columns 时,不应直接实施改动。