- 博客(64)
- 问答 (3)
- 收藏
- 关注
原创 llama3的推理部署
先写个打油诗吧。这个年代还不行,还要会。Llama3大模型一见,大量工作就涌现。刚好最近我有点闲,组合巨人工作开个源。各位看官要觉得好,不如把star搞一搞。(动动你发财的手手,去github上点star哟)
2024-04-21 19:59:39
471
原创 llama2的python视角
综上所述,这段代码的作用是利用 nn.Embedding模块将一批离散的单词索引(代表文本数据中的单词序列)转换为连续的嵌入向量,这些向量可以被后续的神经网络层(如 LSTM、Transformer 或全连接层等)进一步处理,以便进行诸如文本分类、情感分析、机器翻译等自然语言处理任务。这里定义了一个形状为 (2, 4) 的张量 input,代表一个包含两个样本(样本数为 2,即第一维大小)的批次,每个样本由四个整数索引组成(第二维大小)。模块,并使用它来将一个包含索引的张量转换为相应的嵌入向量。
2024-04-06 11:35:41
608
原创 C++细节
面向对象的编程中,类(Class)是创建对象的蓝图或模板,它包含了数据(通常称为属性或变量)和行为(通常称为方法或函数)。将数据封装为私有(private)成员,并通过公共(public)成员函数来访问和修改这些数据,是实现封装性的重要方式,也是面向对象编程的三大基本特性之一(封装、继承、多态)。当创建类的新对象时,构造函数会被自动调用。它用于初始化对象的属性或状态。构造函数的名字必须与类名相同,且不能有返回类型(即使是void)。它可以有参数,用于在创建对象时提供初始值。
2024-03-25 19:38:43
949
原创 代码注意事项
public://构造函数,需要释放s_m = m;s_n = n;//虚函数//普通成员函数,待会打印protected:int s_m;int s_n;public://构造函数,继承自shape{}//重写虚函数,void类型与m*n返回类型不一致//原来area没参数,这儿的重写应该也没参数,要不然是重载函数了,int area()//return 回去面积int main()return 0;//构造函数,继承自shape{}1)
2024-03-24 10:58:26
806
原创 C++例子
cpu还没给m_cpu时,析构其它的new二、输出结果:父类构造儿子构造儿子析构父类析构debug信息#includeclass basepublic:public:cout<<“快得很”<<endl;输出两次,快得很快得很。
2024-03-23 22:40:21
363
原创 .和->的区别
使用 . 运算符当你有一个对象的直接引用时,你可以使用 . 运算符来访问其成员。}在这个例子中,obj 是一个 MyClass 类型的对象,我们直接使用 . 运算符来设置 myVar 的值。使用 -> 运算符当你有一个指向对象的指针时,你需要使用 -> 运算符来访问其成员。-> 运算符用于通过指针访问对象的成员。在C++中,. 和 -> 都是用于访问对象的成员(包括成员变量和成员函数)的运算符,但它们之间有一个关键的区别:. 用于直接访问对象的成员,而 -> 通常用于通过指针来访问对象的成员。
2024-03-23 17:58:12
306
原创 C++ 其它
1、内存四区-代码区2、内存四区-全局区生成exe后,运行前是代码区和全局区3、内存四区-栈区4、内存四区-堆区5、newnew一个整型10,返回的是该数据类型的指针,所以用intp所以是int [10],所以new的是int[10],int[长度]6、引用6.1 基本语法6.2 注意事项6.3 函数参数6.4 函数返回值第一次对,第二次错一直输出10,因为全局变量系统释放6.5 本质指针常量是指针指向不可改,也说明引用为什么不可更改。
2024-03-23 17:45:02
421
原创 C++(类和对象)2
没加virutal是一个字节,加了是四个字节,不是int,是指针,不管什么指针都是4个字节(首先需要明白一个指针变量存放的是地址,而不是一个常量,因此不管什么类型的变量,都是地址的所占的大小。虽然可以加作用域m_Age,但是还是继承了两份,但是羊驼到底是18,还是28,我们只需要一份就够了,资源浪费。自己两个,base1一个,base2一个,那么也就是16个字节(sizeof)而自定义的类型的东西,要相加,比如两个人相加,就要用运算符重载。全局函数做优元,就是把全局函数复制到类中,加个friend。
2024-03-23 16:51:16
975
原创 c++翁恺
在上面的代码中,point3d类的构造函数通过初始化列表: x(x), y(y), z(z)接收传入的参数,并将它们分别赋值给类的私有成员变量x, y, 和z。然后,在main函数中,当创建point3d对象a时,通过调用point3d(1, 2, 3),这三个参数1, 2, 3分别被用来初始化对象a的私有成员变量x, y, 和z。在C++中,当你创建point3d类的对象a,并给它传递参数1, 2, 3时,这些值是用来初始化point3d类的私有成员变量x, y, 和z的。1给了x,2给了y,3给了z。
2024-03-23 09:25:13
516
原创 公司面经2024
通信协议用过哪些,介绍一下?spi起始信号是怎么样的?(起始信号忘记了),iic几根线?我说了can,can传输距离为什么长,为什么抗干扰能力强?Linux建立tcp连接的过程是怎么样的?你确定socket只能用于不同主机之间的通信吗?你说你项目用到了双向链表,你介绍一下,双向链表的增删查找复杂度如何?单片机:ADC和DAC的区别?tcp和udp的区别?你确定tcp是点对点的通信吗?你熟悉的数据结构有哪些?说一下友元函数,是单向的吗?除了32和51单片机你还用过哪些单片机?多进程和多线程区别?
2024-03-19 21:06:26
306
原创 TensorRT的build.cu和runtime.cu
5)创建config模型配置:使用nvinfer1::createBuilderConfig()创建一个 config 对象,用于保存模型优化过程中的各种设置,如精度、最大 batch size 等;1)创建builder:使用 nvinfer1::createInferBuilder() 创建一个 builder 对象,用于之后的模型构建。2)创建网络 :使用 nvinfer1::createNetworkV2() 创建一个 network 对象,用于描述模型。1.2.1 举个栗子。
2024-03-13 18:37:12
492
原创 llama2c(4)之forward、sample、decode
*S1:**只保留概率大于等于 (1 - topp) / (n - 1) 的词汇,并将其对应的索引和概率存入 probindex 结构体数组。S2:和上面sample_mult函数语言,这儿只是对筛选后的probindex的里面概率进行累加,如果大于了topp,返回idx。**确定next,**如果还在input prompt,那么下一个token就是next;不是,才用sample得出next。调用sample_argmax选取返回概率最高的那个索引。2)_2 其他,top-p策略。
2024-03-09 21:51:00
554
原创 llama2c(3)之tokenizer和encode
tokenizer的model不同于Transformer的model,Transformer的model是一些权重参数,tokenizer的model是一些分词,将一个句子分成分词的中介(模型)。,具体就是tokenizer.py文件打印出来的如token数组所示是从tokenizer_path把Tokenizer 结构体中的内容填满2.1.2 build中的tokenizer一个数字和一个0搭配好函数“fread函数原型size_t fread ( void * buffer
2024-03-09 20:42:56
1405
原创 llama2c(2)之Transformer结构体的填充
此时将bin文件映射到内存的config,weight,fd,data,file_size 全部赋值给TransformerWeights结构体的参数了。现在的transformer如下。
2024-03-08 17:07:44
390
原创 llama.c代码2
总结来说,这段代码片段是调用encode函数来对给定的prompt文本进行token化处理,并将结果token序列存放在prompt_tokens数组中,同时通过num_prompt_tokens返回最终生成的token数量,且在这个过程中会在token序列开头添加起始符(BOS),但不会添加结束符(EOS)。对于每个完整的Unicode码点,查找其在排序后的词汇表中的索引。然后,函数尝试将tokens数组中的连续token进行合并,通过比较合并后的token在词汇表中的得分来决定是否进行合并。
2024-03-04 16:29:27
422
原创 llama.c中的代码
也即是t->sorted_vocab是排序好的词汇表,str_buffer是prompt中的一个个字母。用prompt中的字母在t->sorted_vocab词汇表找id,然后给tokens。对输入文本进行编码前初始化和处理token数组。排序后:地址,字母,id。
2024-03-04 14:03:03
370
原创 qwen.cpp和模型下载方式
139行assert中的!=应改为==,否则在debug模式下无法正常运行。将CMakeLists.txt的Release改成Debug。
2024-03-02 20:49:50
1111
原创 llama2.c的run.c代码debug
调用 malloc_run_state 函数为 Transformer 结构体中的运行状态 RunState 分配内存,以便后续在模型的前向传播过程中存储临时变量的值。malloc_run_state()函数的主要功能是根据模型的配置参数 p 动态分配内存,并将分配的内存地址赋值给 RunState 结构体中的各个成员变量。调用 read_checkpoint 函数从指定的模型文件中读取模型的配置参数和权重数据,并将其存储到 Transformer 结构体的相应成员变量中。
2024-03-01 20:06:04
390
原创 llama2.c
左手托着左胸,右手却从小腹下抽出来一只浴桶,不想在这娇美的身躯里被你的小手会碰,让你一下子金星直冒,身躯一阵摇晃,只见又呻吟一声,向后倒去。果然,就在千钧一发之际,房顶上也终于全部被铺盖过去了,玩笑,小型的平台,各处都是厚厚的灰,犹如冬日的习惯了,周围更是笼罩着漫天的灰雾,擂台山的边缘处,一片荒凉!model文件夹中命名一个文件chinese-baby-llama2.bin,chinese-baby-llama2压缩包和解压的都放在model文件夹的。5.3 开始debug。5.3.2 启动调试器。
2024-03-01 16:42:36
980
原创 CUDA笔记2
bank冲突的定义:同一个warp中的线程访问同一个bank中的不同地址,如图同一个warp中的thread0和thread8访问同一个bank0的不同地址。P当中有多少个元素,就申请多少个thread,每个线程读取一行,一列。如右图,0-47共48个数,申请48个线程,需找到每个元素在所有线程的坐标。同一个warp的thread访问的是不同bank,也就避免了。矩阵AB保存在全局存储中,每个thread读取一行,或一列,问那个更快?blockIdx.x和blockIdx.y分别是1和1,因为(1,1)
2024-01-21 15:49:59
361
原创 Cuda笔记1
培训00111+…+100,CPU是串行执行,GPU是分成几部分同时计算,如1+2+3,4+5+6…培训002一来一回每种定义有对应的调用位置,和执行位置,不对会报错。下图是用NVPROF时间分析下图是资源分析CUDA线程层次一个SM执行多个block所有线程执行同一个kernel,每个线程处理的数据不一样线程在cuda core里面,block以块为单位分配到sm中,grid在device中如图描述的是:9个block分给3个sm这张ppt的流程与下面这个
2024-01-21 13:42:25
434
1
原创 SQL笔记
3)Incorrect string value: ‘\xE7\xA8\x8B\xE5\xBA\x8F…on duplicate key update:若没有则正常插入,若存在则更新。– 编译mysql,点击‘+’号,data source→mysql。1)DATABASE表示数据库,数据库里面有很多数据表table。insert ignore into:若没有则插入,若存在则忽略。replace into:若没有则正常插入,若存在则先删除后插入。2) VARCHAR加双引号。这是选中那部分执行那部分。
2023-11-22 15:14:13
49
原创 C-错题集/杂记
2)%ld:输出长整型数据。这儿是有符号,即-128-127,i的初值相当于-128,~i值为127,-i表示转一圈回到原点,(128不存在,就像我们一般都说0点不说24点)(128就对应这儿的-2147483648?%写在 %d %f %s 前面的,都是占位符,% 写在后面的,就是%。p)[3]是指一个指向具有3个元素的一维数组的指针,A选项,p是指针,将2赋给它,地址为2不一定是a中元素;char d (1个字节,4+2+2+4是1的倍数,不补) 4+2+2(补)+4 +1。
2023-09-24 18:24:17
284
原创 C-链表->
所以要找到其中的某一个元素,必须先找到该元素的上一个元素,然后根据上一个元素提供的下一个元素的地址才能找到该元素。4)数组和链表都可以实现栈和队列,但是说实在话,栈和队列要是用数组实现的话就意义不大(数组的缺点),因此用链表。链表有一个“头指针”变量,它存放一个地址,该地址指向“头结点”,头结点中不存放数据,只存放。,每个结点都包括两部分,一部分是“用户需要的实际数据”,另一部分是“下一个结点的地址”。学完C语言之后我们至少可以通过两种结构来存储数据,一种是“数组”,另一种是“链表”。
2023-09-23 19:44:49
72
原创 C-字符、字符数组、字符串与指针
该地址可以是字符数组名或指针变量名,功能是从所给地址开始,依次输出各字符,遇到第一个**‘0’结束**,并把’0’转换为**‘n**’,即输出结束后。由于str是一个字符型的指针变量,它的值就是一个字符的地址,上例中就是字符串常量“china”的。2)调用格式: strcpy (字符串1,字符串2)1)调用格式: strcat (字符串1,字符串2)到字符串1的后面,并覆盖字符串1的字符串结束标志’0’。3)调用格式: strcmp(字符串1,字符串2)功能:比较字符串1和字符串2的。
2023-09-23 18:33:31
45
原创 C-函数、函数与指针
函数返回值不仅可以是整型、实型、字符型等数据,还可以是指针类型,即存储某种数据类型的内存地址。3)形参只有在函数调用是分配内存单元,调用结束,立即释放内存单元,因此只能在函数内部使用。(准确来说是{},只是为了方便称呼才说函数),离开该函数后再使用这种变量是非法的。//m必须是int型}不加static的存储类别,都是auto(动态)存储,如上面讲的{}、或称函数。6)不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”在C语言中,函数名表示该函数的存储首地址,即函数的执行入口地址。
2023-09-23 16:41:33
34
原创 C-指针*
2) 区分“变量的指针”和“指向变量的指针变量”。变量的“指针”就是变量的“地址”。“指针变量”是存放变量指针(地址)的变量,用来指向另一个变量。变量的“地址”是指其占用存储区中由小到大的第1个字节地址。如变量 i的地址是1000。间接存取”就是通过指针变量p间接得到变量a的地址,然后存取变量a的值的方式。也就是说,这个变量p的值是变量i的。1)对指针变量的使用必须是先使指针变量有固定的指向然后才可以使用,即先赋值后使用。把一个指针变量中的地址值赋给另一个同类型的指针变量,从而使两个指针指向同一地址。
2023-09-23 12:51:58
47
原创 模型的计算量和参数量
参考链接:https://blog.csdn.net/qq_40507857/article/details/118764782。
2023-06-16 09:59:36
360
原创 透过迷雾,看透本质,尊重常识。
1 数字图像基础1.1 图像的数据结构矩阵链:一维形式 (按关系结构就有串描述和树描述(四叉树))拓扑结构:如下1.2中分层:金字塔、四叉树(一直划分到具有相同特征为止,常用于特征提取和信息压缩)1.2 像素间的关系1.3 图像的几种具体算法1.4 图像的空间域平滑参考:https://blog.csdn.net/weixin_42574421/article/details/103149153https://zhuanlan.zhihu.com/p/431016209https
2022-05-27 16:40:00
98
空空如也
显卡安装驱动出现电风扇响的问题
2024-07-25
连自己的热点能正常上网,连校园网能连上但是不能上网
2023-09-01
请问一下train.csv有什么作用?有了它我们还需要给数据集打标吗
2022-04-13
跑pytorch时出现Parallel dataloader disabled
2021-04-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人