from_pretrained 做了啥

transformers的三个核心抽象类是Config, Tokenizer和Model,这些类根据模型种类的不同,派生出一系列的子类。构造这些派生类的对象也很简单,transformers为这三个类都提供了自动类型,即AutoConfig, AutoTokenizer和AutoModel。三个AutoClass都提供了from_pretrained方法,这个方法则一气完成了模型类别推理、模型文件列表映射、模型文件下载及缓存、类对象构建等一系列操作。

from_pretrained这个类方法,最重要的一个参数叫做pretrained_model_name_or_path。顾名思义,我们可以给出一个模型的短名,也可以给出一个路径。如果给的是模型短名,则它会想办法映射出要下载的文件的URL位置,并将文件下载到本地一个固定的cache目录。第二次再调用的时候,它会检查cache中是否已经存在同样的文件,如果有则直接从cache载入,不再走网络下载。如果给的是路径名,那么它假设该路径之下已经存在自行训练/预下载/经过微调的模型文件,直接载入。

from_pretrained方法实际上提供了丰富的下载辅助功能,

  • cache_dir:自定义的cache路径
  • force_download:强制重新下载
  • resume_download:断点续传
  • proxies:字典形式指定代理
  • ……

AutoConfig.from_pretrained

Config的初次构造相对简单,主要是通过hf_bucket_url函数将函数短名映射成为网络URL,形如'https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-chinese-config.json'的一个json文件。下载它到cache目录,再读取构造对象即可。

AutoTokenizer.from_pretrained

Tokenizer初次构造要复杂一点。

  • 首先它需要先构造Config对象,然后查一张预定义好的表TOKENIZER_MAPPING。这张映射表中,描述了什么样的Config Class对应什么样的Tokenizer Class。
  • 每个Tokenizer Class都定义了一个类变量vocab_files_names,指定了它所用到的词汇文件名有哪些。
  • 另外Tokenizer Class可能还会产生若干附加文件,可能有也可能没有,但这些附加文件名列表是有限的,存在additional_files当中,包括ADDED_TOKENS_FILE, SPECIAL_TOKENS_MAP_FILE, TOKENIZER_CONFIG_FILE, FULL_TOKENIZER_FILE等,后续下载时需要逐一探测一下。
  • 以上所有的文件名,都需要用hf_bucket_url函数转成相应的URL。

AutoModel.from_pretrained

Model的构造也相对简单。

  • 和Tokenizer类似,它也需要先得到Config对象,然后查MODEL_MAPPING映射表,得到实际的Model Class。
  • Model Class定义了类方法from_pretrained。这个方法会根据模型短名以及该模型是从TF还是PT训练的,利用hf_bucket_url函数转成相应的URL。TF2对应的模型文件名为tf_model.h5,PT对应的模型文件名为pytorch_model.bin。由于模型文件一般比较大,转换时采用了CDN域名,下载时采用了分块下载stream的方式。

以 vicuna-7b-v1.5为例

https://huggingface.co/lmsys/vicuna-7b-v1.5/tree/main

其中 config.json

是模型model的 Configuration ,文档https://huggingface.co/transformers/v3.3.1/main_classes/configuration.html

其他

a config.json file, which saves the configuration of your model ;

a pytorch_model.bin file, which is the PyTorch checkpoint (unless you can’t have it for some reason) ;

a tf_model.h5 file, which is the TensorFlow checkpoint (unless you can’t have it for some reason) ;

a special_tokens_map.json, which is part of your tokenizer save;

a tokenizer_config.json, which is part of your tokenizer save;

files named vocab.json, vocab.txt, merges.txt, or similar, which contain the vocabulary of your tokenizer, part of your tokenizer save;

maybe a added_tokens.json, which is part of your tokenizer save.

https://huggingface.co/transformers/v3.3.1/model_sharing.html

参考

【HugBert05】照猫画虎:理解from_pretrained,攒个模型下载器 - 知乎

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitlab简单介绍及安装使用

gitlab 概述 什么是 gitlab GitLab 是一个基于 Web 的 Git 仓库管理工具,提供了代码托管、版本控制、协作开发、持续集成和部署等功能。它类似于 GitHub,但是 GitLab 可以在私有服务器上部署,也可以使用 GitLab 提供的托管服务。GitLab 支持…

详解rtklib中main函数如何配置文件(下)

目录 一、main函数流程总结 二、分析识别 -k 后如何配置 三、最后传参的数据文件处理方式 一、main函数流程总结 详解rtklib中main函数如何配置文件(上)-CSDN博客 在这片文章中讲解了rtklib中main函数的整个流程。 (1)通过…

变分(Total Variation,TV)正则化模型

在图像复原过程中,图像上的一点点噪声可能就会对复原的结果产生非常大的影响,因为很多复原算法都会放大噪声。这时候我们就需要在最优化问题的模型中添加一些正则项来保持图像的光滑性,TV是常用的一种正则项。 举个栗子。本来要求解的最优化…

使用el-cascader组件写下拉级联多选并且具有全选功能

样式 说明: 级联选择器中加上全选的按钮, 并且保证数据响应式。 思路 因为是有全选的功能,所以不能直接使用el-cascader组件, 而是选择使用el-select组件, 在此组件内部使用el-cascader-panel级联面板全选按钮也是…

网络核心知识点 - 网络通信技术 XHR(XMLHttpRequest) 和 Fetch

一、关于 AJAX(一种思想和方法) 浏览器本身就具备网络通信的能力,但在早期,浏览器并没有把这个能力开放给JS。最早是微软在IE浏览器中把这一能力向JS开放,让JS可以在代码中实现发送请求,并不会刷新页面。Aj…

图论基础|695. 岛屿的最大面积、1020. 飞地的数量、130. 被围绕的区域

695. 岛屿的最大面积 力扣题目链接(opens new window) 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff0…

解码新时代内存架构:探秘数据在内存中的灵动驻足

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 随着信息技术的飞速发展,我们身处一个数据爆炸的时代。数据的处理和存储方式正日益成为技术革新的重要领域。在新时代的…

AI程序员革命:探析Devin的登场与编程未来

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

BUG未解之谜01-指针引用之谜

在leetcode里面刷题出现的问题,当我在sortedArrayToBST里面给root赋予初始值NULL之后,问题得到解决! 理论上root是未初始化的变量,然后我进入insert函数之后,root引用的内容也是未知值,因此无法给原来的二叉…

apifox创建接口含中文字符报错的两种解决方案

针对apifox的含中文报错解决方法: 方法一:创建相应接口后,在设置中URL自动编码为WHATING。 方法二:直接将浏览器的url复制到apifox中,浏览器会自动解析配置中文转换路径。

常见的OOM 问题的 6 种场景

今天跟大家一起聊聊线上服务出现 OOM 问题的 6 种场景,希望对你会有所帮助。 一、堆内存 OOM 堆内存 OOM 是最常见的 OOM 了。 出现堆内存 OOM 问题的异常信息如下: java.lang.OutOfMemoryError: Java heap space此 OOM 是由于 JVM 中 heap 的最大值,已经不能满足需求了…

一分钟学习Markdown语法

title: 一分钟学习Markdown语法 date: 2024/3/24 19:33:29 updated: 2024/3/24 19:33:29 tags: MD语法文本样式列表结构链接插入图片展示练习实践链接问题 欢迎来到Markdown语法的世界!Markdown是一种简单而直观的标记语言,让文本排版变得轻松有趣。接下…