- 博客(54)
- 收藏
- 关注
原创 【Valgrind】安装报错: 报错有未满足的依赖关系: libc6,libc6-dbg
libc6-dbg : 依赖: libc6 (= 2.31-13+deb11u11) 但是 2.36-9+deb12u7 正要被安装。是由于系统中有部分依赖不符合,按照报错,我系统的上的libc6,libc6-dbg所需依赖比valgrind要的要高不少。libc6 : 破坏: valgrind (< 1:3.19.0-1~) 但是 1:3.16.1-1 正要被安装。当然一种方法是降低这两个依赖的版本,但是可能存在什么系统问题,所以转而还是寻找其他解决方法。
2025-01-29 18:23:06
283
原创 使用.gitgnore 忽略可执行文件,以及gitignore文件不生效问题
但是还是不生效,也就是我重新Make生成可执行文件之后,再文件修改列表还是有更新的可执行文件在待commit列表。之前有过一次提交,那一次提交中包含了该可执行文件,所以导致。,忽略了linux无后缀的可执行文件。查了一下,原来是因为我在修改。对该可执行文件没生效。
2024-12-24 14:04:29
241
原创 【小白包会的】使用supervisor 管理docker内多进程
包含两个py文件,模拟两个不同的服务,一个服务process1 执行一个循环的进程(这里只是示例,可以是别的什么服务)但是有的情况中,希望一个docker中运行多个进程,运行多个服务,也就是一个docker容器执行多个服务。调研了一下,发现可以通过**supervisor ** 实现,综合对比下来,上手难度和配置相对来说还算简单。process2 来运行一个fasapi服务,服务监听8096端口。一般情况下,一个docker是仅仅运行一个服务的。总的来说需要在单体服务的基础上做以下操作。
2024-12-16 18:27:48
598
原创 softmax+crossentropy 前向损失 与 反向梯度
对于梯度计算并无影响,这里只是方便理解。这部分导数分成两部分计算,i==k 和 i!但是一般情况下,目标输出采用one-hot编码,只有一个元素值为1,其他元素值为0,例如。因为指数爆炸的存在,很容易发生溢出的,所以一般在计算时候,在分子分母同乘。值未变,但是就不那么容易造成溢出了。我们会看softmax的公式。计算其softmax。假设我们的目标输出为。
2024-12-09 19:17:22
928
原创 在docker容器内部访问主机服务
(仅对与linux系统)希望在容器内部能够访问主机上的服务,比如在主机上部署了某服务A监听了端口11434:localhost:11434。此时通过docker部署了另外一个服务B,服务B希望能够访问主机上的服务A,由于docker有内部网络的原因,在容器内部无法直接访问主机IP。docker20增加了解决办法。
2024-12-06 11:47:53
924
原创 attention 注意力机制 学习笔记-GPT2
多头注意力实际上就是将单个Q,K,V向量,分裂为多个头,然后和self-attention一样流程计算每个头的注意力,最后得到一个输出向量,然后将多个头的输出向量拼接到一起,得到最后的输出结果。对于masked-attention呢,实际上就是计算注意力得分时候,对第t个单词,仅仅计算0到t单词的注意力得分,t~T 部分的注意力得分不计算,计算softmaxs时t之后的部分以初值0代替。而后和self-attention一样的,每一个注意力头的Value向量和该头的注意力得分相乘,得到该注意力头的结果。
2024-11-14 18:54:38
707
原创 CublasLt 极简入门
为了克服这种开销,建议使用cublasLtMatmulAlgoGetHeuristic()查询启发式算法一次,然后使用cublasLtMatmul()在后续计算中重用结果。网上搜了挺多,Cublas的文档有不少,但是对于cuda10以上轻量化的cublasLt 的文档或博客却很少。在执行矩阵乘法前,需要定义输入矩阵和输出矩阵的描述符。对具体的矩阵乘法算法以及输入矩阵A,B,C以及输出矩阵D通过函数。用于描述每个矩阵的布局,包括行数、列数、数据类型等。为乜咯矩阵初始化和设置矩阵尺寸,类型,信息等。
2024-11-12 18:31:50
533
1
原创 CMAKE 编译CUDA项目失败 “/usr/bin/nvcc“ is not able to compile a simple test program.
应该尽可能添加在 project 命令之前,因为cmake在执行project命令时会自动检测并设置编译器,所以应该在project命令之前设置正确的nvcc编译期路径。可能是因为我的cuda为手动编译的原因,导致在。目录下没有找到正确的nvcc 路径导致失败。使用CMAKE编译cuda项目时失败。环境: ubuntu 20.04;在执行 cmake 命令时添加。这个nvcc路径可以通过。cuda版本:11.8。 在cmake中添加。
2024-11-11 17:36:53
663
2
原创 docker pull/build 失败 设置国内镜像源
参考 : docker 错误 Error response from daemon,request canceled while waiting for connection在写完一个服务构建时候写完docker 执行build 报错:有点搞, 第一行就报错了看错误应该是网络问题,拉取镜像时候就报错了为了验证猜想,在命令行随便执行一个pull命令 拉取一个MySQL镜像试一试果不其然出错了:Error response from daemon: Get “https://registry-1.docker.
2024-11-08 15:41:58
1686
原创 Host key for github.com has changed and you have requested strict checking和github.com‘s passwor解决方案
我的第一次执行上述步骤,能连接上,可是过了一天之后又报同样错误,再次执行上述操作,又一致需要输入github.com 密码。将github.com ssh-rsa 开头的公钥 复制到 ~/.ssh/known_hosts 文件中。打开 ~/.ssh/known_hosts, 删除掉 github.com 开头的行。更新 ~/.ssh/known_hosts 中的公钥。可能是github公钥更改,导致连接不上。尝试输入 github的账户密码,也不行。按照下面两种方式尝试,最终解决。
2024-11-06 11:10:12
856
原创 Warp ShuffleCUDA 线程束洗牌函数
warp级别的操作原语,通过shuffle指令,允许thread直接读取其他thread的寄存器,只要两个thread在同一个warp中。一般架构下GPU中的线程数大小是32, 所以参数取值范围只能取2,4,8,16,32中之一。掩码指定将要参与计算的线程,当掩码中的一个二进制位为1时,表示对应的线程参与计算,反之,如果为0则忽略对应的线程。另外,函数中的参数mask是一个32位的掩码,刚好对应一个线程束内的32个线程。将高线程号的数据平移到低线程号中,而恰巧,这正是在归约问题中需要的操作。
2024-11-05 11:33:35
1222
原创 cuda 中的__restrict__ 作用详解
和 const 来修饰传递给内核的全局指针,那么在为 cc3.5 及更高版本的设备生成代码时,这也向编译器发出了强烈的提示,使这些全局内存负载流经只读缓存。从编译器的角度看,一个重要的事是指针别名,指针别名会阻碍编译器做各种各样的优化。同样,编译器不能将 c[4] 的计算重新排序到 c[0] 和 c[1] 计算的附近,因为之前对 c[3] 的写入可能会更改 c[4] 计算的输入。通过这样做,减少了内存获取和计算的次数,与之平衡的是“内存”加载和公共子式的带来的对寄存器的压力增加。_ 关键字支持受限指针。
2024-11-04 11:37:19
992
原创 Adam 优化算法《学习笔记》
Adam中包含两个重要部分:(RMSprop算法) 与在标准梯度下降算法中,每个参数在每次迭代时都使用相同的学习率。如果学习率过大则可能无法收敛;如果过小则收敛非常慢;而Adam算法通过计算梯度的一阶矩估计和二阶距估计,从而为不同的参数设计独立的自适应学习率。
2024-10-29 17:09:54
1171
原创 multi-Head Attention
大语言模型中一个"计算块"是由多个 自注意(self-attention)和反向传播组成, 然而一般LLM使用的是 masked self-attention 以及 multi-headed self-attention。
2024-10-22 18:55:11
723
原创 llm.c项目运行(小白版)
可能没有cudnn,会报异常:Makefile:122: *** ✗ cuDNN not found. See the README for install instructions and the Makefile for hard-coded paths. Stop.不过我的显卡显存不够,于是选择编译train_gpt2.cu, 该文件使用了混合精度训练。需要使用openAI发布的GPT2权重初始化,然后微调,以便在C中加载。这里可能会失败,没关系,多试几次可能就成功了。
2024-10-12 18:28:57
543
原创 cuda矩阵乘法优化之路
相对于1中的共享内存优化中,相当于每加载一个BLOCK_SIZE* width 的$M_i $ 时候,从N中加载两个 width * BLOCK_SIZE , 重复利用了Mi中读取的值, 其实这也是PMPP中的一个课后习题。在上面共享内存中,优化了数据内存读取,然而仍然是一个线程计算一个值,一次读取和计算的比例很低,在PMPP中提到一个启发式的思路,即一个线程计算两个P中元素。矩阵乘法,首先最朴素的方法,当然是类似CPU的直接计算,不过相对于CPU而言,GPU可以直接进行并行计算,对于矩阵乘。
2024-10-12 11:14:34
1031
原创 任意长度并行前缀和 扫描算法 《PMPP》笔记
在前面代码中,一个块最后的执行结果保存到了Y数组中,Y 数组保存了每个段扫描的结果,可以称之为扫描块, 一个扫描块只保存了当前块中前面所有元素的累加值,需要把这些扫描块合并到一个最终的结果中。上述栗子, 在16个输入的数组中,分为4个扫描块,kernel将4个扫描块看做独立的输入数据集处理,扫描kernel结束之后,每个Y元素保存了这个扫描块中扫描的结果。在第二步中,从每个扫描块中收集最后一个元素,放进一个数组S中,然后对此数组进行扫描,然后将扫描S数组后的值累加到对应的扫描块上。
2024-09-24 15:26:37
545
原创 使用numba报错: E ImportError: numpy.core.multiarray failed to import
使用numba报错: E ImportError: numpy.core.multiarray failed to import
2024-08-27 10:45:17
411
原创 VScode 批量操作
按照1的方法多选光标之后,ctrl + alt+ i 即可。按住 alt/option 键, 选择需要批量操作的位置。如果是多行,则按住 alt+shift 键。VScode 批量操作。
2024-07-24 18:58:19
1437
原创 c++内存对齐
32位系统上int是4字节, char是1字节, 上述一个结构体占用内存应该是 4+ 1=5byte. 但是结果却是8。以32位系统为例,存取粒度为4字节,该处理器只能从地址为4的倍数的内存开始读取数据。内存对齐能够提高CPU读取数据的速度,减少CPU访问数据的出错性, 避免指针访问出错。一般的处理器以2,4,6,16字节甚至32字节为单位来取内存,即。上述结构体中最长数据类型为int 4字节。和结构体最长数据类型中较小的那个。对齐模数 gcc中默认对齐模数。有效对齐值(对齐单位): 给定值。
2024-07-24 10:51:19
329
原创 gitlab更新了ssh-key之后再登录还是要求输入密码, 报 Permission denied, please try again.
gitlab连接报错: debug1: Authentications that can continue: publickey,password Permission denied, please try again.
2024-07-23 11:12:06
725
原创 运行时多态和编译时多态
在运行时才能确定调用哪个函数,动态绑定。实际上是子类重新定义了父类的虚函数, 父类的指针就根据赋给它的不同子类的指针, 动态的调用属于子类的虚函数, 这样的函数调用在编译期无法确定。: 派生类重新定义父类中的函数, 函数名,参数列表,返回类型都必须和父类中被覆盖的函数严格一致, 只有函数体不同。静多态在编译时就确定调用函数的类型,函数重载就是一个典型的静多态。: 派生类的函数屏蔽了与其同名的基类函数。多态可以分为静多态和动多态。
2024-07-19 18:20:11
470
原创 虚函数表存放在哪里
总结: 虚函数表类似于类中的静态成员变量,和静态成员变量一样是全局共享的,属于一个类所有对象的,并不是某一个类特属的, 在linux/unix中 存放在可执行文件的只读数据段中。, 而虚函数指针是在对象实例化时候创建(调用构造函数时), 所以 **虚函数指针在运行时创建 ** , 将该类虚函数表的地址赋值给对象的虚函数指针。有虚函数的类, 改类的大小会增加一个指针的大小(32位系统是4字节, 64位系统是8字节)。一般分为五个区域: 栈区, 堆区,函数区(存放函数体等二进制代码), 全局静态区, 常量区。
2024-07-19 16:53:26
718
原创 求字符串中最早出现的次数最多的字符
首先考虑到使用map记录每个字符出现的次数, 遍历一遍字符串之后得到出现的最大次数。但是此时可能有很多个字符具有相同的最大次数, 所以再遍历一次字符串,得到最早出现的最大次数字符。在使用map的时候,会增加很多建表插入,计算hash的时间, 因为char和int是可以转换的, 所以直接使用数组其实也可以。实际上正向遍历字符串的时候是可以获取到最大次数和字符的,但是是最后出现的字符。如果反向遍历字符串,那么就可以得到最早出现的字符了。如 “aabbb” 返回 ‘b’“baab” 返回 ‘b’
2024-07-18 11:54:45
396
原创 python 引入并修改模块全局变量问题
为了方便全局变量的管理, 一般将全局变量放到一个单独的。py文件中, 对于其中一些逻辑控制类变量, 比如 一个全局变量文件 const.py, 一个文件a.py 修改了const.py 中一些变量值, 希望在另一个文件 b.py中读取到更改,并且做出相应的逻辑处理。在a.py中对值类型的修改,在b.py中是看不到的, 引用类型和实例化的对象(如单例)则相反。值类型包括:数字,布尔,字符串等。而引用类型包括:列表,字典等。
2024-07-12 12:03:41
404
原创 PYQT+orientationMarkerWidget 不显示的问题
实际上在VTK论坛上也有讨论, 比如:https://discourse.vtk.org/t/vtkorientationmarkerwidget-wont-show-in-pyqt5/6320。在进行上述修改之后,需要将vtk.vtkOrientationMarkerWidget() 的实例作为 主交互窗口MainWindow 的一个属性,才能进行显示。但是我实际根据轮然中修改也是没有作用(吐槽, 论坛解答给的结果也一样的不显示)想添加一个方向控件,然后再添加上视角的一键 A,S,I,P,L,R等等。
2024-07-04 11:16:54
381
原创 VTK 实现对vtkpolyata 膨胀放缩
通过VTK实现对polydata的膨胀放大. vtkwarpvector 和对比 vtkImplicitPolyDataDistance
2024-06-13 14:42:24
652
3
原创 python socketserver shutdown问题
也就是说,如果需要关闭socketserver服务,**需要在与serve_forever运行线程不同的另一个线程调用shutdown()**才行,否则会死锁。socketserver服务独立于客户端进程,但是需要在客户端关闭时后也通知关闭socket server进程。使用python的socketserver为客户端实现一个简单的socket server服务进行通信。之前项目是使用 close发现该socketserver服务依然存活。查阅了socketserver源码和网上资料 包括。
2024-05-28 16:58:44
199
原创 ubuntu重启后分辨率异常,识别不到显卡驱动, 更新显卡驱动吃网卡
新装系统20.04之后,偶发重启之后分辨率异常(变为1024**)并且无法选择别的分辨率, 使用nvidia-smi 报错, 看起来是因为显卡驱动异常,考虑更新显卡驱动,查询很多才发现实际原因是,ubuntu自己更新了linux微内核, 导致显卡驱动没了,但是手动安装了显卡驱动之后,可能会吃网卡导致没有网络。这两个命令效果应该是一样的,但是情况是这样安装之后再重启会发现虽然分辨率什么的正常了,nvidia-smi命令也能正常输出显卡信息,但是。查看缺少的内核系统 (使用。命令查看推荐的显卡驱动。
2024-05-16 14:03:45
738
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人