首页 > 其他分享 >利用swift框架微调面壁小钢炮2.0

利用swift框架微调面壁小钢炮2.0

时间:2024-07-04 19:27:47浏览次数:26  
标签:面壁 上传 模型 合并 path model 2.0 swift

目录

注意事项

  • 2.0版本的模型需要大概10GB以上的显存,确保自己的显存够

环境准备

  1. 创建虚拟环境

conda create -n your_env_name python==3.10

  1. 克隆swift仓库

git clone https://github.com/modelscope/swift.git

  1. 进入仓库,安装必要的环境

cd swift
pip install -e ‘.[llm]’
推荐用清华源装
pip install -e ‘.[llm]’ -i https://pypi.tuna.tsinghua.edu.cn/simple

  1. 还需要安装一个特别的包,timm,这是一个图像分类库

pip install timm
推荐用清华源装
pip install timm -i https://pypi.tuna.tsinghua.edu.cn/simple

上传模型

  • 我喜欢将模型下载到本地,然后上传到服务器,看个人喜好,你也可以推理的时候直接下载,但是huggingface的访问速度很慢,你可以设置镜像

export HF_ENDPOINT=https://hf-mirror.com

模型下载链接:MiniCPM-V-2
我将模型上传到新建的model目录(上传到那,随意,只要空间够)下,如下图:
在这里插入图片描述

上传数据

  • 训练的数据格式如下,支持多轮对话,但是每轮对话只能上传一张图片,我的数据都是单轮问答,所以我的格式就只是第一行的格式。
{"query": "55555", "response": "66666", "images": ["image_path"]}
{"query": "eeeee", "response": "fffff", "history": [], "images": ["image_path"]}
{"query": "EEEEE", "response": "FFFFF", "history": [["AAAAA", "BBBBB"], ["CCCCC", "DDDDD"]], "images": ["image_path"]}

我的数据集格式如下:
在这里插入图片描述

  • 上传数据集的时候确保你的图片和数据集的json文件在同一目录,以确保使用相对路径可以找到他们。

开始微调

命令如下:
在这里插入图片描述

CUDA_VISIBLE_DEVICES=0
swift sft
–model_type minicpm-v-v2-chat
–dataset “/home/fanzhengjie/fsy/swift/swift.json”
–model_id_or_path “/home/fanzhengjie/fsy/swift/model/MiniCPM-V-2/”

  • CUDA_VISIBLE_DEVICES=0 指定哪一张卡来跑
  • swift sft 运行sft脚本
  • –dataset 给出数据集路径
  • –model_id_or_path 给出本地模型路径

跑起来是这样的
在这里插入图片描述

  • 可以看到他使用的是一个脚本
  • 日志和输出保存在output
  • 下图可以看出正在训练,可以看到他的各种参数保存的路径
    在这里插入图片描述
    跑完之后可以发现检查点有一个最新一个best,可以都去试试合并
    在这里插入图片描述

模型合并

  • 也可以直接推理,这里就不演示了
    模型合并如下:可以在输出中找到最新的检查点,或者最好的检查点进行合并。
    合并命令:

CUDA_VISIBLE_DEVICES=0 swift export
–ckpt_dir output/minicpm-v-v2-chat/vx-xxx/checkpoint-xxx
–merge_lora true

合并后推理

CUDA_VISIBLE_DEVICES=0 swift infer
–ckpt_dir output/minicpm-v-v2-chat/vx-xxx/checkpoint-xxx-merged
–load_dataset_config true

可能遇到的错误

  • NotImplementedError: Using RTX 4000 series doesn’t support faster communication broadband via P2P or IB. Please set NCCL_P2P_DISAB LE="1" and NCCL_IB_DISABLE="1" or use accelerate launch` which will do this automatically.
    详细错误如下图:
    在这里插入图片描述
  • 解决方案,设置两个环境变量:
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1

标签:面壁,上传,模型,合并,path,model,2.0,swift
From: https://blog.csdn.net/weixin_51074012/article/details/140082909

相关文章

  • [计算机网络]HTTP 1.0/HTTP 1.1/HTTP 2.0
    HTTP/1.0——无状态无连接的应用层协议无状态:服务器不跟踪不记录请求过的状态无连接:浏览器每次请求都需要建立tcp连接HTTP/1.0规定浏览器和服务器保持短暂的连接。浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户......
  • 适用于PyTorch 2.0.0的Ubuntu 22.04上CUDA v11.8和cuDNN 8.7安装指南
    将下面内容保存为install.bash,直接用shell执行一把梭解决#!/bin/bash###steps#####verifythesystemhasacuda-capablegpu#downloadandinstallthenvidiacudatoolkitandcudnn#setupenvironmentalvariables#verifytheinstallation######toverify......
  • 等保2.0必知要点!
    在这个信息爆炸的时代,数据已成为企业最宝贵的资产之一。等保2.0,即《信息安全技术网络安全等级保护基本要求》第二版,是我国信息安全领域的最新指导方针。它不仅更新了信息安全的标准,还拓宽了保护的范围,对于所有涉及信息处理的企业而言,等保2.0都是一份不容忽视的安全蓝图。以下......
  • springboot3(cloud 2022.0.0)整合seata1.7.1
    一、第一步下载对应版本的seata服务  二、修改conf下的application.yml配置注意:主要是连接nacos的一些配置:注册中心和服务发现的配置1#Copyright1999-2019Seata.ioGroup.2#3#LicensedundertheApacheLicense,Version2.0(the"License");4#you......
  • Http 1.0、 2.0 跟3.0
    HTTP(HypertextTransferProtocol)的不同版本在互联网的发展历程中扮演了关键角色,每一代版本都在努力提升网络应用的效率、安全性和互操作性。下面是HTTP/1.0、HTTP/2和HTTP/3的主要特点和改进之处:HTTP/1.0发布年代:1996年特点:每个请求/响应都建立在一个独立的TCP连接上。请......
  • c++使用matplotlibcpp,subplot() 报错问题-ubuntu22.04
    使用matplotlibcpp.h在C++代码中绘制图形plt::subplot();程序抛出运行时错误,terminatecalledafterthrowinganinstanceof'std::runtime_error'what():Calltosubplot()failed.解决方法:在matplotlibcpp.h文件中把PyTuple_SetItem(args,0,PyFloat_FromDouble(......
  • 网络安全等级保护2.0(等保2.0)全面解析
    一、等保2.0的定义和背景        网络安全等级保护2.0(简称“等保2.0”)是我国网络安全领域的基本制度、基本策略、基本方法。它是在《中华人民共和国网络安全法》指导下,对我国网络安全等级保护制度进行的重大升级。等保2.0的发布与实施,旨在全面强化我国网络安全保障能......
  • swift JSONString和字典互转
     extensionDictionary{publicfunctoJSONString()->String?{guardletdata=try?JSONSerialization.data(withJSONObject:self,options:[])else{returnnil}guardletstring=String(data:data,encoding......
  • Swift 新结构化并发中鲜为人知的 isolated 参数
    概述伴随着Swift5.5(WWDC21)推出的新结构化并发到今年的WWDC24已经有3个多年头了。想必大家都对其中async/awiat、asynclet、TaskGroup、Actor等各种概念都了然于胸了吧?不过小伙伴们可能不知道的是:新结构化并发(或叫现代结构化并发)中还有一个“隐藏宝藏”,它就是i......
  • Swift Combine — Debounce和Throttle的理解与使用
    Debounce和Throttle是两种常用的操作符,用于控制数据流的频率和处理延迟。但它们的实现方式略有不同。理解这些差异对于在Combine代码中做出正确选择至关重要。DebounceDebounce操作符用于限制数据流的频率,只有在指定的时间间隔内没有新数据到达时,才会将最后一个数据发......