自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于nsight_compute进行kernel性能分析

当利用nsight进行性能分析时,当涉及到内核级别的性能分析时,nvidia提供了系统级别(nsight system),和内核级别的性能分析工具(nsight compute)。其中,内核级别的性能分析,可以检查kernel实现的性能好坏及bottleneck。本次主要对比的是cublas和基于naive cuda实现的kernel性能对比:cublas的实现可以理解为最优解,而naive cuda的kernel没有进行,global memory。共享内存或者寄存器相关的优化。

2024-06-23 11:30:44 721

原创 RAG_Example

1. 文本转换过程中,PDF的信息可能会丢失和损坏。比如对于一个只包含很多小标题的文档,我怀疑是否能够获得足够多的有效信息。此外,一些文档中的信息,是通过图文结合的方式,这种信息是否能有效获取呢?2. LLM基座模型的选择比较重要,目前来看,模型可以理解中文,但是不能说中文,这是一个问题,想到的解决方案就是替代基座模型。3. 目前由于使用不够充分,无法给出结论,但是目前感觉每个环节都可能会出问题。主要流程包括下面几个模块,每一个模块都有很多选择,而不是唯一解。但这里可以感受到潜在的几个问题。

2024-06-14 07:50:39 181

原创 llama2模型参数

tok_embeddings.weight [32000, 4096]norm.weight [4096]output.weight [32000, 4096]layers.0.attention.wq.weight [4096, 4096]layers.0.attention.wk.weight [4096, 4096]layers.0.attention.wv.weight [4096, 4096]layers.0.attention.wo.weight [4096, 4096

2024-06-09 16:50:13 513

原创 HPC: perf入门

如果你想查看你的程序在cpu上运行时,耗时时如何分布的,那么perf是一个合理的选择。

2024-06-08 22:06:39 244

原创 stack overflow复现

最后结果是7929kB时, 发生stack overflow. 通过ulimit,可以看到栈的理论最大数值(单位KB),基本一致。其实我们可以更改stack的大小。这个例子想说明的是, 栈的存储空间很小,基于我的电脑,默认情况, 只能存储8192KB的数据,当你在内存的栈中,存放了太多元素,就有可能在哦阿城stack overflow这个问题。对应的一张1280 * 720的图片载入到栈中,就会造成overflow!下图,是我写的程序,不断的创造1KB的栈,来看看执行了多少次。今天看看如何复现这个问题。

2024-06-08 10:47:03 163

原创 CLIP模型NAN问题解决

之后,决定从python代码的角度去寻找问题的答案,经过单步调试,发现,在transformers库的/modeling_clip.py文件的 _build_causal_attention_mask()函数中,存在inf的输入,接着,把它用-10000替代。早有耳闻,clip模型会在fp16下发生NAN的问题,但是今天基于2080Ti测试,发现在单精度下的tensorrt推理同样存在NAN的问题,我甚至一度怀疑是tensorrt的推理代码有问题。然后,对比tensorrt的输出结果,符合预期。

2024-05-30 23:07:12 178

原创 python编程不良习惯纠正: 慎用顶层代码

从开发者的角度,当时开发的时候,可能这样的操作,没有造成明显的问题,但是作为使用者,这样的写法会造成对于程序的理解和执行很大的干扰,因此,我们还是建议将每个模块的可执行部分,封装到main函数中,如下。这几天在跑一个开源代码时,发现,pdb断点不起作用,经过一番检查,发现代码在from show import 时,有大量的操作。而当其他文件调用该模块时,即使是from show import show, show.py中的顶层内容也会被全部调用。经过进一步的检查发现,

2024-05-26 11:12:42 231

原创 cuda-gdb小感

1. 如何kernel内的断点失效,可以在kernel被调用前添加断点,用step的形式进入。4, 优先使用 cuda-sanitizer 进行debug。这两天在学习cuda-gdb,使用的过程中有如下小感。2. 打印数组(你可以打印的不止一个元素)4. 显示device信息。

2024-05-26 09:03:13 239

原创 SmoothQuant量化介绍

针对smoothquant这种方法的理解,我觉得可以分为几个层次,首先从思想层面,它发现了输入的activation具有channel wise的误差,然后,试图把来自activation的误差和量化步长转移一部分到weight中。,量化的颗粒度也可以有所不同,包括per-tensor, per-token, per-channel, group-wise。首先,int8量化的方式可以用公式表达,翻译一下找到int8的数值范围,基于权重的最大值,进行一个线性映射。此外,项目的代码也值得一读。

2024-05-19 07:19:05 576

原创 lora体验

现在如果想体验stable diffusion的lora功能,有很多种渠道吧,虽然lora是微软开源,但是cloneofsimo提供了适配stable diffusion的lora流程。代码基于cli_lora_pti.py 执行, 针对输入的关键词,我们生成对应的token id. 其实就是建立embedding的映射了。接下来,我们可以选择是否进行inversion, 如果选择训练inversion,我们会对于text encoder进行训练,然后,我们可以inspect_lora(什么意思呢?

2024-05-11 11:08:38 432

原创 XTuner笔记

方法:在模型的每一层之间添加可训练的小规模的网络,冻结原始网络权重,以此来减少fine-tune所需要的参数量。应用:适用于那些希望在保持预训练模型结构不变的同时,对模型进行特定任务调整的场景。缺点:引入推理延时在LoRA的基础上,添加了NF4的数据压缩(信息理论中最有的正太分布数据量化数据类型),进一步减少了显存和内存的消耗;然后添加一组可学习的LoRA权重,这些权重通过量化权重的反向传播梯度进行调整。块状 k-bit 量化:既压缩了数据,又解决了异常值(我理解为噪声)对数据压缩的影响。

2024-05-10 17:35:06 410

原创 OpenCompass笔记

但是,大模型的评估是很复杂的,如果说小模型的测试就像体检,指标明确,那么大模型的评测就像高考,怎么考核,考核什么,分数线多少,都是需要仔细讨论的。可以想见的是,这是一个很难公正评价的事情,因此,引入了下面的介绍。假设一个模型,被2bit量化,然后一直瞎说话,怎么办?你是不是应该评估一下这个模型的效果?

2024-05-10 17:11:59 228

原创 智能体Agent笔记

Lagent是一个智能体框架,而legoagent是一个diy算法的模块。从架构思想上,我还是很认可的。我个人觉得智能体是个饼,最核心的问题是,你如何解决大模型的幻觉问题?3. 能运用推理能力理解信息,解决问题,产生推断,决定动作。1. 可以感受环境中的动态条件。2. 能采取动作影响环境。

2024-05-10 17:06:06 184

原创 LMDeploy笔记

模型部署包含的内容很多,来聊聊。

2024-05-10 16:59:56 450

原创 OpenCompass大模型评估

可以看到 summary 和csv被分别写入。安装opencompass。

2024-05-10 16:23:41 150

原创 书生浦语作业6 Lagent

安装Lagent 和 AgentLego 和相关依赖。因为流程完全按照上述链接执行,不copy代码了,简述流程。5. 调用Lagent Web Demo。在网页端,我们可以调用简单的服务。4. 启动lmdeploy服务。1. 创建lagent文件夹。2. 配置conda环境。

2024-05-10 15:55:50 229

原创 书生作业:LMDeploy

自己随便说几句。关于模型部署,很有趣的一件事就是,它一路随着深度学习训练一起发展,尽管例如tensorrt等工具的出现,不断试图降低部署门槛,但是实际上,每一次AI的升级,似乎让这个细分领域没有因为工具易用性的提高而萎缩,反而量化,蒸馏,各个细分领域开支散叶。你说未来的模型部署是什么样呢?

2024-05-10 15:26:44 610

原创 书生作业:XTuner

作业链接: https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md xtuner: https://github.com/InternLM/xtuner首先,按照xtuner的指令依次完成conda环境安装,以及xtuner库的安装。然后,我们开始尝试使用QLora 进行Finetune。通过执行generate_data.py,我们实现对数据的处理。需要复制下列内容然后,会看到personal_assistant.json

2024-05-10 12:36:58 279

原创 RAG技术简介

parametric memory指的是把知识存储在一个分布中,最简单的,比如,我们用高斯分布来表达一个数据时,这就是一种 parametric method,而Bert,GPT这类模型,都是把知识存储在权重中。如下图,基于特定知识,我们维护了一个向量数据库,用户的提问会被转换为增强的提示词,然后传入LLM中。其中,Retrever(DPR)是基于编码器的结构。我不喜欢RAG的思路,号称是non-parametric的方法,实际上也引入了编码器解码器的结构去解决额外难题,另外,RAG的显存占用多大呢?

2024-05-10 11:18:06 596

原创 书生作业:RAG

作业:https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/homework.md。教程:https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/readme.md。6.再创建一个测试用的问询列表,用来测试拒答流程是否起效.在确定好语料来源后,创建 RAG 检索过程中使用的向量数据库。5.下载茴香豆的语料库,提取知识库特征,创建向量数据库。增加茴香豆相关的问题到接受问题示例中。

2024-05-10 10:03:30 369

原创 书生作业2

如果使用提示词“讲一个笑话.200字以上”, 会有偶发的输出较短的笑话的情况。生成200字以上的笑话,可以看到使用不同的提示词,会有不同的效果。如果使用提示词“讲一个200字以上的笑话”时,结果相对稳定。另外一种,可以利用modelscope.hub进行下载。一种登陆hugging face进行直接下载,这里用llava2做了一个demo。

2024-04-04 22:04:18 239

原创 书生浦语笔记一

2023年6月,InternLM的第一代大模型正式发布。仅一个月后,该模型以及其全套工具链被开源。随后,在8月份,多模态语料库chat7B和lagent也被开源。而在接下来的9月份,InternLM20B的开源发布进一步加强了全线工具链的更新。最终,2024年1月17日,InternLM2也正式开源。InternLM2提供了两种不同参数量级的模型,分别是7B(Billion)和20B。前者更轻量级,适用于一般性应用,而后者则能够支持更复杂的场景。

2024-03-31 17:41:49 604

原创 GPT3, llama2, InternLM2技术报告对比

GPT3(September 22, 2020)是大语言应用的一个milestone级别的作品,Llama2()则是目前开源大模型中最有影响力的作品,InternLM2(2023.09.20)则是中文比较有影响力的作品。今天结合三篇技术汇报,尝试对比一下这三个方案的效果。

2024-03-31 17:23:48 1324

原创 YOLO系列论文阅读(v1--v3)

YOLOV2中,作者对于网络结构,和训练策略都做了调整和改进。对于网络架构的修改,有效的弥补了YOLO的短板,而关于训练策略的优化,作者展示了统一目标检测和分类这两类任务的雄心。此外,也提到了在物体分割领域的应用可能。此外,作者的笔风也逐渐飘逸,说实话better,stonger,faster作为小标题,并不利用读者梳理论文的框架。Yolov3的创新点给人一种重剑无锋的感觉,没有太多冗余的更新,但是backbone优化,和多尺度信息引入又大大的改进了YOLOv2的效果。

2024-02-23 16:20:54 1310 1

原创 每日论文20240219:Attention is all you need

作者提到,针对sequence transduction的任务,CNN和RNN还是主要的模型组成部分,而目前性能最好的方案添加了attention机制。作者进一步提出了transoformer,一个完全基于注意力机制的由编码器,解码器组成的单一网络。证明这一网络架构优越性的就是它在WMT 2014 English-to-French translation (英法翻译)任务中,刷新了最好成绩。

2024-02-21 08:09:12 956

原创 Pytorch 一文搞懂view,reshape和permute,transpose用法

存储的tensor按照行优先(row major)的顺序存储。如下图,当访问每一行的下一个元素,你只需要前进一步(stride),但是访问下一列的元素,需要前进四步(strides)。在PyTorch中,有些对Tensor的操作并不实际改变tensor的内容,而只是改变如何根据索引检索到tensor的byte location的方式,比如narrow()view()expand()permute()[1]。

2024-02-17 11:23:52 1276

原创 C++ YOLOv3推理 第四讲 :模型格式

可以看出来,下列代码存储了13个卷积层的参数,而实际上,对照Part3的网络结构,实际上模型主要就是包含13个卷积层的参数。其中,save_conv2d_layer的作用很重要,它把tensor的信息存储到gguf_writer中,存储的信息包括: 1. 卷积层的名称 2. 卷积层的权重参数 3. 卷积层的尺寸。在Part 1中,我们提到了模型的使用包含了将它转换为gguf格式的步骤,后续的流程都是讨论基于gguf格式,如何实现推理。那么,gguf格式的数据到底是如何转换得到的,保存的内容具体包含哪些呢?

2024-02-03 12:47:58 399

原创 C++ YOLOv3推理 第三讲: 模型推理

如果对于yolov3的模型结构感兴趣,欢迎阅读yolov3论文的原文~上一章讲到模型参数加载,本文主要讨论,如何基于加载的模型实现模型的推理。

2024-01-29 23:25:00 489

原创 Macbook M1编程配置

包管理工具brew,基本是mac必不可少的下载工具,可以在国内,下载很慢,通过替换镜像源,速度同样可以起飞。最近淘了一个M1,总算可以享受一下arm64架构的电脑了。接下来,介绍一下实用的提高编程体验的配置。首先,在使用python时经常使用的pip工具,没有配置,会遇到下载偏慢的问题。mac的默认终端总感觉不够酷炫,看到其他人都推荐这个,可以试试。参考下列链接的方法,修改为国内源后,速度起飞。github下载比较慢怎么办,建议参考它来解决。安装java开发环境。

2024-01-15 20:40:29 371

原创 浮点数(Floating point)介绍

FLoating point的数据类型是我们常用的一种数据结构,但是关于它的表达形式以及运算方式,我们真的理解清楚了吗?int main()针对上面的代码,我们期待的结果是什么?答案如下:这个当然可以归咎于浮点数的精度问题,但是值得注意的是,这个过程中并没有出现overflow。那为什么导致了计算的误差呢?首先,小数基于二进制可以通过下列方式表达。但是,对应的问题是,表达的范围和精度都很受限。特别大的数和特别小的数通过有限的bits数都很难表达。

2024-01-14 00:09:51 485

原创 C++ YOLOv3推理 第二讲: 权重及参数加载

模型参数的记载到此基本讲完,读取的这些参数的作用,只有结合具体的推理,才能更好的理解诶,这也是下一章的目标。另外,gguf的参数加载细节在这里也没有介绍,这也是应该后面详细说明的。

2023-12-30 22:47:19 474

原创 valgrind用法梳理

valgrind在这里展示的信息是:泄漏的内存是如何初始化的,从上述可以看出,是调用alloc_str造成了内存泄漏。Valgrind 和GDB是C编程中的两大debug神器,valgrind相比于gdb,没有那么受欢迎,但是在解决偶发型错误,以及内存泄漏等问题时,绝对是一把好手。基于这个信息,我们很容易联想到,strnlen中的字符串不包含终止符号,所以读取了无效内存。基于下列输出,我们可以确认,存在invalid read os size 1, 并且发生在strlen这个函数中。

2023-12-30 17:11:16 349

原创 C++ YOLOv3推理 第一讲: 项目简介

这一流程看起来高效,但是实际上也存在一个问题,那就是过分依赖nvidia提供的trt转换工具,并且该工具还没有开源,这也就意味着,当你用的不是nvidia的显卡时,模型推理就会变得无从下手,这对于高阶的模型部署(高度硬件定制化)来说,这样的黑匣子是无法接受的,因此,就更有必要熟悉一套白匣子的模型部署方式。而经过仔细查看,yolo-image.cpp中,主要包含的是工具类的函数,而yolov3-tiny.cpp中,包含有main函数。这里使用了gguf的数据格式,目前感觉还是很神秘的,但是有更详细的介绍。

2023-12-27 23:18:43 452

原创 EfficientAI tinychat tutorial 2

在完成了本次作业后,可以理解,这次作业是把矩阵乘法的优化加速方式和大模型推理时常用的操作结合,比如引入block和对应的scale的概念,以及4bit存储weight,8 bit存储activation的方式。从下图可以看到,loop unrolling并没有看到有效的效果提升,然后,也没有cuda对应的加速策略。而最后,相比于原始的方法,速度提高了10倍,还是一个相对比较满意的量级。首先,通过图来表达,常规的矩阵乘法和本次作业涉及的乘法的加速策略。总之,这些让我们应用起矩阵乘法的加法时更加困难。

2023-12-21 22:26:06 39

原创 EfficientAI tinychat-tutorial

在按照文档下载好模型和代码后,在transformer文件夹执行结果如下通过./chat查看了一下效果,着明显是个不工作的gpt。

2023-12-21 16:37:04 47

原创 EfficientAI Lab: 大模型AWQ量化

AWQ(Activation-aware Weight Quantization)的核心是基于通道级别的尺度缩放(channel-wise scaling),来保护显著权重。而值得注意的是,是通过观察“activation”,而不是权重,来选择缩放的大小。此外,该方法不需要进行反向传播和重构,部署容易。左图表达Round-to-nearest方法的策略和效果,PPL非常高(不好);中间的图表示作者的key observation,那就是保留一部分权重;

2023-12-04 20:27:53 1285 3

原创 EfficientML.ai-parallel computing tutorial

在 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GH的笔记本上来看看执行benchmark后的效果,可以看到最后一种是上述集中的组合,所以加速效果最好,CUDA没有启用。值得注意的是,后两个计算结果不正确,原因是arm上编译没有自动调用neon优化的宏。下面是计算结果,可看到,neon的计算结果正常,但是(只有)最后一行结果不正确。接下来又尝试基于树莓派查看一下加速效果,运行等待时间很长。目前为止,确认了并行计算在x86和ARM两大算力平台的区别。

2023-12-04 16:03:49 48

原创 EfficientAI Leacture 12: Transformer and LLM

对应的问题也显而易见,那就是词汇量很大时,one hot所占用的词汇大小非常大,而如果用float的形式,将大大减小数据的大小。在CNN中,我们会试图把每一个batch进行norm处理,而在transformer中,我们希望把Feature进行norm处理,也就是对应的word。不管是RNN,CNN,都遇到类似的问题,那就是无法保证足够大的感受域。首先,回顾了一下以往的NLP任务,可以分为Discriminative tasks和 Generative tasks。如何理解 P, Q, V。

2023-12-02 20:41:59 40

原创 每日论文231103: once for all

视频链接:项目链接:论文链接:​该项目吸引到我的是,它在效率和精度上实现的非常好的效果, 配合efficientML的Lecture也是很香.此外, 提供的视频链接介绍了ofa的使用方式.

2023-11-29 12:15:14 29

原创 EfficientAI Lab3: Neural Architecture Seach

OFA这个方法从方案介绍上来说,似乎相比与之前(2020)的方法效率明显提升。而就我的使用来说,我对于NAS使用的两种方法,尤其时evoluation search,没有真正理解,从而影响了我对于它的评价。而关于它的accuracy predictor,我的质疑的地方在于,这样的accuracy predictor数据集的获取成本是不是也很高。此外,这个策略据说可以推广到各类网络中,但是真的在推广后,能够展现比较好的性能吗?TODO。

2023-11-24 14:28:54 60

空空如也

空空如也

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

TA关注的人

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