gpt2 本地调用调用及其调用配置说明

news2025/4/15 23:20:32

gpt2 本地调用调用及其调用配置说明

环境依赖安装,模型下载

在大模型应用开发中,需要学会本地调用模型,
要在本地环境调用gpt2 模型需要将模型下载到本地,这里记录本地调用流程:
在huggingface 模型库中查找到需要使用的模型;这里以调用 uer/gpt2-chinese-cluecorpussmall 模型为例。使用transformers 对应模型进行模型下载;

下载模型:

需要先安装 PyTorch 或者 TensorFlow 同时确保能够访问到 https://huggingface.co 网站 否则下载不成功;

pip install torch torchvision torchaudio
pip install tensorflow
#将模板下载到本地
from transformers import AutoModelForCausalLM, AutoTokenizer
#将饭型利分问器卜我到小地,并指定保任路径
model_name ="uer/gpt2-chinese-cluecorpussmall"
cache_dir ="model/uer/gpt2-chinese-cluecorpussmall"
#下载模型
AutoModelForCausalLM.from_pretrained(model_name, cache_dir=cache_dir)
#下载分词库工具
AutoTokenizer.from_pretrained(model_name,cache_dir=cache_dir)
print(f"模型分词器已下载到:{cache_dir}")

模型下载完成后目录结构:
模型目录结构

目录文件说明:

调用模型是使用分带有config.json 的目录结对路径

config.json:

{
  // 激活函数类型,这里使用 GELU 的改进版(gelu_new),常用于 GPT 模型
  "activation_function": "gelu_new",

  // 模型架构类型,这里是 GPT2 的带语言模型头的版本(用于文本生成)
  "architectures": [
    "GPT2LMHeadModel"
  ],

  // Attention 层的 dropout 概率(防止过拟合)
  "attn_pdrop": 0.1,

  // Embedding 层的 dropout 概率
  "embd_pdrop": 0.1,

  // 是否启用梯度检查点(节省显存但降低速度),false 表示不启用
  "gradient_checkpointing": false,

  // 参数初始化范围(正态分布的标准差)
  "initializer_range": 0.02,

  // Layer Normalization 的 epsilon(防止除以零的小常数)
  "layer_norm_epsilon": 1e-05,

  // 模型类型标识(这里是 GPT2)
  "model_type": "gpt2",

  // 上下文最大长度(token 数量)
  "n_ctx": 1024,

  // Embedding 的维度大小
  "n_embd": 768,

  // Attention 头的数量
  "n_head": 12,

  // Feed-Forward 层中间维度(null 表示使用默认值 4*n_embd)
  "n_inner": null,

  // Transformer 的层数
  "n_layer": 12,

  // 模型支持的最大位置编码长度
  "n_positions": 1024,

  // 是否输出过去的隐藏状态(兼容性参数)
  "output_past": true,

  // 残差连接的 dropout 概率
  "resid_pdrop": 0.1,

  // 任务特定参数(这里是文本生成的默认配置)
  "task_specific_params": {
    "text-generation": {
      // 是否使用采样(而非贪婪解码)
      "do_sample": true,
      // 生成的最大长度
      "max_length": 320
    }
  },

  // 使用的 tokenizer 类型(虽然模型是 GPT2,但这里用了 BertTokenizer)
  "tokenizer_class": "BertTokenizer",

  // 词表大小(中文 BERT 词表通常为 21128)
  "vocab_size": 21128
}

special_tokens_map.json:

{
  // 未知字符标记(遇到不在词表中的字符时使用)
  "unk_token": "[UNK]",

  // 分隔符标记(用于分隔两个句子的特殊标记,如句子A和句子B)
  "sep_token": "[SEP]",

  // 填充标记(用于将不同长度的序列补齐到相同长度)
  "pad_token": "[PAD]",

  // 分类标记(常用于文本分类任务,放在文本开头)
  "cls_token": "[CLS]",

  // 掩码标记(用于掩码语言模型MLM任务,如BERT的完形填空)
  "mask_token": "[MASK]"
}

unk_token

用途:当遇到词表中不存在的字符或单词时使用

示例:“你好[UNK]世界”(中间的词未被词表收录)

注意:所有NLP模型都需要处理OOV(Out-Of-Vocabulary)问题

sep_token

典型场景:

句子对任务(如文本相似度判断)

问答系统(问题和上下文的分隔)

BERT风格格式:[CLS]句子A[SEP]句子B[SEP]

pad_token

功能:

保证batch内样本长度一致

通常配合attention_mask使用(1表示真实token,0表示padding)

训练技巧:计算loss时应忽略padding部分

cls_token

特殊用途:

分类任务中代表整个序列的语义

通常接分类器层[CLS] -> Dense -> Softmax

可视化:可通过注意力权重观察模型如何聚合信息

mask_token

预训练用途:

BERT的MLM任务:“机器[MASK]很厉害” -> “机器学习很厉害”

通常15%的token会被随机mask

微调注意:下游任务中可能不需要此tok

tokenizer_config.json:

使用transformers 进行模型调用:

# 本地离线调用gpa2 模型
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline

# 设置具体包含config 本地模型路径
model_name = r"D:\study\ai_lean\PythonProject\gpt2-lean\model\uer\gpt2-chinese-cluecorpussmall\models--uer--gpt2-chinese-cluecorpussmall\snapshots\c2c0249d8a2731f269414cc3b22dff021f8e07a3"

# 加载模型 和分词器

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# 使用加载的模型和分词器生成文本的 pipeline

generator = pipeline(
    "text-generation", # pipeline 的类型
    model=model, # 模型
    tokenizer=tokenizer, # 分词器
    device=0, # 设备
    max_length=100, # 最大长度
    do_sample=True, # 是否使用采样
    top_k=10, # 采样的topk
    num_return_sequences=1, # 返回的文本数量
    eos_token_id=tokenizer.eos_token_id, # 结束符
)

# 生成文本
output = generator("你好,我是一名程序员", num_return_sequences=1, max_length=100)
print(output)

输出结果:

[{‘generated_text’: ‘你好,我是一名程序员 。 我 的 职 业 发 展 是 做 程 序 员 , 但 我 没 有 一 技 之 长 。 所 有 的 事 情 , 我 都 想 着 尽 可 能 的 做 好 。 在 这 里 我 想 说 : 一 个 人 的 一 生 是 有 规 律 的 , 每 个 人 都 是 在 不 断 完 善 , 不 断 探 索 。 我 在 这 个 问 题 上 , 有 自 我 的 判 断’}]

这是调用uer/gpt2-chinese-cluecorpussmall 模型续写的结果,

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

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

相关文章

【Abstract Thought】【Design Patterns】python实现所有个设计模式【下】

前言 彼岸花开一千年,花开花落不相见。 若问花开叶落故,彼岸缘起缘又灭——《我欲封天》 \;\\\;\\\; 目录 前言简单的设计模式复杂的设计模式13责任链14迭代器15备忘录16状态机17模板方法18访问者19观察者20命令Shell21策略22调解23解释器 简单的设计模…

【物联网】PWM控制蜂鸣器

文章目录 一、PWM介绍1.PWM的频率2.PWM的周期 二、PWM工作原理分析三、I.MX6ull PWM介绍1.时钟信号2.工作原理3.FIFO 四、PWM重点寄存器介绍1.PWM Control Register (PWMx_PWMCR)2.PWM Counter Register (PWMx_PWMCNR)3.PWM Period Register (PWMx_PWMPR)4.PWM Sample Register…

Python----机器学习(基于PyTorch的乳腺癌逻辑回归)

Logistic Regression(逻辑回归)是一种用于处理二分类问题的统计学习方法。它基于线性回归 模型,通过Sigmoid函数将输出映射到[0, 1]范围内,表示概率。逻辑回归常被用于预测某个实 例属于正类别的概率。 一、数据集介绍 在本例中&…

5分钟学会接口自动化测试框架

今天,我们来聊聊接口自动化测试。 接口自动化测试是什么?如何开始?接口自动化测试框架如何搭建? 自动化测试 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发…

基于FreeRTOS和LVGL的多功能低功耗智能手表(APP篇)

目录 一、简介 二、软件框架 2.1 MDK工程架构 2.2 CubeMX框架 2.3 板载驱动BSP 1、LCD驱动 2、各个I2C传感器驱动 3、硬件看门狗驱动 4、按键驱动 5、KT6328蓝牙驱动 2.4 管理函数 2.4.1 StrCalculate.c 计算器管理函数 2.4.2 硬件访问机制-HWDataAccess 2.4.3 …

布局决定终局:基于开源AI大模型、AI智能名片与S2B2C商城小程序的战略反推思维

摘要:在商业竞争日益激烈的当下,布局与终局预判成为企业成功的关键要素。本文探讨了布局与终局预判的智慧性,强调其虽无法做到百分之百准确,但能显著提升思考能力。终局思维作为重要战略工具,并非一步到位的战略部署&a…

告别循环!用Stream优雅处理集合

什么是stream? 也叫Stream流,是jdk8新增的一套API(java.util.stream.*)可以用于操作集合或者数组的数据。 优势:Stream流大量的结合了Lambda语法的风格编程,提供了一种更加强大,更加简单的方式…

Linux电源管理、功耗管理 和 发热管理 (CPUFreq、CPUIdle、RPM、thermal、睡眠 和 唤醒)

1 架构图 1.1 Linux内核电源管理的整体架构 《Linux设备驱动开发详解:基于最新的Linux4.0内核》图19.1 1.2 通用的低功耗软件栈 《SoC底层软件低功耗系统设计与实现》 1.3 低功耗系统的架构设计;图1-3 2 系统级睡眠和唤醒管理 Linux系统的待机、睡眠…

OSCP - Proving Grounds -FunboxEasy

主要知识点 弱密码路径枚举文件上传 具体步骤 首先是nmap扫描一下,虽然只有22,80和3306端口,但是事情没那么简单 Nmap scan report for 192.168.125.111 Host is up (0.45s latency). Not shown: 65532 closed tcp ports (reset) PORT …

Vue 3 国际化实战:支持 Element Plus 组件和语言持久化

目录 Vue 3 国际化实战:支持 Element Plus 组件和语言持久化实现效果:效果一、中英文切换效果二、本地持久化存储效果三、element Plus国际化 vue3项目国际化实现步骤第一步、安装i18n第二步、配置i18n的en和zh第三步:使用 vue-i18n 库来实现…

1.阿里云快速部署Dify智能应用

一、宝塔面板 宝塔面板是一款功能强大且易于使用的服务器管理软件,支持Linux和Windows系统,通过web端可视化操作,优化了建站流程,提供安全管理、计划任务、文件管理以及软件管理等功能。 1.1 宝塔面板的特点与优势 易用性 宝塔面…

在pycharm配置虚拟环境和jupyter,解决jupyter运行失败问题

记录自己pycharm环境配置和解决问题的流程。 解决pycharm无法运行jupyter代码,仅运行import板块显示运行失败,但是控制台不输出任何错误信息,令人困惑。 遇到的问题是:运行代码左下角显示运行失败但是有没有任何的输出错误信息。 …

【Docker】离线安装Docker

背景 离线安装Docker的必要性,第一,在目前数据安全升级的情况下,很多外网已经基本不好访问了。第二,如果公司有对外部署的需求,那么难免会存在对方只有内网的情况,那么我们就要做到学会离线安装。 下载安…

极简cnn-based手写数字识别程序

1.先看看识别效果: 这个程序识别的是0~9的一组手写数字,这是最终的识别效果,为1,代表识别成功,0为失败。 然后数据源是:ds deeplake.load(hub://activeloop/optical-handwritten-digits-train)里面是一组…

C++核心机制-this 指针传递与内存布局分析

示例代码 #include<iostream> using namespace std;class A { public:int a;A() {printf("A:A()的this指针&#xff1a;%p!\n", this);}void funcA() {printf("A:funcA()的this指针&#xff1a;%p!\n", this);} };class B { public:int b;B() {prin…

vue3 history路由模式刷新页面报错问题解决

在使用history路由模式时刷新网页提示404错误&#xff0c;这是改怎么办呢。 官方解决办法 https://router.vuejs.org/zh/guide/essentials/history-mode.html

PHP爬虫教程:使用cURL和Simple HTML DOM Parser

一个关于如何使用PHP的cURL和HTML解析器来创建爬虫的教程&#xff0c;特别是处理代理信息的部分。首先&#xff0c;我需要确定用户的需求是什么。可能他们想从某个网站抓取数据&#xff0c;但遇到了反爬措施&#xff0c;需要使用代理来避免被封IP。不过用户没有提到具体的目标网…

3.2.2.1 Spring Boot配置静态资源映射

在Spring Boot中配置静态资源映射&#xff0c;可以通过默认路径或自定义配置实现。默认情况下&#xff0c;Spring Boot会在classpath:/static/等目录下查找静态资源。若需自定义映射&#xff0c;可通过实现WebMvcConfigurer接口的addResourceHandlers方法或在全局配置文件中设置…

# 更换手机热点后secureCRT无法连接centOS7系统

更换手机热点后secureCRT无法连接centOS7系统 一、问题描述 某些情况下&#xff0c;我们可能使用手机共享热点而给电脑联网。本来用一个手机热点共享网络时&#xff0c;SecureCRT可以正常连接到CentOS 7虚拟机&#xff0c;当更换一个手机热点时&#xff0c;突然发现SecureCR…

jupyter notebook 无法启动- markupsafe导致

一、运行jupyter notebook和Spyder报错&#xff1a;(已安装了Anaconda&#xff0c;以前可打开) 1.背景&#xff1a;为了部署机器学习模型&#xff0c;按教程直接安装了flask 和markupsafe&#xff0c;导致jupyter notebook&#xff0c;Spyder 打不开。 pip install flas…