自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 无法连接到远程扩展主机服务器

无法连接到远程扩展主机服务器 (错误: CodeError(AsyncPipeFailed(Os { code: 2, kind: NotFound, message: “No such file or directory” })))原文链接:https://blog.csdn.net/m0_51715487/article/details/142993242。解决方法:把服务器主机中.vscode-server的cli目录下servers文件夹内容清空后,再重新连接。整个csdn没有一个有用的法子。

2025-02-05 17:54:21 623

原创 nvidia-smi看不到进程pid

显卡显示占用但找不到pid。查找到后直接kill即可。

2024-10-21 11:21:18 288

原创 LLM知识蒸馏代码讲解及训练实验

知识蒸馏简单讲即使用大规模参数的模型对小规模参数模型进行蒸馏,且不是简单的只使用答案,是需要两个模型的log prob进行交互的,故两个模型的vocab size必须是一样的。参考论文中分类了多个不同的版本,on-policy及off-policy。

2024-10-14 17:55:49 1939

原创 实现一个简洁的代码模型评测框架(以Qwen2.5-coder Humaneval为例)

代码评测框架。

2024-09-20 23:45:43 1478

原创 从零实现强化学习DPO(SimPO)训练代码

实验的话我们就只对DPO进行测试了。使用B站的Index-1___9B-Chat模型在HF上随便找了一个关于unsloth的数据集进行了一下测试,数据集如下:是一个关于unsloth的问答,jsonl格式,每行都有prompt、chosen、rejected字段。训练过程结果如下:loss下降还是可以的,测试了几个用例输出,相较之前回答会不一样,有一点点变好吧。因为我们只有50条数据,且DPO之类的强化学习主要是减少bad的输出,而不是学习新知识,故提升不大也在合理范围内。

2024-08-27 09:47:08 4053 6

原创 Unsloth使用简介

简而言之用其降低模型训练时的显存。Unsloth与HuggingFace生态兼容,可以很容易将其与transformers、peft、trl等代码库进行结合,以实现模型的SFT与DPO,仅需修改模型的加载方式即可,无需对此前的训练代码进行过多的修改。

2024-07-15 16:01:00 940

原创 从零实现强化学习RLHF代码(PPO、RLOO)

从零开始实现强化学习代码

2024-07-15 15:58:41 2666

原创 deepspeed huggingface传入参数 optimizer和lr_scheduler测试

trl中的相关trainer是不支持deepspeed配置optimizer 和 lr_scheduler的,需要使用huggingface提供的。可以得出:deepspeed中的优化器和学习率策略确实是有优先级的,两个都定义的情况下会用deepspeed中的。TrainArgument不传lr_scheduler_type、optim,warmup_steps=15。推荐用法:optim用deepspeed, lr_scheduler用huggingface的 cosine。

2024-07-08 15:07:57 586

原创 Deepspeed报错解决:Error building extension ‘cpu_adam‘,AttributeError: ‘DeepSpeedCPUAdam‘ object has no a

碰到上面的报错也查了很多资料,但是都没有很好的解决,主要问题还是torch和deepspeed版本的问题。使用huggingface和deepspeed时遇到上述问题。

2024-07-07 21:29:18 3030 2

原创 lora 继续训练

一般正常lora训练完模型后我们只保存其lora参数,然后与base模型进行合并。记录一下训练完保存lora后,继续再对lora训练的步骤。即为之前保存的lora模型路径。

2024-06-18 11:00:58 1156

原创 使用DPO微调大模型Qwen2详解

基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback,RLHF) 事实上已成为 GPT-4 或 Claude 等 LLM 训练的最后一步,它可以确保语言模型的输出符合人类在闲聊或安全性等方面的期望。但传统的RLHF比较复杂,且还需要奖励模型,故DPO方法被提出,其将现有方法使用的基于强化学习的目标转换为可以通过简单的二元交叉熵损失直接优化的目标,这一做法大大简化了 LLM 的提纯过程。

2024-06-10 13:13:01 9024

原创 MOE原理解释及从零实现一个MOE(专家混合模型)

一个MOE主要由两个关键点一是将传统Transformer中的FFN(前馈网络层)替换为多个稀疏的专家层(Sparse MoE layers)。每个专家本身是一个独立的神经网络,实际应用中,这些专家通常是前馈网络 (FFN),但也可以是更复杂的网络结构。二是门控网络或路由:此部分用来决定输入的token分发给哪一个专家。可能有对FFN(前馈网络层)不太熟悉的小伙伴可以看一下下面的代码及图例,很简单就是一个我们平时常见的结构。

2024-06-05 14:40:34 16071 6

原创 Deepspeed详解与代码使用

CUDA_VISIBLE_DEVICES 不能与DeepSpeed一起使用来控制应该使用哪些设备。,DS中的WarmupLR也就相当于HF的参数lr_scheduler_type:constant_with_warmup,参数默认。有一个问题就来了,如果两边都配置了的话,会默认使用那个呢?这个问题困扰了我很久,直到看到源码:如下所示,核心便是其Zero策略,ZeRO训练支持了完整的ZeRO Stages1, 2和3。目前deepspeed已经与trainer集成了,故使用起来非常的简单,只需在。

2024-05-19 17:45:42 6528 1

原创 手把手带你构建一个自己的LLM训练框架【1】

随着到模型的日益发展,构建一个属于自己的训练框架是有趣的。计划写一系列教程来构建属于自己的训练框架。

2024-05-13 11:17:34 363

原创 主流模型Chat Template微调模版汇总

有了transfomers框架后我们的微调工作都变得简单了起来,我们在自己进行一些模型的微调时主要的操作就是构建自己的数据集及数据格式,不同模型的在训练时都使用了不同的template。因此,我从官方参考或实现中收集了几种主流模型的官方模板,以供大家自己进行微调时参考。如果觉得有帮助欢迎大家star或者提交issue 及 pr。

2024-05-13 10:58:31 1735

原创 手动下载huggingface数据集到本地加载

但是经常会报连接错误等问题,所以我们可以去huggingface官网下载好数据集,然后直接用数据集路径替换。的数据,手动将data文件夹下的文件全部下载,然后保存在本地一个文件夹中,替换上述的。

2024-05-08 16:26:38 1566

原创 Dora原理代码讲解

Lora估计大家已经很熟悉了,在这里就不详细介绍Lora的一些原理的,简而言之就是冻结已经训练好的模型权重,在其线性层或其它层中增加一些参数,只训练这些新增的参数层。具体原理可以在代码中理解,实际运用中将LinearWithLoRA替换为LinearWithDoRA即可使用。具体完整的模型训练集验证可见文章开头的代码库,其中有完整的代码演示。

2024-04-29 16:29:42 779

原创 常见的数据类型 (float16、float32、bfloat16、int8)解释

在机器学习术语中,FP32 称为全精度 (4 字节),而 BF16 和 FP16 称为半精度 (2 字节)。除此以外,还有 Int8 (INT8) 数据类型,它是一个 8 位的整型数据表示,可以存储282^828个不同的值 (对于有符号整数,区间为 [-128, 127],而对于无符号整数,区间为 [0, 255])。

2024-04-29 14:36:43 3295

原创 torch 模型中相关参数param及child修改测试详解

以我们上述的例子来看,它的输出就是整个Sequential层。如果我们定义模型的时候有两个Sequential,就会分别输出两个。所以一般的话使用model.children()会建立一个函数递归调用。这个就是输出模型的名字和参数,很常见了。name的话就是每个层的名字,参数就很多了,大家可以自己试一下。与1差不多,只不过仅有param没有了name。中的children是一个道理。该方法会遍历模型的子层,就跟。其他用到的在更新吧。

2024-04-19 20:07:56 291

原创 VIT与changeformer论文阅读笔记

VIT主要就是引入transformer到CV中,众所周知transformer相当于是句子的输入,那么最主要的就是看如何将图像转为token序列,实际上是通过一个卷积层来实现的,如下图所示。

2024-04-01 17:47:09 440

原创 以微调deepseek为例,基于transformers改写实现lora+

证明了对Lora的A和B使用相同的学习率无法有效的特征学习。还证明了通过以一个良好选择的固定比率设置不同的学习速率来修正,可以提升模型效果。这种算法为LoRA+。在实验中,LoRA+提高了性能(1%的−2%的提高)和微调速度,计算成本与LoRA相同。

2024-03-21 00:11:27 2946

原创 ModuleDict:什么情况下使用

【代码】ModuleDict:什么情况下使用。

2024-03-08 15:25:35 468

原创 Gemma模型一些细节讲解

Gemma模型报告中提到的几个点进行代码细节解读一下:(1)Embedding层共享参数(2)输入输出层均进行RMSNorm。

2024-03-04 17:45:46 767

原创 RMSNorm 类中引入一些参数

引入可学习的参数可以增加模型的复杂性,但同时也可能提高模型的泛化能力和性能。在设计模型时,需要权衡模型的复杂度和训练的难度。,可以为每个维度引入一个可学习的缩放参数。这可以通过创建一个与输入维度相同的权重矩阵来实现,而不是一个向量。可以设计一个自定义的归一化函数,其中包含可学习的参数。在归一化之后,可以引入一个可学习的激活函数,其参数也可以是可训练的。类中,引入可学习的参数,以增强模型的表达能力和适应性。除了缩放,还可以为每个维度引入一个可学习的偏移参数。中的激活函数,并将可学习参数作为激活函数的输入。

2024-03-04 10:22:26 1421

原创 Deepspeed使用

最近在调试deepspeed进行训练,正好工作的项目中也用到了deepspeed,所以记录一下deepspeed的用法等。pytorch 的DDP比较复杂,所以简单易用的deepspeed应运而生。本文仍然是不完整的,随着学习将会持续更新内容。

2024-02-08 10:40:22 1472

原创 Vscode远程连接管道不存在

vscode在本地配置的.ssh文件下生成了known_hosts,这里面包括了之前的配置信息,可以删掉重新配置试试。

2024-02-05 10:02:26 437

原创 查看机器是否可用bf16

记录一下查看机器是否可用bf16精度,

2024-01-31 11:16:05 909

原创 RuntimeError: cutlassF: no kernel found to launch!

模型推理的时候出现这个问题搜了搜本以为是bfloat精度问题,但改了之后依然没用。nvidia-smi的cuda version是12.2。nvcc -V 的cuda version是12.1。最终将torch版本回退为2.1.0后成功解决问题。torch版本为2.1.2。

2024-01-29 16:13:21 4711 13

原创 Python 中glob用法

glob 是 Python 中的一个模块,用于查找与指定模式匹配的文件路径。它特别适用于在目录中搜索文件,而不需要知道文件的确切名称。glob 模块提供了一个名为 glob() 的函数,它接受一个字符串参数,该参数是一个通配符模式,然后返回一个列表,其中包含了所有匹配该模式的文件路径。我的python_train文件夹中有四个文件,这样就可以根据后缀全部读取了。

2024-01-22 17:21:58 433

原创 deepspeed训练zero3策略cpu内存不足报错

大概率是cpu内存不足所致,训练用的zero3策略,将deepspeed的zero3策略换为zero2策略问题就解决了。用deepspeed训练deepseek过程中遇到如下问题,

2024-01-18 23:40:51 2814

原创 valueerror: no slot “”specified on host ‘localhost‘

deepspeed 单机多卡的时候不要设置export CUDA_VISIBLE_DEVICES,否则容易出现序号的错误。例如设置export CUDA_VISIBLE_DEVICES=4,5 就会报valueerror: no slot “”specified on host ‘localhost’故可以直接如下所示,添加 --include localhost:2,3。

2024-01-18 14:53:17 3045

原创 python call()方法

在上面的例子中,我们定义了一个名为Adder的类,该类接收一个参数x。call()方法则将传入的参数y与实例的x相加,并返回结果。然后我们创建了一个add5的实例,并调用该实例两次。call()方法可以使得一个类实例可以像函数一样进行调用,使用方式类似于函数调用。引用:https://pythonjishu.com。

2024-01-16 17:14:13 400

原创 code llama与starcoder论文总结

两个模型在数据方面最大的特点即在一定程度上都加入了通用语言数据,而CodeLLAMA更是直接在通用语言模型的基础上进行代码数据微调,这也证明了代码大模型的微调训练策略是行得通的,关键即在于训练的代码数据质量。在我们自己的代码大模型数据方面:分布可以基于CodeLLAMA的数据分布作为先验知识,搜集可以基于StarCoder中的代码过滤及筛选策略,代码数据生成可以考虑CodeLLAMA中的self-instruct策略:即基于自身模型给出测试代码及答案代码,将生成结果输入测试代码进行判断。

2024-01-12 17:16:40 832 2

原创 nn.functional与nn

有这么一种情况, 我想行为不同,但参数矩阵相同的两个 layer 共享参数, 该怎么做呢?如果行为相同那就简单了,直接多次调用 nn 里面的 Module 就好了。这个操作很像 MXNet 里共享参数的做法。pytorch 的 nn 模块则可以大大方便相同行为层的参数共享。这个操作会有用的,尤其是做 detection 和 segmentation 的同学。nn.functional与nn作用基本相同的,一般来说用nn即可,但是有特殊情况,比如说参数共享,就需要用nn.functional 了。

2023-12-26 18:07:48 415

原创 HfArgumentParser及dataclasses类(dataclass、field、asdict、__post_init__)相关

以上述代码为例,我们在定义自己深度学习模型时,会有训练参数、常规配置参数、验证参数等,所以我们可以分好几个dataclass类,使用上述代码去分配。终于,我们可以介绍HfArgumentParser了,这个用法主要常见于一些深度学习的代码,而且是在参数的定义中。该方法返回的是一个元祖,若你只需要返回一个,则应使用下述方法,将上述代码对应行数修改一下即可。是一个数据类,一般用于对数据的定义,他会默认添加__repr__及__init__。的知识,这两个都是属于dataclasses类,之前看源码还会有一个。

2023-12-26 17:55:13 1741

原创 Python的魔法方法及*args**kwargs详解

简而言之就是定义函数时可以通过** kwargs手机关键字参数,然后本身成为一个dict。

2023-12-17 20:04:59 445

原创 __str__在异常类中的应用

在自定义异常机制时,通常需要加一个__str__。代码如下import sysimport os"报错类型": except_type,"报错信息": except_value,"报错文件": except_file,"报错行数": except_traceback.tb_lineno,

2023-12-17 18:42:49 350

原创 Python切片[:, 0:1]及torch.argmax相关详解

X[:, 0:1]就是取所有行的第0列,X[:,0]也是取所有行的第零列,但区别就是前者取每一行的第零列后都会有一个新的括号,而后者是取出来当做数,最终以一个大括号的形式。简单易懂,结论:dim的取值为[-2, 1]之间,只能取整,有四个数,0和-2对应,得到的是每一列的最大值,1和-1对应,得到的是每一行的最大值。如果参数中不写dim,则得到的是张量中最大的值对应的索引(从0开始)。python中的切片其实也是跟torch中的切片一样了,常规的切片就不再赘述,主要说一下平时在torch中遇到的多维切片。

2023-12-12 14:43:32 517

原创 Python异常机制及自定义异常类详解,有try except为什么还要有raise?

最后再来说一下自定义异常类吧,主要目的是增加报错的可读性,丰富报错信息,其实没有自定义异常类也是可以的。具体的定义方法也很简单,下面贴两个代码大家可以自己跑一下看一下, 我相信就会对自定义异常类有了一个充分的认识,授人以鱼不如授人以渔。

2023-11-29 15:12:29 517

原创 Python中@property详解及dir()和__dict__一些思考

property 装饰器用于将一个类的方法转化为属性,使其能够像访问属性一样访问方法,而无需使用函数调用的括号。

2023-11-23 16:41:14 502

空空如也

空空如也

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

TA关注的人

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