视觉-语言-动作大模型openvla类图
openvla的类图分为2个,第一个适用于前向推理(vla-scripts/deploy.py)和lora微调(vla-scripts/finetune.py),下面简称精简版,第二个适用于全量微调(vla-scripts/train.py),下面简称复杂版。精简版就是下面第一张图,它的类的数量会少很多,确实清爽一些(补充一下,复杂版式的类图其实比较复杂,下面的复杂版的图看起来简单是因为我把它画得
类图是一个项目代码的框架,可以站在更高的层次去看代码的逻辑流程,模块间相互关系。类似于下面这篇,我抽空把openvla的类图也画了一下,确实对理解代码非常有帮助。
openvla的类图分为2个,第一个适用于前向推理(vla-scripts/deploy.py)和lora微调(vla-scripts/finetune.py),下面简称精简版,第二个适用于全量微调(vla-scripts/train.py),下面简称复杂版。
为什么会这么复杂呢?
先说复杂版,作者在readme中也说了:For full fine-tuning,you will need to download a different version of the OpenVLA model checkpoint that is compatible with the Prismatic VLMs codebase, which we built on top of to develop the OpenVLA model。翻译一下就是作者在全量微调时,是基于Prismatic VLM(是一个通用的多模态大模型)的工作成果代码开发的,就是下面第二张图。同时这也解释了,为什么会有convert_openvla_weights_to_hf.py这个脚本来做模型格式转换,格式转换是复杂版转换为精简版。
精简版就是下面第一张图,它的类的数量会少很多,确实清爽一些(补充一下,复杂版式的类图其实比较复杂,下面的复杂版的图看起来简单是因为我把它画得简单了些,只画了重点,很多子类都没有画出来)。
总结一下,这2处版本其实是等价的:
OpenVLAForActionPrediction == OpenVLA
language_model == llm_backbone
projector == projector
vision_backbone == vision_backbone


有了这些宏观的理解后,再看deploy或finetune或train的代码时,其实都是套路,就干了几件事情:
1,类的加载,包括初始化与pretrained weight加载,包括主类,vision backbone,projector,processor, tokenizer等
2,使用lora finetune时,就用peft包装一下或者甚至自己实现lora也可以,(可参考DeepSpeedExamples库中DeepSpeed-Chat/training/step1_supervised_finetuning/training_scripts/opt/single_gpu/run_1.3b.sh,也挺简单的)
3,适配分布式训练环境:如果使用deepspeed就用DDP包装一下,用fsdp就用FSDP包装。fsdp整体会比deepspeed复杂很多。
3,创建optimizer,dataset,datasampler,dataloader,lr_scheduler等组件
4,训练:可以直接for循环自己遍历数据集(openvla是这种),也可以使用transformers库的trainer(senna是这种)
5,保存模型,格式转换等
更多推荐


所有评论(0)