浅谈Llama3.1,从结构、训练过程、影响到数据合成

Llama3.1系列模型的开源,真让大模型格局大震,指标上堪比最好的闭源模型比如GPT 4o和Claude3.5,让开源追赶闭源成为现实。

这里给大家分享一篇俊林兄(@知乎张俊林)的一篇解读,主要对LLaMA3.1的模型结构、训练过程进行分享,并对其带来的影响、小模型要如何做、合成数据等方面谈点看法。

LLaMA3模型结构

图片LLaMa3模型结构

LLaMa3的模型结构如上图所示,这基本已经形成目前Dense LLM模型的标准结构了,绝大多数LLM模型结构都与此非常接近。而很多采取MOE结构的LLM模型,其变化无非是把上图的FFN模块里的单个SwiGLU模块拓展成K个并联的SwiGLU模块,形成多个专家,再加上一个路由子网络来选择目前Token走这么多专家里的哪几个,如此而已,基本结构也差不太多(所以不要误会,MOE是Transformer的一种变体,不是独立的模型结构。很多目前的新型结构,其实是“线性Transformer”结构的变体,目前很少有结构能逃脱Transformer架构的影响,都处在它的阴影下。当然我对新结构持支持态度,Transformer被替换只是时间问题,只不过这不是当前制约大模型能力的瓶颈,改变的迫切性没那么大而已。)

之所以LLaMA结构基本快形成行业标准,我觉得有两个原因。原因一是侧面说明了Transformer结构趋于稳定,肯定很多人试过其它变体结构但是要么在效果,要么在可扩展性(Scalability),总之,某一点要比这个结构效果要差,这虽然是无依据的推导,但想来是大概率事件。

原因之二是因为目前LLM已形成生态,各种衍生的工具比如快速推理框架等都兼容这个结构,如果你新结构变动太大,很多流行工具不支持,就很难扩散影响力形成新的行业标准。新结构不仅仅要达成替换Transformer那么简单,你面对的是整个生态,再没有确切证据表明各方面都明显好于上述结构前提下,是很难替换掉Transformer的。从这里就看出Meta坚决走开源路线的高明之处了,早开源早形成影响力早成为行业标准,那么以后LLM的技术路线做技术选型话语权就非常大 ,其他人就比较被动。谷歌因为一心二用开源不坚决,有点错失时机。

LLaMA3.1的预训练过程

Llama3.1 预训练包括三个主要阶段:(1) 初始预训练,(2) 长上下文预训练,以及 (3) 退火(Annealing)。总体而言,和目前一些其它开源模型的训练过程差别不大,不过技术报告公开了很多技术细节。

  • 初始预训练:就是常规的预训练阶段,训练初期使用较小Batch Size以稳定训练,随后逐步增大以提高效率,最终达到 16M token 的Batch大小。为了提升模型的多语言和数学推理能力,增加了非英语和数学数据的比例。
  • 长上下文预训练:在预训练的后面阶段,采用长文本数据对长序列进行训练,支持最多128K token的上下文窗口。采取逐步增加上下文窗口长度策略,在Llama3.1 405B的预训练中,从最初的8K上下文窗口开始,逐步增加上下文长度,最终达到128K上下文窗口。这个长上下文预训练阶段使用了大约800B训练token数据。
  • 退火(annealing):在预训练的最后4000万个token期间,线性地将学习率退火至0,同时保持上下文长度为128K个token。在这一退火阶段,调整了数据混合配比,以增加高质量数据比如数学、代码、逻辑内容的影响。最后,将若干退火期间模型Check Point的平均值,作为最终的预训练模型。在训练后期对高质量数据进行上采样目前其实也是比较标准的做法。

预训练阶段不同类型数据配比

不同类型的数据配比如何配置大模型才能有最好的效果?这可能是目前大模型预训练仅剩的唯一秘密了,LLama3.1报告对此做了披露,他们先通过小规模实验确定最优配比,然后将之应用到大模型的训练中。

结论是:50%的通用知识Token;25%的数学与逻辑Token;17%的代码Token;8%的多语言Token。

LLaMA3.1的Post-Training

图片LLaMA3.1 Post-Training流程

目前LLM的Post-Training主要有两种模式,一种是仿照ChatGPT的SFT+RM+PPO的模式,采用强化学习,需要调的超参很多,比较复杂不太好调通;另外一种是SFT+DPO的模式,去掉了PPO强化学习,相对简化了整个流程,比较容易跑起来。LLaMA3.1在这个阶段主体结构是SFT+DPO的模式,不过也有自己特殊的一些设计,上图展示了LLaMA3.1整个Post-Training的流程。

首先用人工标注数据训练RM模型,用来评价一个<Prompt,answer>数据的质量,然后用RM参与拒绝采样(Rejection Sampling),就是说对于一个人工Prompt,用模型生成若干个回答,RM给予质量打分,选择得分最高的保留作为SFT数据,其它抛掉。这样得到的SFT数据再加上专门增强代码、数学、逻辑能力的SFT数据一起,用来调整模型得到SFT模型。之后用人工标注数据来使用DPO模型调整LLM参数,DPO本质上是个二分类,就是从人工标注的<Prompt,Good Answer,Bad Answer>三元数据里学习,调整模型参数鼓励模型输出Good Answer,不输出Bad Answer。这算完成了一个迭代轮次的Post-Training。

上述过程会反复迭代几次,每次的流程相同,不同的地方在于拒绝采样阶段用来对给定Prompt产生回答的LLM模型,会从上一轮流程最后产生的若干不同DPO模型(不同超参等)里选择最好的那个在下一轮拒绝采样阶段给Prompt生成答案。很明显,随着迭代的增加DPO模型越来越好,所以拒绝采样里能选出的最佳答案质量越来越高,SFT模型就越好,如此形成正反馈循环。

可以看出,尽管RLHF 和DPO两种模式都包含RM,但是用的地方不一样,RLHF是把RM打分用在PPO强化学习阶段,而LLaMA3.1则用RM来筛选高质量SFT数据。而且因为拒绝采样的回答是由LLM产生的,可知这里大量采用了合成数据来训练SFT模型。

LLama3.1 405B为何不用MOE结构?

MOE结构会让模型效果更好吗?答案是否定的。这个在很久以前ChatGPT火之前就有研究结论,从对模型效果的影响来说,MOE结构相对Dense模型本身并不会带来额外优势,甚至是有劣势的。MOE的主要优势是减少训练和推理成本,付出的代价是训练不够稳定以及推理时额外付出大内存来存储膨胀的参数量。但当用户量大请求多的时候,推理成本占比会更高,此时使用MOE对于推理会更友好,这是为何当模型大到一定程度模型结构就会从Dense转向MOE的主要原因,是出于成本、效率而非效果角度考虑。我之前看到有些介绍说MOE结构效果更好,这种观点是没有事实依据的。

Llama3.1 405B 之所以没有采用MOE,技术报告指出主要是考虑到Dense模型训练更稳定,所以选择了Dense结构。相比GPT 4的1.8T的MOE模型结构,405B的Dense模型效果与之相当甚至要更好一些(当然,不排除GTP 4目前已经是一个蒸馏小模型的可能)。

LLaMA3.1 模型带来的影响

图片开源模型效果快速追赶闭源模型

前几个月关于开源和闭源大模型谁优谁劣争吵的很厉害,不同立场者各执一词,上图展示了开源和闭源模型随着时间能力差异曲线,可以看出两者差距随着时间是逐步减小的,而LLaMA3.1 405B让两线出现了交点,我想这图基本可以终结“开源闭源之争”了。

LLaMA3.1 405B的开源,对于其它无论闭源还是开源模型,都有重大影响。对于闭源模型,如果其能力还赶不上LLaMA3.1,就需要向公众解释对用户收费的依据问题(除了覆盖推理成本外的费用)。对于开源模型而言,如果能力不如LLaMA3.1,就需要考虑如何作出差异化和不同特色的问题。目前看Meta继续开源比如LLaMA4等后续更强模型的决心是比较大的(毕竟从大模型开源带来的股价上涨就能覆盖成本了,这买卖合算的),随着LLaMA4的进一步开源,形势将逼迫很多原先定位为基础模型AGI的创业公司转向特色产品赛道。我觉得这其实是个负面作用,尤其是对开源界,即使是开源赛道也是百家争鸣比一两家独大要好,但是逐渐收敛看样子不可避免。

我觉得之后一方面要重视LLAMA和Gemma的中文化工作,让中文支持效果更好。如果这方面作出特点,完全可以实现小公司、小投入,但是拥有当前最强中文模型的能力,从能力角度看,并不弱于获得大量资金支持的专业大模型公司,而从投入角度则小的多,性价比很高。

另外一方面,在做小模型的时候,要注重用LLaMA3.1 405B这种最强开源模型来蒸馏小模型的思路,这样做对小模型效果提升会非常明显,很明显这也是小投入高产出合算的买卖。

小模型崛起三要素

最近半年小模型在快速崛起,各种开源小模型此起彼伏,且效果也越来越好。小模型无论是训练成本、推理成本还是对于用户数据隐私保护,相比大模型都有独到的好处。唯一的问题是效果,只要Scaling law成立,就可以推断出小模型效果不会比超大规模模型效果好,否则就直接反证了Scaling law是不成立的。

所以小模型的关键点在于:在模型规模大小受限的情况下,如何通过其它技术手段来不断提升模型效果,最好的结局是小模型尺寸比最大模型小很多倍,但是效果逐步逼近最大模型的效果,两者差距越来越小。

这样美好的结局会出现么?目前看有极大可能会达成这一目标。从最近一年各种技术进展来说,我归纳下,不断提升小模型效果的三个关键因素:

第一个武器是预训练阶段增加训练数据数量和质量。要打破Optimal Chinchilla Law,在保证质量前提下加大数据数量,这个肯定是有效的。去年早些时候有些模型就比较实在,比如pythia和Llama 1,严格遵循这个法则,导致相同规模的模型效果远比不上那些大量增加数据的模型。后来大家都开始猛加数据,小模型的效果就越来越好。

第二个武器是模型蒸馏。从开源角度来看,这个武器相对较新,而且我判断用蒸馏来提升小模型效果的能力非常强大。所谓“蒸馏”,就是说在预训练阶段小模型作为Student,大模型作为Teacher,Teacher告诉Student更多信息来提升小模型效果。

原先小模型预训练目标是根据上文context信息正确预测Next Token,而蒸馏则改成Teacher把自己做相同上下文做Next Token预测的时候,把Token词典里每个Token的生成概率都输出来,形成Next Token的概率分布,这就是Teacher交给Student的额外附加信息,小模型从原先的预测Next Token改为预测Next Token的概率分布,要求和Teacher输出的分布尽量一致,这样就学到了Teacher的内部信息。

Gemma 2采用模型蒸馏对于小版本模型提升非常明显。Llama3.1技术报告貌似没有看到采用这个技术,但是在宣传页里到处暗示你应该拿405B模型作为Teacher去蒸馏自己的小模型,无疑这会是很有效提升小模型能力的新武器。感觉其它模型在这里没有足够的重视,而之后这应该成为普及方案。而研究怎样的蒸馏方法是最好的会是一个重要研究领域。

第三个武器是Annealing Data。这个说法是Llama3.1技术报告提的,但是其实去年很多模型应该已经这么做了,只是叫法不一样。核心思想就是在预训练的最后阶段,对高质量数据比如数学、逻辑、代码数据进行上采样,增加其影响。LLama3.1技术报告说这招对405B模型不怎么起作用,但是对8B小模型在逻辑代码能力方面有明显提升。

根据现有资料分析,我推断模型蒸馏和Annealing Data很可能存在一种“反规模效应”,就是说小模型的参数规模越小,上这两个技术对其正面影响越大。(推断的,没明确证据,谨慎参考)所以在研发小模型时尤其注意要引入这两项改进,三个武器并用,我觉得作出接近最强大模型能力的小模型目前看是可行的。(其实还有一个重要因素,就是Post-Training阶段合成数据的影响,这个对几乎所有尺寸模型都成立,所以放在后面“驱动大模型效果提升三要素”分析了,对小模型也成立)

合成数据进入实用化阶段

  • 在Post-Training阶段,合成数据目前已经产品化。尤其是其中的SFT阶段,目前看在朝着完全由合成数据主导的方向发展。比如LLama3.1 的SFT数据里有相当比例是由模型生成的合成数据,而Gemma2 在SFT阶段的数据很大比例是由规模更大的模型合成的,且证明了合成数据质量不比人工标注质量差。
  • 在预训练阶段,类似Dalle-3和Sora这种由语言大模型根据图片或视频改写人写好的文字描述,也已实用化。
  • 目前合成数据的一个重点方向是在Post-Training阶段对数学、逻辑、代码等数据的合成,数据质量将直接极大影响模型最终效果。
  • 严格来说,目前的所谓合成数据只是“半合成数据”,比如Sora的<视频,人写文字描述<视频,模型改写文字描述>,以及Post-Training阶段的<Prompt,人写答案><Prompt,模型生成答案>,都是部分人工数据、部分模型生成数据,所以称其为“半合成数据”感觉更为恰当。
  • 如果深入思考一下,你会发现合成数据其实是模型蒸馏的一种变体,算是一种特殊的模型蒸馏。(LLM预训练预测Next Token,其实是人类作为Teacher,LLM作为student。所以LLM本身就是对人类知识的蒸馏。合成数据是更大的模型输出数据作为Teacher,小点的模型作为Student从中学习知识,所以其实本质上是一种模型蒸馏。)

驱动大模型效果提升的三要素

其实从ChatGPT火了以后看各种大模型的技术报告,包括LLama系列模型在内,可以看出大模型之所以能力仍在快速提升,主要驱动力有三个:首先就是不断扩大模型和数据规模(Scaling Law)。除此外,在数据方面有两个发展趋势:一个是越来越强调数据质量的作用,各种数据筛选方法和工具越来越多,保证质量是第一位的(这个早在Google T5时代就能推出这个结论,目前只是进一步验证并延续这个思路而已)。第二个是不断增加数学、逻辑、代码这种能够提升大模型理性能力的数据配比比例,包括在预训练阶段(增加预训练数据此类数据比例,且在预训练后面阶段来上采样此类数据,就是说同样数据多执行几遍,以增加其对模型参数影响的权重)和Post-Training阶段(增加此类数据占比,Llama3.1的经过instruct的模型比仅做预训练模型相比,各种尺寸的效果提升都很大)皆是如此。

目前看,在通用数据快被用完情况下,第三个因素会成为之后大模型进步的主导力量,包括使用数学、逻辑、代码合成数据在Post-Training阶段的应用,目前技术也越来越成熟,其质量和数量会是决定未来大模型效果差异的最关键因素。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1487772.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

1.1 操作系统的基本概念

文章目录 操作系统的概念(定义)操作系统的目标和功能操作系统作为计算机系统资源的管理者操作系统向上层提供方便易用的服务命令接口程序接口 操作系统作为最接近硬件的层次 操作系统的特征&#xff08;4个&#xff09;并发共享互斥共享方式同时共享方式 虚拟虚拟处理器&#x…

【性能优化】在大批量数据下使用 HTML+CSS实现走马灯,防止页面卡顿(二)

上一篇只是简单演示了’下一张’的操作和整体的设计思路,这两天把剩余功能补全了,代码经过精简,可封装当成轮播组件使用,详细如下. 代码 <template><div class"container"><button click"checkNext(last)">上一张</button><b…

Vue Router基础

Router 的作用是在单页应用&#xff08;SPA&#xff09;中将浏览器的URL和用户看到的内容绑定起来。当用户在浏览不同页面时&#xff0c;URL会随之更新&#xff0c;但页面不需要从服务器重新加载。 1 Router 基础 RouterView RouterView 用于渲染当前URL路径对应的路由组件。…

Linux--Socket编程预备

目录 1. 理解源 IP 地址和目的 IP 地址 2.端口号 2.1端口号(port)是传输层协议的内容 2.2端口号范围划分 2.3理解 "端口号" 和 "进程 ID" 2.4理解 socket 3.传输层的典型代表 3.1认识 TCP 协议 3.2认识 UDP 协议 4. 网络字节序 5. socket 编程接…

边缘计算网关项目(含上报进程、32Modbus采集进程、设备搜索响应进程源码)

目录 边缘层 架构说明 包含知识点 数据上报进程 功能描述 功能开发 上报线程 数据存储线程 指令处理线程 项目源码 上报模块.c代码&#xff1a; 上报模块Makefile代码&#xff1a; STM32采集模块.c代码 设备搜索响应模块Linux部分.c代码 设备搜索响应模块Qt端代码.h …

流量录制与回放:jvm-sandbox-repeater工具详解

在软件开发和测试过程中&#xff0c;流量录制与回放是一个非常重要的环节&#xff0c;它可以帮助开发者验证系统在特定条件下的行为是否符合预期。本文将详细介绍一款强大的流量录制回放工具——jvm-sandbox-repeater&#xff0c;以及如何利用它来提高软件测试的效率和质量。 …

《Cross-Modal Dynamic Transfer Learning for Multimodal Emotion Recognition》

Multi-modal系列论文研读目录 文章目录 Multi-modal系列论文研读目录1.ABSTRACT2.INDEX TERMS3.INTRODUCTION4.RELATED WORKSA. MULTIMODAL EMOTION RECOGNITION 多模态情感识别1) CONVENTIONAL FUSION METHODS 常规融合方法2) TRANSFORMER-BASED FUSION METHODS 基于变压器的融…

C#测试控制台程序调用Quartz.NET的基本用法

Quartz.Net是常用的任务调用框架之一&#xff0c;既能在客户端程序中使用&#xff0c;也支持在网页程序后台调用。本文结合参考文献4中的示例代码学习其在控制台程序中的基本用法。   VS2022新建控制台项目&#xff0c;在Nuget包管理器中搜索并安装Quartz包&#xff0c;如下所…

IDEA在编译的时候报Error: java: 找不到符号符号: 变量 log lombok失效问题

错误描述 idea因为lombok的报错: java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled.Your processor is: com.sun.proxy.$Proxy8Lombok supports: sun/apple javac 1.6, ECJ 原因&#xff1a;这是由于Lombok的版本过低的…

若依 ruoyi poi Excel合并行的导入

本文仅针对文字相关的合并做了处理 &#xff0c;图片合并及保存需要另做处理&#xff01;&#xff01; 目标&#xff1a;Excel合并行内容的导入 结果&#xff1a; 1. ExcelUtil.java 类&#xff0c;新增方法&#xff1a;判断是否是合并行 /*** 新增 合并行相关代码&#xff1a;…

matlab 绘制参数方程

matlab 绘制参数方程 绘制参数方程绘制结果 绘制参数方程 clc; clear; close all;axis_length 100;% 定义参数t的范围 t 0:0.01:100;% 计算x和y的值 x t.^2 1; y 4*t - t.^2;% 绘制函数图像 plot(x, y); xlabel(x); ylabel(y); title(Plot of the curve xt^21, y4t-t^2…

Uprecise软件的基本功能

UPrecise 是和芯星通独立开发的评估软件&#xff0c; 旨在帮助用户便捷地对公司产品进行可视化操作。 用户可通过该软件以串口或端口的方式与接收机进行交互并直观地查看其状态信息&#xff0c;连接后 UPrecise 将自动识别接收机的波特率和类型&#xff0c;动态显示该类型接收机…

Python3网络爬虫开发实战(2)爬虫基础库

文章目录 一、urllib1. urlparse 实现 URL 的识别和分段2. urlunparse 用于构造 URL3. urljoin 用于两个链接的拼接4. urlencode 将 params 字典序列化为 params 字符串5. parse_qs 和 parse_qsl 用于将 params 字符串反序列化为 params 字典或列表6. quote 和 unquote 对 URL的…

FastAPI(七十三)实战开发《在线课程学习系统》接口开发-- 回复留言

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 之前文章分享FastAPI&#xff08;七十二&#xff09;实战开发《在线课程学习系统》接口开发-- 留言列表开发&#xff0c;这次我们分享如何回复留言 按…

Layui修改表格分页为英文

Layui修改表格分页为英文 1.前言2.Laypage属性 1.前言 主要记录初次使用Layui没有好好看官方文档踩坑&#xff0c;修改了源码才发现可以自定义 使用的Layui版本2.9.14 2.Laypage属性 Laypage属性中带的有自定义文本的属性 示例代码 table.render({.......page: {skipText: …

Linux:传输层(1) -- UDP协议

1. 端口号 同一台主机的不同端口号(Port)标记了主机上不同的进程&#xff0c;如下图所示&#xff1a; 在 TCP/IP 协议中 , 用 " 源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信 ( 可…

QT开发(QT的基本概述和环境的安装)

QT的概述 一.QT的介绍背景1.1 什么是QT1.2QT的发展史1.3 Qt支持的平台1.4QT版本1.5QT的优点1.6QT的应用场景 二.搭建QT开发环境2.1 QT的开发工具的下载2.2 QT环境变量配置 三.QT的三种基类四.QT Hello World程序4.1使用按钮实现4.1.1 代码方式实现4.1.2 可视化操作实现 一.QT的…

GO内存分配详解

文章目录 GO内存分配详解一. 物理内存(Physical Memory)和虚拟内存(Virtual Memory)二. 内存分配器三. TCMalloc线程内存(thread memory)页堆(page heap)四. Go内存分配器mspanmcachemcentralmheap五. 对象分配流程六. Go虚拟内存ArenaGO内存分配详解 这篇文章中我将抽丝剥茧,…

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(一)|| RISC / 底层代码执行步骤 / 汇编指令

本篇文章基于韦东山老师讲课笔记和自己理解编写。 RISC ARM芯片属于精简指令集计算机(RISC&#xff1a;Reduced Instruction Set Computing)&#xff0c;它所用的指令比较简单&#xff0c;有如下特点&#xff1a; ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 …

2024.7.24 作业

1.二叉树的创建、遍历自己实现一遍 bitree.h #ifndef BITREE_H #define BITREE_H#include <myhead.h>typedef char datatype;typedef struct Node {datatype data;struct Node *left_child;struct Node *right_child; }Node,*BiTreePtr;//创建二叉树 BiTreePtr tree_cr…