当前位置: 首页 > wzjs >正文

深度科技商业官方网站页面模板不存在怎么办

深度科技商业官方网站,页面模板不存在怎么办,一级做爰网站,网站备案在哪里备案《DeepSeek原生应用与智能体开发实践》【摘要 书评 试读】- 京东图书 我们使用缓存对自回归生成模型进行计算时,最核心的目标是降低模型推理时的资源消耗。通过精心设计的缓存机制,我们得以高效地存储并复用中间计算结果,从而避免了在每次推理…

《DeepSeek原生应用与智能体开发实践》【摘要 书评 试读】- 京东图书

 我们使用缓存对自回归生成模型进行计算时,最核心的目标是降低模型推理时的资源消耗。通过精心设计的缓存机制,我们得以高效地存储并复用中间计算结果,从而避免了在每次推理步骤中重复相同的计算。这种优化方法不仅大幅提升了模型的推理速度,还减少了对计算资源的依赖,使自回归生成模型在更多场景下都能实现高效运用。

在本节中,我们将从头开始训练一个自回归模型,并采用不同的推理方法,以便对资源消耗进行量化对比。我们希望通过这一对比实验,更直观地展示缓存机制在降低资源消耗方面的实际效果,进一步验证缓存优化策略的有效性。同时,我们也希望通过这些数据,为未来的模型优化和缓存设计提供更具体的指导和参考。通过这样的实证研究,我们不仅可以更深入地理解缓存机制在自回归模型中的作用,还能为相关领域的研究和实践提供有价值的经验和启示。

8.4.1  模型参数配置与训练数据的准备

首先需要完成模型参数的配置。在这里我们简化了配置方法,采用类的形式对所有的参数进行管理,代码如下所示:

class GPT2Config:hidden_size = 384vocab_size = 4000num_attention_heads = 6assert hidden_size % num_attention_heads == 0, 'hidden_size must be divisible by num_head'intermediate_size = hidden_size * 4dropout = 0.1layer_norm_eps = 1e-12n_layers = 6is_cause = Truedevice = "cuda"max_length = 48

接下来,我们还是希望使用前面进行评论生成的数据进行本章的学习,在这里我们可以直接使用第5章的分词模型以及评论数据集,代码如下所示:

import sentencepiece as spm
class Tokenizer:def __init__(self,spm_path = './vocab_new/spm_model.model'):super().__init__()self.sp = spm.SentencePieceProcessor()self.sp.Load(spm_path)self.end_id = 4def encode(self,text):token = self.sp.EncodeAsIds(text)return tokendef decode(self,token):_text = self.sp.DecodeIds(token)return (_text)def vocab_size(self):return len(self.sp)

数据集的处理和准备:

import random,torch
from tqdm import tqdm
import sentencepiece as spmimport config
tokenizer_emo = config.Tokenizer()
print(tokenizer_emo.vocab_size())token_list = []
with open("../dataset/ChnSentiCorp.txt", mode="r", encoding="UTF-8") as emotion_file:for line in tqdm(emotion_file.readlines()):line = line.strip().split(",")text = "".join(line[1:]) + '<|end▁of▁sentence|>'token = tokenizer_emo.encode(text)for id in token:token_list.append(id)
token_list = torch.tensor(token_list * 4)class TextSamplerDataset(torch.utils.data.Dataset):def __init__(self, data = token_list, seq_len = 48):super().__init__()self.data = dataself.seq_len = seq_lendef __getitem__(self, index):rand_start = torch.randint(0, self.data.size(0) - self.seq_len, (1,))full_seq = self.data[rand_start : rand_start + self.seq_len + 1].long()return full_seq[:-1],full_seq[1:]def __len__(self):return self.data.size(0) // self.seq_len

8.4.2  带有缓存的生成模型训练

在训练带有缓存的生成模型时,我们可以完全将其视为普通的生成模型进行处理。这是因为缓存机制主要影响的是模型的推理阶段,而非训练阶段。在训练过程中,模型需要学习的是如何生成合理的序列,而缓存的引入并不会改变这一学习目标。因此,我们可以按照标准的生成模型训练流程进行,无须对训练过程进行特殊调整。

相对于前面完成的生成模型,这里我们增加了训练次数,这一点请读者注意。完整的生成模型训练代码如下所示:

import torch
from tqdm import tqdm
import torch
import config
import gpt2_cachedimport get_dataset
from torch.utils.data import Dataset, DataLoaderdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")gpt2config = config.GPT2Config()
tokenizer = config.Tokenizer()model = gpt2_cached.GPT2().to(device)
model.load_state_dict(torch.load("./saver/model.pth"),strict=False)seq_len = 64
# 获取训练数据集
train_dataset = get_dataset.TextSamplerDataset(get_dataset.token_list,seq_len=seq_len)# 初始化 DataLoader
data_trainer = DataLoader(dataset=train_dataset,batch_size=640,shuffle=True)opt = torch.optim.AdamW(model.parameters(),lr=2e-4)
lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(opt,T_max = 1200,eta_min=2e-6,last_epoch=-1)
# 损失函数
criterion = torch.nn.CrossEntropyLoss()for epoch in range(128):model.train()  # 确保模型在训练模式下pbar = tqdm(data_trainer, total=len(data_trainer))for tok, lab in pbar:tok = tok.to(device)lab = lab.to(device)logits,kv_caches = model(tok)# 调整 logits 和 lab的维度logits = logits.view(-1, logits.size(-1))  # [batch_size * sequence_length, num_classes]lab = lab.view(-1)  # [batch_size * sequence_length]# 计算损失loss = criterion(logits, lab)# 反向传播和优化opt.zero_grad()  # 清除梯度loss.backward()  # 计算梯度opt.step()  # 更新参数lr_scheduler.step()  # 执行优化器# 更新进度条上的描述pbar.set_description(f"Epoch {epoch + 1}, Loss: {loss.item():.4f}, lr:{lr_scheduler.get_last_lr()[0]*1000:.5f}")if epoch % 5 == 0:print("model saved")torch.save(model.state_dict(), "./saver/model.pth")torch.save(model.state_dict(), "./saver/model.pth")

值得注意的是,虽然在训练阶段缓存并不直接参与,但考虑到模型在实际应用中的推理效率,我们在设计模型结构时,仍然需要预留出与缓存机制相兼容的接口。这样做的好处是,一旦模型训练完成,我们可以轻松地整合缓存功能,从而在实际应用中实现更高效的推理。

此外,尽管缓存不在训练阶段直接使用,但了解并优化缓存机制对于提升模型的整体性能至关重要。因此,在训练过程中,我们也应不断思考如何更好地结合缓存策略,以便在后续的推理阶段达到最佳效果。通过这种方式,我们不仅可以确保模型在训练阶段学习到有效的生成策略,还能为其在实际应用中的高效推理奠定坚实基础。

http://www.dtcms.com/wzjs/829009.html

相关文章:

  • 赣州市住房和城乡建设局网站网上商城网站设计和实现
  • 网页设计案例图片深圳正规seo
  • 建设手机网站平台e网科技网站
  • 宁波企业网站优化报价哪些行业做网站多
  • 淘宝网客网站建设顺营销官方网站
  • 织梦做的网站怎么传到网上郑州设计网站的公司
  • 企业网站 的网络营销方法有wordpress接入官方号
  • 什么是同ip网站芜湖网站建设兼职
  • 网站怎么做弹出表单广州视频制作
  • 官方网站制作公司夏天做那个网站能致富
  • 企业网站建设最新技术wordpress 百度云
  • 企业网站建设 英铭唐山建设信息网站
  • 温州网站建设模板响水网站制作公司
  • 统计局网站集约化建设方案网站的网站制作
  • 受欢迎的网站建设案例北京专业做网站
  • 网站快速排名服务食品网站建设 网站定制开发
  • 网站诊断从哪里开始左右左右网站
  • 做单本小说网站怎么样php小程序开发完整教程
  • 云主机建设网站公司网站设计制作
  • 手机端网站html好看的单页模板网站开发项目报告
  • 仙桃建设网站石家庄广告制作公司
  • 长安营销型网站建设公司网站域名的设计
  • 网站打开速度与服务器手表网站海马300米潜水表
  • 如何做响应式的网站网站开发设计
  • 慈溪企业网站建设河南郑州做网站h汉狮
  • 志愿者网站 建设方案做网站的设计流程
  • 株洲网站制作建设百度识别图片找图
  • flash 网站引导页如何做好公司网站
  • 东莞网站空间如何免费开自己的网站
  • 酒店宾馆型网站开发做旅游网站的工作流程图