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

如何仅将当前Python脚本文件记录到W&B Code面板?

如何仅将当前脚本文件记录到W&B Code面板?

问题描述

我想在运行脚本时,只把当前脚本(比如train.py)记录到W&B的Code面板,而非整个目录。目前使用的实现代码:

wandb.run.log_code(f"./{os.path.basename(__file__)}")

需要确认该方法在不同环境下的可靠性,以及是否有针对此场景的更佳实践。

核心代码片段:

def _main(**kwargs):
    from datetime import datetime
    today = datetime.now().strftime('%Y_m%m_d%d_t%Hh_%Mm_%Ss') # eg '2024_m01_d22_t13h_00m_30s'
    run_name = f'{today}' 
    kwargs = kwargs | {'today': today}
    run = wandb.init(mode=kwargs.get('mode', 'online'), project="putnam-axiom", name=run_name, save_code=True, config=kwargs)
    wandb.run.log_code(f"./{os.path.basename(__file__)}") # maybe logscode immediately
    os.environ['CUDA_VISIBLE_DEVICES'] = str(6)
    output_dir = main(**kwargs)
    run_eval_logic_contamination(output_dir)
    run.alert(title="Run Completed", text=f"Run finished, run url: {run.get_url()}")
    print(f'{run.get_url()=}')
    wandb.finish()

解答

一、当前方法的可靠性

你的方法在绝大多数环境下是可靠的,但需注意以下细节:

  • os.path.basename(__file__)能准确获取当前主脚本的文件名,直接运行脚本时不会有问题;
  • 相对路径./依赖当前工作目录,若脚本从其他目录启动(比如用绝对路径执行脚本),可能出现文件找不到的情况,建议改用绝对路径规避:
    wandb.run.log_code(os.path.abspath(__file__))
    
  • 脚本文件名含特殊字符时,该方法依然有效,因为W&B的log_code支持单个文件路径作为参数。

二、更佳实践

1. 关闭自动代码保存

当前wandb.init中设置了save_code=True,这会自动记录整个目录的代码,和手动log_code单个文件的操作冲突,建议改为save_code=False,避免冗余记录:

run = wandb.init(mode=kwargs.get('mode', 'online'), project="putnam-axiom", name=run_name, save_code=False, config=kwargs)

2. 优先使用绝对路径

用os.path.abspath(__file__)替代相对路径,彻底避免工作目录变化带来的文件定位问题:

import os
wandb.run.log_code(os.path.abspath(__file__))

3. 按需记录依赖脚本

如果主脚本依赖其他本地模块(比如示例中的train目录下的文件),可通过log_code的include参数指定需要记录的文件列表,而非整个目录:

wandb.run.log_code(
    root=".",
    include=[
        os.path.basename(__file__),
        "train/callbacks.py",
        "train/data.py"
    ]
)

4. 尽早调用log_code

你当前在wandb.init后立刻调用log_code是合理的,能确保训练开始前就记录下当前脚本的状态,避免训练过程中脚本被修改导致记录不一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:04:54