【Python】科研代码学习:十七 模型参数合并,safetensors / bin

news2025/6/22 22:08:40

【Python】科研代码学习:十七 模型参数合并,safetensors / bin

  • 前言
  • 解决代码
  • 知识点:safetensors 和 bin 的区别?
  • 知识点:save_pretrained 还会新增的文件
  • 知识点:在保存模型参数时,大小发生了成倍的变化

前言

  • 众所周知,LLM的模型参数一般保存在 .safetensors 或者 .bin 结尾的大文件
    在这里插入图片描述
  • 但是通过一个 RLHF 的一个训练后,使用了 FSDP 分布式训练器
    所以把文件参数保存在了 .pt 文件中
    在这里插入图片描述
  • 那么问题来了,保存的参数我如何合并到模型里去,做其他推理任务呢?

解决代码

  • 经过复杂的尝试和询问,然后使用下面的几个方法就成功了
    第一步,加载初始的模型,使用 .from_pretrained 即可加载本地模型的参数
    第二步,加载 policy.pt 里面的 state 的内容,使用 model.load_state_dict 即可使用这些参数来覆盖原始模型的参数
    第三步,保存模型参数到文件夹,使用 model.save_pretrained 即可
def FSDP_model_merge(model_path : str, pt_path : str, output_path : str):
    print("Loading Model")
    model = LlamaForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16)
    print("Loading Checkpoint")
    model.load_state_dict(torch.load(pt_path)['state'])
    print("Saving Model")
    model.save_pretrained(output_path,safe_serialization=True, torch_dtype=torch.float16)
    print("Done")

知识点:safetensors 和 bin 的区别?

  • 【知乎】
    简单来说,bin 是通用的二进制存储文件
    safetensors 是更加安全的文件,专门存储张量数据
    所以这两者都可以存模型的参数
  • 如何设置保存的时候使用哪个格式?
    model.save_pretrained() 方法里面的 safe_serialization 设置成 True 的话,就会用 safetensors 格式了,注意不同 transformers 版本的该方法的 safe_serialization 的默认值是不同的(较新的版本该值默认为 True,较老的为 False
  • 看了下,貌似对于文件保存的大小来说,几乎没什么差异

知识点:save_pretrained 还会新增的文件

  • model.save_pretrained 方法调用后,在文件夹中其实还会新增/替换这几个文件:
    config.json
    generation_config.json
    model.safetensors.index.json
  • model.safetensors.index.json 的文件主要是参数和文件的存储关系映射
    以及可以从 total_size 中查看模型的参数大小
    比如这里,13476839424,除以 1 0 9 10^9 109 之后为 13 13 13,即该模型参数大小大约为 13 G 13G 13G
    然后后面可以看到保存了哪些参数权重,比如有 mlp.down_proj
    在这里插入图片描述
  • generation_config.json 主要是生成任务的参数,还有 transformers 库的版本号
    在这里插入图片描述
  • config.json 比较重要,是记录该模型的重要参数
    有模型的架构 LlamaForCausalLM,中间各种网络的参数,词汇表大小等。
    在这里插入图片描述

知识点:在保存模型参数时,大小发生了成倍的变化

  • 这次就遇到了这个问题,我一开始还以为是合并时两份参数加在一起而没有覆盖导致的
    最终文件大小加倍了
  • 但最后是发现 torch_dtype 原本是 float16,我直接保存的话类型变成了 float32,因此文件大小翻倍了
    在加载和保存处设置好数据类型即可。
    【这启示我们,对于精度类型还是得注意清楚的,比如在训练的时候使用混合精度等问题】
  • 最终发现,在model.safetensors.index.json 里面,多了一个 self_attn.rotary_emb.inv_freq 参数,但这个貌似对于内存不是特别影响,应该问题是不大的
    total_size 只打了7k多
    并且它原本是参数分成了三份,这次分成了两份,这个也会有变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux的进程篇章 - 进程终止和进程等待的理解】

Linux学习笔记---008 Linux之fork函数、进程终止和等待的理解1、fork函数1.1、什么是fork?1.2、fork的功能介绍1.3、fork函数返回值的理解1.4、fork函数的总结 2、进程的终止2.1、终止是在做什么?2.2、进程终止的3种情况 3、进程的终止3.1、进程终止的三种情况3.2、…

数据结构-移除元素(简单)

题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出…

pycharm debug 的时候 waiting for process detach

当你使用pycharm debug或者run的时候,突然出现了点不动,然后一直显示:waiting for process detach 可能是以下问题: 1、需要设置Gevent compatible pycharm一直没显示运行步骤,只是出现waiting for process detach-C…

Day04-SHELL自动化编程-循环与颜色函数库

Day04-SHELL自动化编程-循环与颜色函数库 11. 必知必会核心命令11.1 命令概述11.7 案例11.8 小结 12 Shell编程-循环12.1 循环概述12.2 for循环1)最常用的for循环格式2)c语言格式for循环3)for循环格式及应用场景4)案例 12.3 while…

数据结构(三)----栈和队列

目录 一.栈 1.栈的基本概念 2.栈的基本操作 3.顺序栈的实现 •顺序栈的定义 •顺序栈的初始化 •进栈操作 •出栈操作 •读栈顶元素操作 •若使用另一种方式: 4.链栈的实现 •链栈的进栈操作 •链栈的出栈操作 •读栈顶元素 二.队列 1.队列的基本概念 2.队列的基…

【TensorRT】TensorRT C# API 项目更新 (1):支持动态Bath输入模型推理(下篇)

4. 接口应用 关于该项目的调用方式在上一篇文章中已经进行了详细介绍,具体使用可以参考《最新发布!TensorRT C# API :基于C#与TensorRT部署深度学习模型》,下面结合Yolov8-cls模型详细介绍一下更新的接口使用方法。 4.1 创建并配…

Ubuntu配置VScode的C++环境

在Ubuntu系统下配置C环境,并运行helloworld 1. 下载VScode 我这里使用的是星火应用商店,在商店里面可以直接下载安装 http://spark-app.store/ 2.创建文件夹 3.启动VScode并打开该文件夹 4.安装以下几个扩展 PS:Clang这个插件别安装&…

Spark 应用程序优化和调优总结

文章目录 前言调整 Spark 默认配置查看和设置 Spark 配置信息动态扩展集群负载 数据的缓存和持久化DataFrame.cache()DataFrame.persist()何时缓存和持久化何时不缓存和持久化 Spark 中的 JOINs广播连接排序合并连接 总结 前言 本文总结了 Spark 中比较重要和常用的调优手段&a…

docker pull镜像的时候指定arm平台

指定arm平台 x86平台下载arm平台的镜像包 以mysql镜像为例 docker pull --platform linux/arm64 mysqldocker images查看镜像信息 要查看Docker镜像的信息,可以使用docker inspect命令。这个命令会返回镜像的详细信息,包括其元数据和配置。 docker i…

【重磅推荐】2024七大零售行业线下开店超全指南大全共452份

如需下载完整PPTX可编辑源文件,请前往星球获取:https://t.zsxq.com/19F4dDDrv 联华快客便利店的加盟手册.docx 好德便利店加盟手册.docx 超市&便利店守则:商品退换货管理.docx 赠品管理制度.doc 选址必看.doc 新人续签考核作业.doc 物流箱管理制度.d…

AugmentedReality之路-平面检测(5)

本文介绍通过AR检测水平平面和垂直平面,并将检测到的平面转化为Mesh 1、在首页添加功能入口 在首页添加一个按钮,命名为Start World Track 2、自定义ExecStartAREvent 创建ARSessionConfig并取名为ARSessionConfig_World 自定义ExecStartAREvent&…

C++ | Leetcode C++题解之第20题有效的括号

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isValid(string s) {int n s.size();if (n % 2 1) {return false;}unordered_map<char, char> pairs {{), (},{], [},{}, {}};stack<char> stk;for (char ch: s) {if (pairs.count(ch)) {if (…

SSH穿透ECS访问内网RDS数据库

处于安全考虑&#xff0c;RDS一般只会允许指定的IP进行访问&#xff0c;而我们开发环境的IP往往是动态的&#xff0c;每次IP变动都需要去修改RDS的白名单&#xff0c;为我们的工作带来很大的不便。 那么如何去解决这个问题&#xff1f; 假如我们有一台ESC服务器&#xff0c;E…

DVWA -File Upload-通关教程-完结

DVWA -File Upload-通关教程-完结 文章目录 DVWA -File Upload-通关教程-完结页面功能LowMediumHighImpossible 页面功能 此页面的功能为选择某个图片文件点击Upload按钮上传&#xff0c;上传成功后得知文件上传路径为DVWA\hackable\uploads。 Low 源码审计 这段 PHP 代码…

双云及多云融合(混合云)

背景&#xff1a;客户对于业务的高可用需求&#xff0c;当发生故障时&#xff0c;业务还能正常使用&#xff0c;如某云机房整体宕机&#xff0c;或云管理服务整体宕掉&#xff0c;导致客户业务不可用&#xff0c;此时&#xff0c;需有业务能顺利切换到灾备云上。 需求&#xf…

【八股】AOP

AOP(Aspect Oriented Programming)&#xff0c;面向切面编程&#xff0c;他是一种编程范式。 作用&#xff1a; 在不改变原始设计的的基础上对其进行功能增强。 几个基本概念&#xff1a; 连接点&#xff1a;所有的方法 切入点&#xff1a;追加功能的方法 通知&#xff1a;追加…

基于小程序实现的社区户口管理的系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;ssm 【…

vue2 二次封装element 组件,继承组件原属性,事件,插槽 示例

测试页面代码 这里主要记录如何封装element的el-input 并且封装后具有el-input原本的属性 事件 插槽 下面为测试页面即组件调用 <script> import CustomInput from /components/CustomInput.vue;export default {name: TestPage,components: { CustomInput },data() …

SpringCloud系列(2)--SpringCloud和SpringBoot技术选型

前言&#xff1a;SpringCloud是微服务架构的一揽子解决方案&#xff0c;SpringBoot是一种技术&#xff0c;要使用SpringCloud&#xff0c;也需要使用到SpringBoot&#xff0c;所以要使用SpringCloud时&#xff0c;必须也要考虑到SpringBoot的适配问题 1、查看SpringCloud和与之…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 4月11日,星期四

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年4月11日 星期四 农历三月初三 1、 中办、国办&#xff1a;加大从优秀社区工作者中招录公务员力度。 2、 即日起&#xff0c;全国铁路实行新的货物列车运行图。 3、 台湾花莲地震死亡人数上升至16人&#xff0c;强震后“地…