首页 > 其他分享 >Pytorch——AutoTokenizer载入本地tokenizer权重

Pytorch——AutoTokenizer载入本地tokenizer权重

时间:2024-03-15 15:46:35浏览次数:13  
标签:AutoTokenizer tokenizer json huggingface 载入 Pytorch config

  由于众所周知的原因,国内很难使用huggingface去下载权重,但现在的大模型的权重以及相关的分词器配置都放在huggingface的仓库中。当我们使用 AutoTokenizer.from_pretrained 去载入相关分词器和模型时,会访问huggingface自动下载模型。但随着大模型的发布,很多模型的tokenizer都以tokenizer.model的方式保存,并且使用自己的.py文件去加载自定义的tokenizer类。因此tokenizer_config.json(tokenizer配置类)变得至关重要。下面就是我遇到的使用AutoTokenizer载入本地tokenizer时的坑。

  场景:我使用ChatGLM这个大语言模型,于是从huggingface镜像网站中(HF-Mirror - Huggingface 镜像站)下载了其对应的模型参数以及tokenizer。使用以下命令行 a = AutoTokenizer.from_pretrained(r"D:\git_project\chatglm", trust_remote_code=True) 载入模型的tokenizer时,表示无法从本地载入(确定本地存在tokenizer的相关文件),并且每次都去请求huggingface的官网去下载这个模型(但由于屏蔽,导致了请求失败),因此无法使用,遂追寻AutoTokenizer.from_pretrained的源码寻求原因。

  以下是文件D:\git_project\chatglm文件夹中的内容:

   直接说结论:AutoTokenizer.from_pretraine中传入的本地文件路径,一定要和tokenizer_config.json中的以下配置对应:

   解释:通过追踪源码(省略版),我们发现AutoTokenizer只会从传入的路径(我们传入的是D:\git_project\chatglm)去找到tokenizer_config.json文件,当找到之后,所有的加载内容都以tokenizer_config.json中内容为准,这里的“auto_map”就是告诉加载器要去哪里找对应的tokenizer类,前半段的路径标记的就是去哪里找.py文件,使用--分割后面的就是指的对应的python文件中的Tokenizer类(上图就是会去D:\git_project\chatglm这个路径中去找,tokenization_chatglm.py这个文件,并加载这个.py文件中的ChatGLMTokenizer对象)。

注意事项(坑)

1、并不是所有的tokenizer载入都会使用自定义的方式(通过一个.py文件去得到自定义的Tokenizer对象),更多的时候是直接一个tokenizer.json或者vocab.txt即可,因此他们的tokenizer_config.json中都没有这个“auto_map”参数,更多的是tokenizer_class去指定让AutoTokenizer使用已经配置好的Tokenizer。

2、transformers中已经集成了非常多的Tokenizer类,而AutoTokenizer在载入时会根据tokenizer_config.json中的“tokenizer_class”去找是否已经存在了内置的Tokernizer对象,比如上面例子中我们“tokenizer_class”参数是“ChatGLMTokenizer”,因此在载入时会先在使用tokenizer_class_from_name方法去TOKENIZER_MAPPING_NAMES常量中寻找是否已经有内置的Tokernizer类,如果有则初始化,如果没有,就会使用“auto_map”这个参数去找到底应该拿什么类。(很明显transformers中并没有集成ChatGLMTokenizer,并且auto_map也没有找到对应的路径,因此他会去一直请求huggingface去仓库中下载模型)

3、一般使用自定义的tokenizer类都会使用sentencepiece这个包,但是这个包加载tokenizer.model时不支持中文地址!!!!

   

标签:AutoTokenizer,tokenizer,json,huggingface,载入,Pytorch,config
From: https://www.cnblogs.com/CircleWang/p/18075540

相关文章

  • PyTorch学习笔记(七)
    5.基本数学运算5.1torch.add()函数torch.add()是PyTorch中的一个函数,用于执行逐元素的加法操作。这个函数可以接受多个张量(tensors)作为输入,并返回一个新的张量,其中每个元素都是输入张量对应元素之和。函数的基本语法如下:torch.add(input,alpha=1,other,out=None......
  • 机器学习 - PyTorch中使用到的名字解释
    Tensor(张量):Tensor是一个类似于NumPy数组的多维数组结构,可以在CPU或GPU上进行并行计算。Tensor是PyTorch中最基本的数据结构。Tensorrepresentsdatainanumericalway.它具有以下几个重要的特点和用途:多维数组:Tensor可以是任意维度的数组,可以是0维(标量),1维(......
  • Pytorch入门-Transforms
    目录ComposeToTensorNormalizeResize在PyTorch中,transforms是一个用于图像预处理和数据增强的模块,通常与torchvision库一起使用。torchvision提供了大量预先定义的transforms,它们可以方便地应用于图像数据,以进行预处理或增强。这些transforms对于训练和评估机器学习模型(尤其是深......
  • 【模型转换】PyTorch模型转ONNX模型
    我们主要使用torch.onnx.export()函数来实现PyTorch模型到ONNX模型的转换。importtorchimporttorchvision.modelsasmodelsdevice="cpu"#加载预训练的ResNet18模型model=models.resnet18(pretrained=True)model.eval().to(device)#定义输入input=torc......
  • 【图像超分】论文复现:新手入门!Pytorch实现SRCNN,数据预处理、模型训练、测试、评估全流
    文章目录前言1.准备数据集和数据预处理1.1数据集选择1.2数据预处理1.3评估指标PSNR和SSIM1.3.1PSNR1.3.2SSIM2.定义网络结构3.设置参数并训练模型3.1参数设置3.2模型训练4.测试训练好的模型5.用训练好的SRCNN模型超分自己的图像数据6.其他补充6.1特征图......
  • onnx runtime文档学习5-加速Pytorch之Pytorch推理
    网上充斥着ONNXRuntime的简单科普,却没有一个系统介绍ONNXRuntime的博客,因此本博客旨在基于官方文档进行翻译与进一步的解释。ONNXruntime的官方文档:https://onnxruntime.ai/docs/如果尚不熟悉ONNX格式,可以参照该博客专栏,本专栏对onnx1.16文档进行翻译与进一步解释,ONNX......
  • 动手学深度学习Pytorch 2.3线性代数-笔记
    标量标量——仅包含一个数值,由只有一个元素的张量表示变量——未知的标量值例,将华氏度值转换为摄氏度的计算表达式​,其中5、9、32为标量,c和f为变量。实例化两个标量并进行算术运算 importtorch ​ x=torch.tensor(3.0) y=torch.tensor(2.0) print(x+y,x......
  • 深度学习1:PyTorch张量tensor的基本使用
    深度学习是一种机器学习方法,同时与人工智能研究的范畴。文章目录1.深度学习的基础网络2.Pytorch的开发环境(PyCharm和PyTorch安装)3.张量基础3.1张量的定义3.2随机生成张量3.3张量的数据类型3.4张量形状3.5张量切片3.6全0全1张量4.张量的数学函数4.1sum()--求......
  • 探索PyTorch:介绍及常用工具包展示
    前言PyTorch作为一个强大的开源深度学习框架,近年来在科学计算和人工智能领域备受欢迎。它提供了灵活的张量计算和动态计算图的功能,使得构建和训练深度神经网络变得更加简单和高效。本文将介绍PyTorch的基本概念,并展示一些常用的PyTorch工具包,帮助读者更好地了解和利用PyTorch进......
  • pytorch_lightning的使用
    Reference1.【PyTorchLigntning】快速上手简明指南2.PytorchLightning完全攻略3.PyTorchLightning教程四:超参数的使用4.小风_的CSDN......