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

LLM·minimind-预训练

文章目录预训练初始化模型和分词器初始化配置文件 AutoConfig从配置文件初始化 AutoModel加载 AutoTokenizer预训练数据集加载数据集DataDictDataset数据预处理数据预先处理函数1.数据集编码为tokens2.数据集分块获得特定长度的input_ids和labels训练器TrainingArgumentsTrainer所有的代码都基于transformers库。预训练初始化模型和分词器初始化配置文件 AutoConfig类似transformers中的AutoModel一样都需要先下载配置文件model.info然后读取该文件夹获得配置信息from transformersimportAutoConfig,AutoModelForCausalLM model_path../model/Qwen2.5-1.5BconfigAutoConfig.from_pretrained(model_path)config配置信息包含模型的架构Qwen2Config{architectures:[Qwen2ForCausalLM],attention_dropout:0.0,从配置文件初始化 AutoModelAutoModelForCausalLM.from_config这一步构造初始化需要很长的时间可能涉及与远程仓库中的定义进行对齐甚至下载远程仓库的代码没有科学上网会卡死modelAutoModelForCausalLM.from_config(config,trust_remote_codeFalse)model.to(cuda)model的具体架构modelQwen2ForCausalLM((model):Qwen2Model((embed_tokens):Embedding(151936,1536)(layers):ModuleList((0-27):28xQwen2DecoderLayer((self_attn):Qwen2SdpaAttention((q_proj):Linear(in_features1536,out_features1536,biasTrue)(k_proj):Linear(in_features1536,out_features256,biasTrue)(v_proj):Linear(in_features1536,out_features256,biasTrue)(o_proj):Linear(in_features1536,out_features1536,biasFalse)(rotary_emb):Qwen2RotaryEmbedding()加载 AutoTokenizerfrom transformersimportAutoTokenizertokenizerAutoTokenizer.from_pretrained(model_path)tokenizer预训练数据集数据集格式必须是token化的序列最大长度必须一致。构造出labels该labels与input_ids一致模型会处理移位。加载数据集参考文献path表示数据集的名称monkey-gen如果只有当前参数则会自动下载到缓存数据集的格式例如jsoncsv等data_dir数据集所在的本地目录data_file数据集本身例如xxx.jsonl.datasetload_dataset(csv,data_files./ChnSentiCorp_htl_all.csv,splittrain)datasetload_dataset(json,data_files./cmrc2018_trial.json,fielddata)DataDict类型为Dict[str,Dataset]把他当成一个字典来理解用于获得train或者test字段的Dataset。不支持直接索引DatasetDict({train:Dataset({features:[input_ids,attention_mask],num_rows:100001})})Dataset数组和字典的混合体。可以理解为List[Dict]或者Dict[List]的形式支持下标索引和键值对索引。Dataset({features:[input_ids,attention_mask,labels],num_rows:1370})数据预处理我们期望的预训练格式如下首先是将原始文本str转换为input_ids:List[int]数据预先处理函数输入参数batchedTrue时为examples类型为Dict[str,List[Any]]examples{text:[今天天气不错。,我在学预训练语言模型。,DeepSpeed 加速训练。]}返回参数batchedTrue时返回类型为Dict[str,List[Any]]注意tokenizer处理batch时会返回字典Dict[str,List[Any]]。{input_ids:[[...,...],[...,...],[...,...]],attention_mask:[[...,...],[...,...],[...,...]],# 其他字段如 token_type_ids 等}1.数据集编码为tokensdeftokenize_function(examples:Dict[str,List[Any]]# 列名 对应一个列表/值):returntokenizer([textfortext in examples[text]])examples的数据类型examples的类型为Dict[str,List]例如‘text’:[1,2,3]tokenized_dsds.map(tokenize_function,batchedTrue,# 打包为列名值/列表text:[文本1,文本2,...]num_proc10,remove_columnscolumn_names,load_from_cache_fileTrue)输出结果将删除当前列并且返回input_idsattention_mask组成的字典。DatasetDict({train:Dataset({features:[input_ids,attention_mask],num_rows:5001})})2.数据集分块获得特定长度的input_ids和labelsdefgroup_texts(examples:Dict[str,List[str]]):# 拼接所有可迭代对象 concat_examples:Dict[str:List]{k:list(chain(*examples[k]))# iter-listfork in examples.keys()# List[tensor]}# 计算总长度 seqmask total_lengthlen(concat_examples[list(examples.keys())[0]])num_blocktotal_length// block_sizeresult{#list-list[tensor]k:[concat_examples[k][i*block_size:(i1)*block_size]fori inrange(num_block)]fork in concat_examples.keys()}result[labels]result[input_ids].copy()returnresultlm_dstokenized_ds.map(group_texts,batchedTrue,num_proc10,load_from_cache_fileTrue,batch_size1000,)chain合并迭代器拼接两个迭代器返回一个更长的迭代器可以通过list转换为数组。from itertoolsimportchainblock_size2048# 首位拼接 可迭代对象-返回长迭代器list(chain([1,2],[3,4]))#[1,2,3,4]list(chain(*[[1,2],[3,4]]))#[1,2,3,4]训练器训练器包括优化器模型本身分词器等等数据集加粗样式。TrainingArguments规定了一些重要的超参数包括训练参数epoch数梯度累积更新数评估参数等等from transformersimportTrainingArgumentstraining_argsTrainingArguments(output_diroutput/,per_device_train_batch_size1,gradient_accumulation_steps4,logging_steps4,num_train_epochs1,save_steps500,learning_rate1e-4,save_on_each_nodeTrue,gradient_checkpointingTrue,)Trainer数据集使用default_data_collator进行封装为batchIterableWrapper(train_dataset)支持将训练集包裹为可迭代对象可以直接传入Dataset类型。from transformersimportTrainer,default_data_collator from torchdata.datapipes.iterimportIterableWrapper# 训练器 trainerTrainer(modelmodel,argstraining_args,#Dataset传入也可以,本身就是mmap,不会节省太多内存train_datasetIterableWrapper(train_dataset),# 将Dataset类型包裹为迭代器 eval_datasetNone,#tokenizertokenizer,# 默认为 MLM 的 collator使用 CLM 的 collater#CLM因果语言建模,输入和输出标签一致,不会随机掩码data_collatordefault_data_collator,# MLM掩码语言建模,完型填空,不会随机掩码;)

相关文章:

LLM·minimind-预训练

文章目录预训练初始化模型和分词器初始化配置文件 AutoConfig从配置文件初始化 AutoModel加载 AutoTokenizer预训练数据集加载数据集DataDictDataset数据预处理数据预先处理函数1.数据集编码为tokens2.数据集分块,获得特定长度的input_ids和labels训练器TrainingArg…...

GitHub中文界面工具:突破语言壁垒的开源解决方案

GitHub中文界面工具:突破语言壁垒的开源解决方案 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese GitHub作为全球领先的代码…...

量子走私系统架构与检测规避原理的技术解构

一、量子物流系统的非法改造框架量子纠缠通信层量子信道构建:利用纠缠光子对建立跨国信道,通过BB84协议实现密钥分发。发送方(毒枭)与接收方(境外据点)共享量子态,海关拦截将导致量子态坍缩&…...

崩盘预警:软件测试工程师的加密市场做空指南

第一章:压力测试原理的金融场景映射缺陷暴露机制 → 市场脆弱性识别系统缺陷映射:软件中的内存泄漏、资源竞争漏洞,对应加密市场的杠杆连锁风险与流动性陷阱。监控工具迁移:混沌工程模拟黑天鹅事件(如监管政策突变、交…...

Circios机器人控制库:面向教学的Arduino语义化运动编程

1. 项目概述Circios Roboter-Steuerung 是一款面向基础教育场景的 Arduino 兼容机器人控制库,专为德国 Circios 教学机器人硬件平台设计。该库并非通用型工业级驱动框架,而是聚焦于“可理解性”与“教学友好性”双重目标:在保证底层硬件可精确…...

Prompt Cache与Agent上下文税深度解析(非常详细),AI架构设计从入门到精通,收藏这一篇就够了!

导读:本文通过Claude Code案例,解释了 AI agent 中的提示词缓存机制,实现 92% 缓存命中率,显著降低重复计算的“上下文税”,节省高达81%的成本。 核心原理在于Transformer的预填充阶段计算Key-Value向量,仅…...

轻量级旋转编码器驱动:基于状态机的中断消抖实现

1. 项目概述CRotaryEncoder 是一个面向嵌入式系统的轻量级旋转编码器驱动库,专为资源受限的微控制器(如 STM32F0/F1/F4、ESP32、nRF52、RP2040 等)设计。其核心目标明确而务实:在仅占用两个 GPIO 引脚的前提下,通过硬件…...

OpenCore-Configurator:黑苹果引导配置的高效解决方案

OpenCore-Configurator:黑苹果引导配置的高效解决方案 【免费下载链接】OpenCore-Configurator A configurator for the OpenCore Bootloader 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Configurator 一、核心价值:重新定义配置体验…...

1999-2024年上市公司高管团队稳定性

上市公司-高管团队稳定性1999-2024年 数据介绍: 企业高管团队的稳定性是组织可持续发展的核心要素,对企业战略执行、文化塑造和经营绩效具有深远影响。稳定的高管团队能够确保战略规划的一致性和延续性,避免因频繁人事变动导致的战略摇摆。…...

【熟练】客户端命令详解

3.1 run 命令 run命令主要用于运行一个大模型,命令格式是: ollama run MODEL[:Version] [PROMPT] [flags] 比如,运行通义千问命令: ollama run qwen2:0.5b [:Version] 可以理解成版本,而版本信息常常以大模型规模来命名…...

猫抓视频解析工具:让网页媒体资源获取效率提升3倍的智能方案

猫抓视频解析工具:让网页媒体资源获取效率提升3倍的智能方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在信息爆炸的今天,网页视频已成为我们获取知识、娱乐休闲的主要方…...

TI 高精度实验室《运算放大器系列--稳定性实战:从SPICE仿真到实验室测量》

1. 运算放大器稳定性问题的本质 当你设计的运放电路输出波形出现异常振荡或过冲时,很可能遇到了稳定性问题。这种情况就像开车时方向盘存在延迟,每次转向动作都会过度修正,导致车辆左右摇摆。运放电路中的稳定性问题本质上也是类似的"延…...

3步打造流畅Windows体验:Win11Debloat系统优化工具全指南

3步打造流畅Windows体验:Win11Debloat系统优化工具全指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化…...

eNSP保姆级安装指南:从零到一,避坑实战

1. eNSP安装前的准备工作 第一次接触eNSP的朋友可能会觉得有点懵,这玩意儿到底是个啥?简单来说,它就是华为官方推出的网络模拟器,能让你在电脑上搭建虚拟网络环境,特别适合准备华为认证考试的朋友练手。不过安装过程确…...

终极指南:如何用DiffSynth Studio实现视频到3D骨架的智能转换

终极指南:如何用DiffSynth Studio实现视频到3D骨架的智能转换 【免费下载链接】DiffSynth-Studio DiffSynth Studio 是一个扩散引擎。我们重组了包括 Text Encoder、UNet、VAE 等在内的架构,保持了与开源社区模型的兼容性,同时提高了计算性能…...

AcousticSense AI真实案例:民谣与乡村音乐在ViT-B/16特征空间中的聚类效果

AcousticSense AI真实案例:民谣与乡村音乐在ViT-B/16特征空间中的聚类效果 1. 引言:当AI“看见”民谣与乡村的旋律 你有没有想过,AI是怎么“听”音乐的?它怎么知道一首歌是民谣还是乡村,是摇滚还是爵士?今…...

微服务架构演进历程

微服务架构演进历程:从单体到云原生的蜕变 在软件架构的发展历程中,微服务架构的兴起标志着一次重要的技术范式转变。从早期的单体架构到如今的云原生微服务,这一演进过程不仅提升了系统的灵活性和可扩展性,也深刻改变了开发团队…...

TM1637驱动库:非阻塞动画与统一显示接口设计

1. TM1637驱动库深度解析:面向嵌入式系统的七段数码管控制实践TM1637是一款高度集成的LED驱动控制芯片,广泛应用于低成本、低功耗的数码管显示模块。其采用双线串行通信协议(CLK DIO),无需外部上拉电阻,支…...

Napkin AI 使用指南

工具地址:https://www.napkin.ai 类型:AI 文字转可视化工具 定价:免费 / Pro $15/月 一句话概括 粘贴文字,一键生成信息图表。 Napkin 会读懂你的文字结构,自动判断该用什么图表形式表达,不需要写 Prompt…...

代码遗产规划师:在技术断代潮收割焦虑税

在AI驱动的技术迭代浪潮中,软件测试行业正经历前所未有的断代危机:传统手工测试岗位需求锐减,而AI测试能力成为新分水岭。据统计,AI测试覆盖率突破80%后,初级测试岗位需求同比下降30%,而测试开发与质量效能…...

Tinke终极指南:NDS游戏文件编辑与资源提取的完整解决方案

Tinke终极指南:NDS游戏文件编辑与资源提取的完整解决方案 【免费下载链接】tinke Viewer and editor for files of NDS games 项目地址: https://gitcode.com/gh_mirrors/ti/tinke Tinke是一款专为任天堂DS游戏设计的全能文件查看器和编辑器,为游…...

浏览器扩展Cookie管理工具:从痛点解决到价值创造的技术实践

浏览器扩展Cookie管理工具:从痛点解决到价值创造的技术实践 【免费下载链接】cookiehacker Chrome extension, very easy to use. Cookies from: JavaScript document.cookie/Wireshark Cookies etc. 项目地址: https://gitcode.com/gh_mirrors/co/cookiehacker …...

运维系列虚拟化系列OpenStack系列【仅供参考】:用 namspace 隔离 DHCP 服务 - 每天5分钟玩转 OpenStack(90)

用 namspace 隔离 DHCP 服务 - 每天5分钟玩转 OpenStack(90) 用 namspace 隔离 DHCP 服务 - 每天5分钟玩转 OpenStack(90) Neutron 使用 veth pair 解决了这个问题。 用 namspace 隔离 DHCP 服务 - 每天5分钟玩转 OpenStack(90) Neutron 通过 dnsmasq 提供 DHCP 服务,而…...

运维系列虚拟化系列OpenStack系列【仅供参考】:配置 DHCP 服务 - 每天5分钟玩转 OpenStack(89)

配置 DHCP 服务 - 每天5分钟玩转 OpenStack(89) 配置 DHCP 服务 - 每天5分钟玩转 OpenStack(89) 配置 DHCP agent dhcp_driver interface_driver --dhcp-hostsfile --interface 配置 DHCP 服务 - 每天5分钟玩转 OpenStack(89) 前面章节我们看到 instance 在启动过程中能…...

Cadence实战:从原理图到PCB的高效转换技巧

1. 从原理图到PCB的高效转换流程 在硬件设计领域,Cadence作为行业标杆工具链,其原理图到PCB的转换效率直接影响项目进度。以常见的IMU传感器MPU6050为例,完整的转换流程包含封装命名、网表生成、PCB初始化三大关键阶段。 首先在原理图编辑器中…...

7个进阶技巧:ComfyUI-AnimateDiff-Evolved从入门到精通AI动画创作

7个进阶技巧:ComfyUI-AnimateDiff-Evolved从入门到精通AI动画创作 【免费下载链接】ComfyUI-AnimateDiff-Evolved Improved AnimateDiff for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-AnimateDiff-Evolved AI动画制作正迎来前所未有的发…...

RunningAverage库:嵌入式滑动平均高精度实现

1. RunningAverage 库深度解析:嵌入式系统中高效、精准的滑动平均实现在嵌入式系统开发中,传感器数据滤波是保障系统鲁棒性的基础环节。原始ADC采样值常受电源噪声、电磁干扰及器件本底噪声影响,直接用于控制或显示会导致抖动、误触发甚至系统…...

终极指南:qmcdump轻松解锁QQ音乐加密音频的3个核心技巧

终极指南:qmcdump轻松解锁QQ音乐加密音频的3个核心技巧 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是…...

失败的考古,乐视电视S40 Root

当一键Root工具报出“没有该机型的方案”时,我才意识到:原来在Android的世界里,老并不等于弱,反而意味着更多的碎片化与兼容性难题。 前言:为什么要在2025年折腾一台2014年的电视? 事情是这样的&#xff0…...

基于粒子群优化随机森林(PSO-RF)的时间序列预测 PSO-RF时间序列 优化参数为决策树数...

基于粒子群优化随机森林(PSO-RF)的时间序列预测 PSO-RF时间序列 优化参数为决策树数目和深度, 采用交叉验证抑制过拟合问题 matlab代码暂无Matlab版本要求 -- 推荐 2018B 版本及以上 采用 RF 工具箱(无需安装,可直接运行)&#xf…...