2025.7.10学习日记【摸🐟去了,昨天的内容】

0.序

在开启今天的内容之前,想先说明下Autodl上远程主机扩展崩溃的问题,根据网上的经验,说是vscode的版本过高,需要回退到1.96.4版本,并禁止自动更新
【注】:如果你想使用Github带的copilot还是更新至最新版本比较好

1.torch.utils.data

torch.utils.data工具包括以下几个数据加载器(dataloader),数据集(dataset),采样器(sampler),以及用于分布式操作的(distributed)

  • Sampler:Sampler是采样器模块中的基类,子类包括顺序采样器,随机采样器,子集随机采样器(划分训练集/验证集),批次采样器(按照batch_size采样,默认小于批次的数据被丢弃)
  • DataLoader:DataLoader的参数说明如下:
    image

【组合使用】:在组合使用中,Pipeline为由Sampler决定读取的先后顺序,再有DataLoader根据Sampler的顺序装载数据;如果有BatchSampler会根将Sampler获得的迭代器拆分,然后再交由DataLoader装载批次数据.
实际情况中,通常需要重写模块,完成个性化的任务
例如在VGGT的训练任务中,作者重写了dataset类,dataloader
【注2】:对于内部模块有几点需要注意

  • _module.py表示为Python的内部模块,不建议外部代码直接导入;
  • 在进行from package import *,Python默认不会导入下划线开头的模块
  • Python对文件名不触发名称修饰,__module.py为正常的python文件

2.Hydra配置系统

在VGGT的训练文件里,介绍了一种由Facebook开发的一种开源框架,名称为Hydra,依赖于Yaml和omegaconf。

2.1 YAML

YAML是一种文本标记语言,对比其XML和Json的标记语言来说更为简介。YAML文件支持将键值对输入,支持列表输入(Markdown形式的列表或者Python形式的列表),支持引用

2.2 OmegaConf

理解为新字典和新列表即可
OmegaConf是python的第三方库,实现了DictConf和ListConf两个类,去代替Python原生的字典和列表。下面是OmegaConf的官方文档
https://omegaconf.readthedocs.io/en/2.3_branch/

在堆空间中,omegaconf对象可以从python的字典和列表来创建,可以从命令行中读取参数来创建,也可以从YAML文件来创建

  • 从原生对象创建:conf=OmegaConf.create(your_list:List)或者conf=OmegaConf.create(your_dict:Dict)
  • 从命令行创建:conf=OmegaConf.from_cli(),命令行参数的输入遵循DictConf字典的赋值方式。
    【注】:Notebook中想要模拟命令行参数需要采取如下做法,这里的script_name.py类似于占位符,不需要真实存在,作用是能够解析到后面的参数而已
import sys
sys.argv = ['script_name.py','key.value1=10']
conf = OmegaConf.from_cli()
print(OmegaConf.to_yaml(conf))
  • 从YAML文件创建:conf=OmegaConf.load('your_yaml_file')
    此外OmegaConf还支持将conf导出为yaml文件的格式print(OmegaConf.to_yaml(conf),并保存为yaml文件
with open('save_file','w') as f:
    OmegaConf.save(config=conf,f=f.name)

2.3 Hydra教程

Hydra官方文档的基础教程网址:https://hydra.cc/docs/tutorials/basic/your_first_app/simple_cli/

  1. 创建并指定配置文件
    Hydra使用装饰器与配置文件yaml,装饰器为函数hydra.main(),需要传入version_base,config_path,config_name.config_name为配置文件的文件名(yaml)
    【注】 config_name也可以是文件夹,此时被称为配置组
  • 可以通过命令行python my_app.py key.value=1的形式覆盖配置值,这并不会修改原配置的config文件
  • 还可以通过命令行python my_app.py ++key.value=1的形式增加或覆盖配置值,注意使用重加号,单独加号用于命令行添加配置组python my_app.py +Group=Option
  1. 使用config对象
    config对象是通过装饰器加上参数的形式传入应用函数中的
  2. 创建并为程序添加配置组
    创建配置组前需要创建一个目录,将配置文件存放到目录中,例如下图设置hydra.main()中的config_nameconf,此时设置了配置组,或者说设置了包
    image
    在没有指定时默认不导入配置组,可以通过命令行去添加python my_app.py +db=mysql
  3. 创建并为程序指定默认配置组
    创建cofig.yaml文件,这只hydra.main()中的config_nameconfig,config文件内部创建defaults关键词的list
    【注】:命令行添加相当于手动指定参数,创建config.yaml文件相当于添加了初始化文件。类似于python my_app.py --epochs 10与创建.sh文件并执行bash my_app.sh
  4. 组合运行
    利用config达到模块化组合管理,首先需要添加schema和ui配置组
    image
    而后编写config.yaml
    image
    最后将config传入hydra.main()中完成模块化组合管理

-1.ToDolist

  • 【 】Hydra在深度学习中如何使用
  • 【 】小智AI聊天机器人硬件清单了解。
  • 【 】完成VGGT在co3d数据集上的微调
posted @ 2025-07-11 20:00  BingUw  阅读(47)  评论(0)    收藏  举报