首页 > 其他分享 >LLaVA 从零复现 第一天

LLaVA 从零复现 第一天

时间:2023-05-24 23:13:24浏览次数:43  
标签:bin 第一天 weight args pytorch LLaVA 复现 00002 model

1. 准备数据

1.1 预训练数据

目前看来数据部分是两类数据,一类是预训练数据

需要下载对应的图像

这部分数据是过滤版的CC-3M,上面图片量是59w,是300w图像的过滤版本

结构
{
      "id": "GCC_train_002582585", 
      "image": "GCC_train_002582585.jpg", 
      "caption": "olive oil is a healthy ingredient used liberally .", 
      "blip_caption": "some olive oil and salt in a glass bottle", 
      "url": "https://i.pinimg.com/736x/de/13/3a/de133a155c777a9db265bb3e7888719d--colombo-olive-oils.jpg"
}

2.下载LLaVA权重

这里是说需要预留这些空间,因为一个9B的模型需要12.5G空间,这里会下载两个模型(12.5+12.5=25),并且合并模型所需的参数(25+12.5=37.5),看代码

base_model是llama模型,delta是llava_llama模型。可以看到词表大小是不一样的,比llama多4

然后上面步骤不是会生成相应的模型吗,这个就是加了权重后的模型,然后我们需要把里面的这三部分参数单独拎出来

    # {'pytorch_model-00001-of-00002.bin': ['model.embed_tokens.weight'], '
    # pytorch_model-00002-of-00002.bin': ['model.mm_projector.bias', 'model.mm_projector.weight']})

def parse_args():
    parser = argparse.ArgumentParser(description='Extract MMProjector weights')
    parser.add_argument('--model_name_or_path', type=str, help='model folder')
    parser.add_argument('--output', type=str, help='output file')
    args = parser.parse_args()
    return args

if __name__ == '__main__':
    args = parse_args()
    model_indices = json.load(open(os.path.join(args.model_name_or_path, 'pytorch_model.bin.index.json')))

    keys_to_match = ['mm_projector', 'embed_tokens', 'transformer.wte']
    ckpt_to_key = defaultdict(list)
    for k, v in model_indices['weight_map'].items():
        #model.layers.21.mlp.up_proj.weight pytorch_model - 00001 - of - 00002.bin
        #model.layers.21.post_attention_layernorm.weight pytorch_model - 00001 - of - 00002.bin
        if any(key_match in k for key_match in keys_to_match):
            ckpt_to_key[v].append(k)

    loaded_weights = {}
    #defaultdict(<class 'list'>,
    # {'pytorch_model-00001-of-00002.bin': ['model.embed_tokens.weight'], '
    # pytorch_model-00002-of-00002.bin': ['model.mm_projector.bias', 'model.mm_projector.weight']})

    for ckpt_name, weight_keys in ckpt_to_key.items():
        #pytorch_model-00001-of-00002.bin
        #['model.embed_tokens.weight']
        ckpt = torch.load(os.path.join(args.model_name_or_path, ckpt_name), map_location='cpu')
        for k in weight_keys:
            loaded_weights[k] = ckpt[k]
        #单取这几个参数,组成
        # {'pytorch_model-00001-of-00002.bin': ['model.embed_tokens.weight'], '
        # pytorch_model-00002-of-00002.bin': ['model.mm_projector.bias', 'model.mm_projector.weight']})

    torch.save(loaded_weights, '/data1/xuxing/hjb/LLaVA-main/checkpoints/llava-13b-pretrain.bin')

3. 下载COCO数据,进行数据处理

标签:bin,第一天,weight,args,pytorch,LLaVA,复现,00002,model
From: https://www.cnblogs.com/Tsukinousag1/p/17429817.html

相关文章

  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    二分查找给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4示例2:输入:nums=[-1,0,3,......
  • 文件包含第一天
    目录787980普通文件包含常见的php伪协议大致四种1.php://filter主要用于读取源码2.php://input经常使用file_get_contents获取php://input内容3.data://执行命令4.file://访问本地文件系统78观察一下,没有过滤,可以直接使用功能php://filter伪协议payload:?file=p......
  • php特性第一天
    目录899091929394959697989989preg_match()返回pattern的匹配次数。它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后将会停止搜索。preg_match_all()不同于此,它会一直搜索subject直到到达结尾。如果发生错误preg_match()返回FALSE。get方式传入num参数,然后通......
  • 第一天
    按照知识星球上推荐的Java学习路线,先从韩顺平0基础Java教程开始看第一天学习历程当前时间:2023-05-2323:36从最基础的输出helloworld开始。学习Java类的概念,编译、运行的过程转义字符的基础了解Java注释类型,包括单行注释、多行注释、文本注释Java数据类型大致分类......
  • 小迪安全 第一天
    DNS(域名系统)服务协议:一种分布式网络目录服务,用于域名与IP地址的相互转换,以及控制因特网的电子邮件的发送。本地hosts与dns的关系:客户端通过域名请求服务,如果你在本地的hosts文件中配置了该域名与ip的映射关系,那么,请求就会直接发送到hosts文件中对应的ip,不会通过dns解析(如果本地......
  • 从数字三角形开始的DP生活——第一天
    题目链接#include<iostream>usingnamespacestd;constintN=1e3+5;intn;intf[N][N],a[N][N],ans;intmain(){ ios::sync_with_stdio(0); cin.tie(0);cout<<fixed; cin>>n; for(inti=1;i<=n;i++) for(intj=1;j<=i;j++) cin>>a......
  • 【代码随想录算法训练营第一天】704. 二分查找、27. 移除元素
    Day1-数组Leetcode704二分查找初解已经不记得二分查找了,遍历找O(n)其实也过了,只是借此复习一下二分,确实快很多。二分的前提条件题目里也都明示了:无重复,(从小到大)排序。我没有用到这个条件,自然时间复杂度高于最优解。看完解答我再看了一眼题目的标题,才知道是考BinarySearch嗯......
  • 架构学习第一天
    1.架构分类  业务架构:业务战略,治理,组织和关键业务流程(L2级别).横向跨阶段,纵向跨流程  数据架构:组织的各类逻辑和物理数据资产以及数据管理资源的结构(用数据形成资产)  应用架构:部署的单个应用系统及系统之间的交互(总线式和微服务),以及它们与组织核心业务流程  ......
  • 代码复现:基于主从博弈的主动配电网阻塞管理 采用双层模
    代码复现:基于主从博弈的主动配电网阻塞管理采用双层模型进行求解上层决策边际报价,下层求解出清电价和运行方案反馈到上层,反复迭代出结果。上层和下层均采用自适应粒子群算法进行求解考虑四种场景场景1考虑可中断负荷和可调节负荷以及电压约束场景2考虑电动汽车和储能以及电压约束......
  • matlab复现,考虑综合需求响应和阶梯型碳交易机制的综合能源系统优化调度策略。
    matlab复现,考虑综合需求响应和阶梯型碳交易机制的综合能源系统优化调度策略。关键词,综合能源系统,碳交易机制,综合需求响应。matlab复现,考虑综合需求响应和阶梯型碳交易机制的综合能源系统优化调度策略。关键词,综合能源系统,碳交易机制,综合需求响应。YID:4280669326294816......