自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

golfxiao的专栏

擅长设计高性能、可扩展、结构优良的软件,并致力于在编程领域宏扬工匠精神。

  • 博客(141)
  • 资源 (6)
  • 收藏
  • 关注

原创 ScratchLLMStepByStep:模型推理之选词算法

从上面温度对概率分布的影响可以看出,温度如果持续升高,高可能性词和低可能性词的概率值将趋近于相同,这意味着模型输出将接近完全随机,等于回到了预训练之前,这肯定不是我们想要的,所以实际场景中,温度调整范围会限定在一个有效的区间内,像ChatGPT的温度有效区间就是0-2

2025-01-20 12:30:43 620

原创 ScratchLLMStepByStep:训练自己的Tokenizer

这一点非常重要,因为每个utf-8字符都是由一到多个字节组成的,将这个长度为256的编码表中的字节进行组合,理论上就能对世界上所有语言中的字符进行编码,并且还不会出现。

2025-01-17 22:28:44 1459

原创 ScratchLLMStepByStep:SFT之指令微调

在之前对SFT数据的准备时,会因为每批数据长度不等而对数据作填充对齐,因此需要引入注意力掩码attention_mask来取消对padding token的注意力计算,attention_mask的作用在于指示哪些位置是有效的(模型应该关注),哪些位置是填充的(模型应该忽视)。

2025-01-14 08:20:19 857

原创 ScratchLLMStepByStep:SFT指令微调之数据处理

目标是构建一个适用于指令微调场景的自定义数据集类SFTDatasettorch.utils.data.Dataset 是 PyTorch 提供的一个数据集基类,我们将基于这个基类来构建自己的数据集类。json用于解析jsonl格式的数据;linecache用于高效读取文件中的特定行。分词器tokenizer;序列最大长度max_len,默认为1024

2025-01-08 09:35:43 1038

原创 ScratchLLMStepByStep:SFT之分类微调

理论上来讲,只需要训练新的输出头out_head,但业界一些实验表明,训练更多的层有助于提高性能。因此,我们将最后一个transformer block和连接它的layernorm设置为可训练,其它层设置为不可训练。如上打印信息所示,需要训练的参数总共有708万,占所有参数109605890的比例约6.47%。

2025-01-04 03:30:00 765

原创 口语笔记——使动词

每个使动词都可以有三种形式,以move为例:move作为动词可表达:使……感动,让……感动,通常用于主谓宾结构。+ed作为形容词可表达:感动的,通常用于主系表结构。+ing作为形容词可表达:令人感动的,通常用于主系表结构。

2025-01-02 23:13:16 902

原创 ScratchLLMStepByStep:预训练模型之分布式训练

这里其实是一个坑,处理不好会造成训练过程中僵死,原因在于DDP封装过的模型在推理时会自动在多卡之间同步运算状态,但由于其它进程并没有运行模型评估,所以这个状态永远同步不到,训练时的表现就是整个训练进度卡住不动。

2025-01-02 02:00:00 1935

原创 口语笔记——感官+花费

物花人主要用take和cost,其中cost用于金钱费花,而take则有于其它所有场景。

2024-12-31 23:12:15 731

原创 ScratchLLMStepByStep:预训练模型之加速运算

16位是一种数据精度,32位是另一种数据精度,如果在模型训练时混合使用16位和32位就可以称之为混合精度训练。这个优化思想就好比在做饭的时候,有些成分用精确的量杯(32 位浮点数)来测量,有些成分用粗糙的量杯(16 位浮点数)来测量。

2024-12-31 03:00:00 1169

原创 口语笔记——祈使句用法

反义疑问句通常用于确认信息或表达不同的态度,它由一个陈述语和一个简短的疑问部分组成。let后面可以跟动词、形容词、副词、介词短语。祈使句否定语气,区分对主语否定还是对动词否定。祈使句的反义疑问句,用will表示对将来的疑问。

2024-12-10 22:30:04 874

原创 ScratchLLMStepByStep:预训练模型之从零起步

目标序列是将输入序列向前平移一个位置得到,这种设计可以让模型训练时,能够基于当前的输入预测下一个词,从而有效地捕捉序列中的上下文信息。

2024-12-10 17:52:27 886

原创 口语笔记——高频词汇

want/need后可以跟名词,也可以跟不定式,还可以跟代词+不定式组合。表示xxx怎么样,通常用于提出请求或建议,可以加名词或动名词。跟代词+不定式(sb to do)表示怎么会出现某种情况。表示如果xxx怎么办?

2024-12-03 22:13:41 1158

原创 ScratchLLMStepByStep: 预训练之高效数据加载

这里会用到一个np.memmap技术,这是一种将文件映射到内存的技术,它允许用户像访问普通内存中的numpy数组一样访问磁盘上的整个数据集,但实际上只有少部分数据从磁盘加载到了内存中,这种技术非常适合处理大型数据集。

2024-12-03 02:16:35 948

原创 ScratchLLMStepByStep:带你构建MiniGPT

输出的logtis是一个(2,4,32000)形状的张量,表示每个位置的next token预测结果是一个32000维度的向量,即词表中每个token的可能性分数。注:上面的各个配置项的默认值,就是我们将要构建的模型目标结构,这里采用768维的向量嵌入,12个解码层,12个注意力头,1024的上下文长度。

2024-12-01 03:45:00 96 2

原创 ScratchLLMStepByStep:构建自己的大语言模型教程

在学习大语言模型的时候,总会遇到各种各样的名词,像自注意力、多头、因果、自回归、掩码、残差连接、层归一化等等。这些名词会让学习者听的云里雾里。本教程将会带你从零开始,一步一步的去构建每一个组件,揭开它们的神秘面纱,并最终用这些组件组装成一个大语言模型。在构建过程中,我们会从实现原理的角度去剖析这些组件都是做什么的,又是怎么被设计出来的,让我们知其然,知其所以然。

2024-11-29 23:43:25 380

原创 模型压缩——量化方法解读

线性量化(也称为标准的8-bit量化)是将原始浮点数据和量化后的定点数据之间建立一个简单的线性变换关系,这样做可以减少存储和计算的复杂度,同时尽量保持原始数值的信息。聚类的过程是一个循环迭代不断寻找最优聚类中心的过程,初始的聚类中心是随机选择的,算法会计算数据点与每个聚类中心的距离,目的是将数据点分配到距离其最近的聚类中心。

2024-11-29 13:44:16 1523

原创 模型压缩——如何进行知识蒸馏?

知识蒸馏`基本思想`是:通过大模型(教师模型)的指导来训练小模型(学生模型),从而让小模型的性能接近大模型,知识蒸馏的`基本做法`是:同时使用教师模型和学生模型对输入数据进行预测,然后对齐教师模型和学生模型的输出概率分布,让学生模型来学习教师模型的行为模式,从而达到减少模型大小并保留性能的目的。

2024-11-24 18:36:34 1329

原创 CPU使用率100%的故障排查记录

注:这些数据在内存里持续了很长时间,SQL执行时间是在14:27分,但到合作方的运维同事抓jstack堆栈的14:47分时,线程仍然处于Runnable状态,说明这些数据已经在内存里常驻了至少20分钟以上。

2024-11-22 23:40:36 1014

原创 模型压缩——如何进行神经网络架构搜索?

它的基本思路是:先规定一个搜索空间,通过给定的搜索策略,得到与策略对应的神经网络架构模型,通过数据集评估该模型的性能,再将该结果反馈给搜索策略,以决定是否得到了更优的神经网络架构。(Neural Architecture Search, NAS),可以用来解决这个问题,它把神经网络的结构、参数量、组合方式都当做搜索空间,利用某种搜索算法对所有可能的参数和结构组合进行性能评估,以此来快速的搜索到合适的神经网络架构。上面在搜索过程中,记录了所有模型结构的评测记录,这里将所有模型的记录按照准确率排序。

2024-11-22 16:49:09 684

原创 反欺诈文本分类微调教程

为了帮助更多初学者从零开始掌握微调这一关键技能,本文介绍一个作者本人在实际工作中完整跑通的微调实战系列教程,该教程附带可运行的数据集和可运行的jupyter notebook,适合想要通过实战操作来掌握微调技术的初学者。

2024-11-20 13:30:47 498

原创 模型压缩——训练后剪枝

LeNet是一种经典的卷积神经网络,由 Yann LeCun 等人于 1998 年提出,主要用于手写数字识别(Minst数据集)。卷积层1:输入层接收一个32x32的单通道图像,应用6个5x5的卷积核后,得到一个28x28x6的特征图(每个卷积核都会得到一个28x28的特征图),卷积层有助于捕捉图像中的边缘、纹理等局部特征;池化1:用ReLu函数对卷积层的输出结果进行激活后,应用一个2x2的最大池化操作,特征图变为14x14x6;

2024-11-20 07:28:01 1156

原创 模型压缩——基于粒度剪枝

权重级别的剪枝破坏了原有模型的结构,现有硬件架构的计算方式通常无法对它进行加速,需要特殊的硬件或软件才能利用剪枝后模型的稀疏性,所以在目前通用的硬件上运行时速度并不能得到提升。

2024-11-16 22:48:00 1115 1

原创 ScratchLLMStepByStep:带你构建TransformerBlock

在以前的某些架构中,层归一化是在MultiHeadAttention和FeedForward之后用的,这被称为Post-Layernorm,这种方法在较浅的网络中表现良好,但在更深的网络中会遇到训练不稳定的问题,总体来说,Pre-Layernorm在稳定性方面表现更好。

2024-11-13 14:19:25 921

原创 模型压缩概览

通过让学生模型来学习教师模型的行为模式,减少模型大小和计算成本的同时,也保留了教师模型的性能。将功能类似的神经元用一个神经元等效代替,并从模型中删除不必要的连接和神经元,让模型变得更紧凑,运行更快,同时剪枝后的模型仍然保持较高的准确性。

2024-11-13 01:14:34 996

原创 ScratchLLMStepByStep:带你实现多头注意力

将大权重矩阵按照头的数量(num_heads)分割,即能模拟出多头各有一个小的权重矩阵的效果。多头注意力是指将注意力机制分为多个“头”,每个头学习数据的不同方面,使模型能够从多个层面来捕获输入序列中各部分之间的关系,这提高了模型在复杂任务中的表现。

2024-11-11 23:21:05 923

原创 ScratchLLMStepByStep:带你实现因果注意力机制

与标准自注意力一次允许访问访问整个输入序列不同的是,因果自注意力会遮蔽序列中当前位置之后的输入,限制模型在计算注意力得分时,只能访问当前位置及之前的token,因此也被称为遮蔽注意力(masked_attention)。

2024-11-11 13:14:26 1266

原创 欺诈文本分类检测(十八):基于llama.cpp+CPU推理

我们用Lora训练出自己的个性化模型后,首先面临的问题是:如何让模型在普通机器上跑起来?毕竟模型微调训练时都是在几十G的专用GPU上训练的,如果换到只有CPU的普通电脑上,可能会面临几秒蹦一个词的尴尬问题。LLama.cpp项目就是来解决这个问题的,它是由Georgi Gerganov开发的一个开源工具,主要用于将大语言模型(LLM)转换为C++代码,使它们可以在任意的CPU设备上运行。无需依赖pytorch和python,而是以c++编译的可执行文件来运行。

2024-11-09 19:36:01 1311

原创 ScratchLLMStepByStep:带你从零认识自注意力

尽管只是计算一个token的上下文向量z(2),但我们仍然需要所有token的键向量k和值向量v,因为查询向量q_2需要与序列中所有token的k向量和v向量运算,才能得到x_2的注意力权重和上下文向量。

2024-11-06 22:02:29 931

原创 ScratchLLMStepByStep:词嵌入和位置嵌入

在前面一篇文章带你从零训练分词器中我们训练了一个分词器,并通过分词器的序列化方法得到了文本的token_id序列表示。但是在深度学习中,许多算法(例如:注意力)都需要对输入数据进行距离和相似度计算,而离散的token_id序列本身并没有距离和相似度的概念,例如100和101两个token_id虽然数值接近,但并不表示这两个token_id相似。因此,我们通常会将离散的token映射到一个高维的、连续的向量空间,这样就允许我们使用线性代数中的操作(如加法、点积)进行计算。

2024-11-06 15:50:25 818

原创 带你从零认识语言模型

本文会以Qwen2-0.5B模型为例,从使用者的角度,从零开始一步一步的探索语言模型的推理过程。从使用的角度来接触模型本地运行的方式来认识模型以文本生成过程来理解模型以内部窥探的方式来解剖模型。

2024-11-04 13:03:28 1077 5

原创 口语笔记——时态

修饰形容词(How old / How big / how beautiful / how tall / how long / how many / how much)修饰副词( how fast / how often / how soon / how slowly / how much / how long)不可以延续的词可以用现在进行时表将来:例如go, come, leave, arrive, start, begin。对于现在进行时和一般将来时,当疑问词和主语相同时,将主语省略掉。

2024-09-27 21:23:57 1131

原创 欺诈文本分类检测(十七):支持分类原因训练

进行了数据增强,本文将使用增强后的数据对模型进行进一步训练,以便得到能同时预测出分类标签、欺诈者、原因分析多个信息。总共进行了5折数据10轮训练,每折数据进行了两轮训练。训练结果中共包含三个信息,由于三个信息的输出类型不同,需要分别分析每个字段的评测方式。

2024-09-27 12:46:23 1168

原创 口语笔记——被动语态

英语的语态共有两种:主动语态和被动语态。主动语态表示主语是动作的执行者。被动语态表示主语是动作的承受者。被动语态(passive voice)是动词的一种形式,只有需要动作对象的及物动词才有被动语态。被动语态的结构是be+done(过去分词)。

2024-09-25 23:22:14 1544

原创 欺诈文本分类检测(十六):支持分类原因评测改造

由此可见,如果不考虑序列中词的顺序,则选择rouge-1,反之,如果考虑序列中词的顺序,则选择rouge-L。上面的tokenize方法中,先使用jieba.cut方法进行分词,再将分词后的序列用空格连接,转换成与英文文本相同的分隔符,以便rouge库能自动分词。

2024-09-25 09:48:51 1253

原创 欺诈文本分类检测(十五)——数据校正与增强

有一个数据层面的隐患在于,我们在给正向数据集所打的标签,并不是那么的准确。前面打标签的基本做法是: - 从正向数据集中分割出的对话,都打的是正向标签 - 从反向数据集中分割出的对话,都打的是负向标签 后一类问题不大,但前一类其实是存在一些问题的,一个完整案例中带有欺诈时,并不见得从中分割出的子对话也带有欺诈。

2024-09-21 06:45:15 837

原创 口语笔记——现在完成时

对时间段提问时(how long),必须用可延续动词,不可延续动词 要换成 可延续的动词或系表结构,来表示可延续的状态。穿衣服的动词原本是put on,但这个动作不可延续,所以换成了能表达相同含义的be动词。当无法变成延续性动词或状态时,用since从句,从句的时态是一般过去式。也可以将put on 换成 wear,表示长时间穿着,也是可延续性动词。现在完成时中的时间有两种表示形式:时间点和时间段。

2024-09-11 13:33:33 1271

原创 欺诈文本分类检测(十四):GPTQ量化模型

本文通过gptq方法分别对微调后的模型进行了8位量化和4位量化,并对比了量化前后模型的性能指标差异,8位量化模型的性能指标变化小,而4位量化模型的性能指标变异较大。

2024-09-11 00:01:36 1735

原创 口语笔记——状语

状语主要用来修饰动词,也可以修饰副词、形容词和整句。状语是用来说明时间、地点、原因、方式、程度、频率、目的、结果、伴随等。状语特点:加上或去掉对整个句子是否成立没有影响,就像上面的和yesterday去掉后的句子剩余部分仍然成立。

2024-09-07 12:51:41 1014

原创 欺诈文本分类检测(十三):交叉训练验证

修改评估和保存模型的策略,由每100step改为每个epoch,原因是前者保存的checkpoint有太多冗余。将num_train_epochs调整为2,表示每个折子的数据集训练2遍,k=5时数据总共会训练10遍。注:当时训练过程中会意外发生OOM,所以临时将批次大小per_device_train_batch_size改为8.lora_config.lora_dropout = 0.2 # 增加泛化能力。

2024-09-07 11:48:50 1841

原创 欺诈文本分类检测(十二):模型导出与部署

使用LoRA 适配器训练完后,每次推理时候都需要分别加载基座模型和 LoRA 适配器,一方面比较繁琐,另一方面也不利于模型部署,因此有必要将基座模型和 LoRA 适配器进行合并,导出成一个模型。

2024-09-06 06:48:32 1267

使用Ollama本地部署gemma

部署Gemma模型(或任何其他模型)使用Ollama框架通常涉及以下关键步骤:设置环境、获取模型、配置Ollama、运行Ollama服务等。

2024-06-04

flutter-in-action+闲鱼最佳实践

《Flutter in Action》是一本深入介绍Flutter应用开发的书籍。这本书由Eric Windmill撰写,涵盖了Flutter的基础知识、高级特性和实际应用。 书中首先介绍了Flutter的概念和基本原理,包括Flutter的架构、组件和布局。然后,书籍详细讲解了如何使用Dart语言进行Flutter开发,包括Dart语言的基础知识、类型系统、函数式编程和异步编程。 接下来,书籍介绍了Flutter的UI组件,包括Text、Image、Button等常用组件的使用方式和属性设置。此外,书籍还讲解了Flutter的布局机制,包括单个组件的布局、多个组件的布局和动态布局。 除了基础知识,书籍还涵盖了更高级的Flutter特性,例如动画和手势识别。书中详细介绍了如何使用Flutter的动画和过渡库来创建平滑的过渡效果,以及如何使用手势识别来处理用户输入。 在应用开发方面,书籍提供了很多实用的示例,例如如何创建本地文件系统、如何访问设备功能(如相机和位置信息)以及如何与网络进行交互。书中还讨论了如何进行跨平台开发和测试,以及如何发布和分发Flutter应用。

2024-06-04

软考架构师论文写作指南+论文模板

内容概要: 1. 论文结构拆解 2. 摘要模板 3. 应试技巧 4. 论文模板 适用人群:软考系统架构设计师应试同学

2024-05-27

Android2.2 史上最全google源码

Android操作系统2.2平台上所有源码,包括SDK以及被隐藏的SDK源码,此外还有apache davik虚拟机方面的源代码,贡献出来供大家学习参考使用

2013-03-28

java笔试面试题收集

这是我收集的一些java面试和笔试题,希望能对各位有所帮助

2010-04-02

java笔试面试题集

这是我找工作时搜集的一些java笔试题,希望能对各位笔试和面试有所帮助。。。

2010-03-29

spring学习笔记

这是我个人学习javaEE 轻量级整合框架spring时记录的笔记,希望能对大家的学习有所帮助,呵呵

2010-03-29

v b6.0 视频教程

这是一个有关VB6.0的视频教程,需要安装!

2009-03-04

sql server 2005视频教程

这是一个sql server2005 的视频教程,通过学习此教程你可以对微软的这宽流行的数据库软件有个深入的了解!

2009-03-04

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除