如何从头训练大语言模型: A simple technical report
今天来快速捋一下路线,写个简短的technical report,更多是原理介绍性的。按我个人理解,从最简单的部分开始,逐步过渡到最繁复的环节: 模型架构-> Pretrain -> Post-Train -> Infra -> 数据侧。再掺杂一些杂项,比如工具调用,agent, 推理解码, 长文本。
大模型时代,倒不是看谁代码写的好了,只有涉猎广泛, 有训练经验, 能进行Infra的debug, 肯认真做数据,才是王道。所以我觉得眼下最有价值的文章,还得看大厂技术报告。
1. Model Architecture
分两块讲: 语言模型本身和对应的tokenizer构建。这部分没什么好说的, 比较简单, 大家都差不多。
基本都是llama的魔改,不过今年大家更关注inference消耗和长文本了,所以出现了各种各样的变体。其中Deepseek的MLA架构一枝独秀。不过我不想讨论MoE。
与图像生成模型还在忙着争论模型架构不同,主流自回归LLM基本都是casual attention,只是各家对MHA做了优化而已,目的是为了尽可能减少kv cache, 从而在更少的显存消耗上做到更快的推理速度,降本增效。
1.1 MQA->GQA->MLA
MQA就是把多头注意力里的多个attention head去对应一个K与V,非常朴素的想法,是kv cache节约的上界。过于暴力,今年应该没人用了,于是qwen和llama都采用了GQA,这也是我看到用得最多的架构。
GQA介于MHA与MQA之间,把attention head分成多个group, 组内共享KV,十分自然的过渡.
而最后一个MLA ,只需要少量的 KV 缓存,相当于只有 2.25 组的 GQA,但却能获得比 MHA 更强的性能。不过没法直接使用ROPE倒是一个弊病, 需要做一些改动。虽然MLA会增加一些计算,但是推理速度无疑是很快的


1.2 Norm, Activation, Initialization
现在主流共识是用RMSNorm和SwiGLU, 比layernorm和relu两个老东西效果好多了,训练也更稳定。(不过GLM是用的GeLU和deepnorm)
为了保证训练稳定(实在太难了),一般采用预归一化,先归一化,再残差计算。据说post-norm效果更好,但不够稳定
参数初始化策略看模型大小而定。某些策略似乎能缓解loss spike现象,可见Spike No More: Stabilizing the Pre-training of Large Language Models (https://arxiv.org/pdf/2312.16903)
1.3 Long Context
今年大家都卷起来了,似乎没有1M窗口都不好意思发布模型,"大海捞针"实验上kimi还是一枝独秀。
位置编码都是ROPE, 不少工作都在探究ROPE怎么做外推/内插。此前基本就是PI和NTK。后续训练中也有逐步增大ROPE基频的.
qwen报告里使用了Dual Chunk Attention(DCA),这是training free的;后面用yarn调整注意力权重做外推.
1.4 Tokenizer与词表
不少工作都是直接挪用的别人的tokenizer, 如果自己从头训, 好处可能是在自己数据上有更高的压缩率(词表大小相同的情况下)。主流算法都是BPE或者BBPE比较多。实际训练上主要是工程优化并发的问题。
记得评估一下tokenizer的压缩率。压缩率表示文本向量化后的长度, 压缩率越高向量越短。多语言的时候也留意一下token的覆盖率, 比如llama的中文就不太行, 他们的训练数据本身中文就很少 (不知道为什么meta这么做,反而support一些其他的语言比较多)
一个非常重要的问题就是词表的修改。尤其是SFT阶段有些special token, 做agent的时候更重要了, 最好别等模型训起来了再去补词表, 否则norm的时候会乱掉,调整起来多少有些麻烦。当然,有些人也有词表剪枝的需求, 去掉冗余的token, 比如只要英文, 这样可以大大减少参数量。
词表的大小也很重要,词表越大,也会导致Loss越大。有些文章在探讨vocal size的scaling law,很有意思: Scaling Laws with Vocabulary: Larger Models Deserve Larger Vocabularies (https://arxiv.org/abs/2407.13623v1)。数据瓶颈就减小词表,够的话自然上大词表,vocab size经验一般是64的倍数。
2. SFT
倒反天罡,先讲SFT而不是pretrain。这只是因为工程上SFT更好做而已,先拿来讲了。
实际上, SFT也有自己的麻烦之处,不比pretrain简单。LLM其实每个部分都不容易,各有各的难处罢了。
本质上也是做next token prediction loss, 和预训练大量文本的直接学习不同,由于 SFT阶段文本都是prompt起手,故而会加一个mask,只在prompt后面的部分学习Loss.
2.1 SFT阶段的基本特点:
- 很多词表里的specialtoken开始发挥作用了,比如有些用来标识useer, assistant之类
- 指令微调数据不定长。而pretrain的时候一般都是padding再pack到定长的,比如4K,后面可能还会
长文本富集一下,逐步提升到16K,32K的训练 - SFT主要目的是为了让模型学会新的format,无法在此阶段引入新的知识,哪怕是大量finetune,世界知识还是在吃pretrain的老本。千万不要拿SFT学新知识!老老实实CPT吧
- 和pretrain完模型只会续写不同,SFT模型需要学会在eos停下下来,并且follow instruction
- Agent的Function call也是一种special token,工具调用也是一个挺热门的研究方向
- 训练的时候SFT的lr很小。相比pretrain一般1e-4到5e-4的量级,sff可能只有1e-5到5e-5
- 别忘了SFT的时候也塞一些pretrain数据保持一下。
- 其实做SFT的时候最多的时间还是花在数据上…数据评估配比,多阶段课程学习超超超级重要!
2.2 SFT数据
SFT相比pretrain数据量很小,不过指令跟随能力习得完全靠这部分,所以需要更细粒度的调优把控,尤其是数据。我印象里做SFT的时候几乎100%的时间全砸在数据上了。
Quality is all your need, 应该是今年所有人的共识。数据的diversity和quality的评估一定要做好,数据量倒不是很多。

2.2.3 Diversity
多样性的话一定要保证format形式多,指令涵盖的domain广, 高质量数学代码数据倒是越多越好。
打标签:一般借助强模型对文本进行label,看看Instag那篇文章[2308.07074] #InsTag: Instruction Tagging for Analyzing Supervised Fine-tuning of Large Language Models (https://arxiv.org/abs/2308.07074), 构造一棵多级标签树, 然后由此控制数据配比。
关于Repeat: 有些难样本是需要repeat多个epoch的,不过具体该多少epoch好像没有统一说法, 一般是暴力跑实验测出来的…或者拍脑袋想个数(bushi)。如果要repeat, 最好还是用另一个强模型把问题重写一下再塞回去训,能多diversity就尽量去做吧,反正不亏。
短数据和长数据都很重要,超级长数据也很重要,主打就是一个错落有致。
多轮对话的时候, 有些数据得一直保持某topic, 有些也得中途切换topic, 这种diversity也很重要
千言万语一句话:数据形式要百花齐放,prompt里重要信息分布要足够杂乱,不要给模型机会找到规律。
2.2.4 Quality
数据质量评估就见仁见智了,之前有用IFD测指令跟随分数的, 不过好像不是总能work, 某些人看上去很hard的任务IFD分反而不高,真是奇怪呢…借助强模型打分也是一个思路,比如delta,需要trade-off一下成本
或者各种质量评估方案全部集成进来(bushi)
如何处理低质量数据:看到有不少prompt自动进化的文章,可以一试。Reject sampling也可以提升一下
数据合成这里不展开,那得另写一篇长长的文章了。
2.3 SFT训练
你跟我讲LoRA? 我只能嘿嘿一笑。这里只讨论全量微调。
- 有人倾向于SFT开始时不用warmup。我还是习惯0.25%warmup起辞
- Ir上面说过了,比较小,1e-5量级,最后衰减为初始的10%,与pretrain一致
- 记得记录不同domain的loss变化,可以给下一阶段数据配比调整做准备。预训练末期的loss一般已
经降到1.7左右,但是SFT不同domain的Loss差别很大,我观察到SFT末期不同domain是0.5到3的
loss之间都有 - 如果认真做了数据,效果还不好—要么是pretrain知识没学够,要么是special token检查一下
- Qwen组的DMT给了一个大致的数据配比方案,二阶段微调。模型最最后见到的数据非常重要!直接影
响用户体验。所以stage1进行一些数学代码这种特殊任务的提升,sstage2进行更general的数据训
练,看上去泛化性更好。要是倒过来,模型的输出可能就比较贴近特殊domain了(想刷榜math/code
的反着来就行)。不过,还是得记得joint train,stage2也要混合stage1甚至pretrain数据,保持一定的
前阶段能力

- SFT还真没见过pretrain的loss spike现象,总体上比较稳定。不过单看各domain的loss曲线似乎不
是很稳定…最麻烦的是就是过拟合,实在不好把握这个度。 - 华为有篇文章论证,小模型的SFTepoch可以多跑几次效果会好,大漠型复杂度高可能更容易过拟
合。可能是我从pretrain过来的惯性,还是很难接受两轮以上的的training,所以我只把SFTepoch设为2 - 建议做sft的同学一定要自己看一下数据,做到心里有数;我手动看了百来条后,确实获得了不一
样的理解
所以SFT微调链路的交付哥,一天的生活是这样的:每天早上开十几个job, 只改动一点点参数, 然后苦等一天, 期间做做数据, 晚上收割一波模型, 跑测评看结果…
最后各domain的效果一定是有好有坏的,后续可以用DPO偏好数据去定向提升。
复杂指令是另一个很有意思的话题,可以看我知乎号此前发布的另一篇推理增强的文章。先写到这里,更详细的细节以后再来丰富吧
3. Pretrain
LLM训练的大Boss: Pretrain。
请认真读一下MiniCPM: Unveiling the Potential of Small Language Models
with Scalable Training Strategies(https://arxiv.org/pdf/2404.06395),以及openai的Scaling Laws for Neural Language Models(https://arxiv.org/pdf/2001.08361)。会有很大收获的
请认真读一下上面两篇!
请认真读一下上面两篇!

3.1 基本训练setting
- 优化器AdamW,weight decay0.1,(看情况用ZeRO1/2),余弦退火,warmup
- Batch:GPT3是32K过渡到3M,动态增大batch。较小的批次对应反向传播的频率更高,训练早期
可以使用少量的数据让模型的损失尽快下降;而较大的批次可以在后期让模型的损失下降地更加
稳定,使模型更好地收敛。这里也有一些finding optimal batch的方法Scaling Laws for Neural
Language Models(https://arxiv.org/pdf/2001.08361) , 、An Empirical Model of Large-Batch Training (https://arxiv.org/abs/1812.06162)。不过需要借助scaling law来预测batch,可惜我没做这个实验。我的方案是是取让集群tgs(tokens/gpu/second)数最高的batch,毕竟对我来说,最大的瓶颈是集群算力


- scaling law:建议openai,chinchllia,deepmind那三篇scaling law都要读下,看完会有不一样的
收获。由数据量,算力,大致能估算一个模型大小出来(就是需要很多实验才能测出来…给出的值
也是非常不精确的,做到心里有数即可 - 开源框架还是用megatron和deepspeed吧,各大公司内部肯定都有有自己的infra代码,我也不好
讲。记得flash-attn开起来。 - Ir很重要!玄学的地方。BF16训练稳定是个共识。gradient clip-朋没1.0。似乎回归任务都不太适
合dropout。


3.2 先讲一下Evaluation
pretrain测评最简单就是看ppl。有一些测评也能看多任务的续写能力。pretrain的评估是不好做的,大部分时间只看看着loss曲线,吹胡子瞪眼。
大模型:你猜我拟合的怎么样了,task_A是升了还是task_B是降了,升了一定不好吗,降了也不一定好。有的人升了,是为了别人将来更好地降;有的人陡降了,是为了别人loss疯狂飙升,是吧 loss spike。

评估是眼下最难做的东西,好像卷的人也不多。
其实,个人感觉,评估比pretrain,sft要难做…可以这么想,作为本科生,我都能跑pretrain了,那大模型训练门槛确实已经低到了一定程度。无非就是数据清洗合成过滤,各种配比和课程学习,学习率优化器,数据质量与多样性,分布式跑通,但是要做评测,真会遇到各种各样的问题。
数据配比怎么调?scaling law怎么算?课程学习几个阶段,该怎么粗粒度调优?这都是经验性和实验性的东西,甚至有时,一拍脑袋确定的数,都比一通可解释性理论推导得到的数,效果更好。这个trick加不加,都是看评估结果。但是至今没什么高效全面的评估,一般都是下面这样:
- 跑benchmark
- 用强模型来评估,比如gpt4,不过不稳定
当然,用人来评估也是可行的方案,效果肯定最好。把实习生人数scale上去,是最有效的scaling law,有多少人工,就有多少智能。
看榜单benchmark也就图一乐,还是chatbot arena靠谱点。大家多多少少都会把benchmark拿过去拟合一下用。GSM8K已经被卷烂了(我感觉弱智吧都有过拟合的表现),与其信某些模型的性能,不如信我是秦始皇。


谁掌握了评估,谁就掌握了未来。
3.3 预训练数据处理

- 基于规则的过滤非常有用,老老实实编造各种各样的规则,带来的效益是稳定的
- 不知道为什么llama3的report里用Ilama2来做主题分类器,实际上训类Bert模型效果会更好。最
后,也不能迷信分类结果,粗粒度看一下即可,本来就不是很准的东西,不要纠结于分类器准确率,有总比没有好 - 去重很重要。不过什么粒度的去重,还是看场景和成本。
- 多语言用fastext检测分类。(不过中译英这种问题,到底是归类到中文好,还是英文好?
- 代码和数学的数据pipeline参考deepseek
- Textbook is all your need
- 数据合成:Cosmopedia: how to create large-scale synthetic data ffor pre-training Large
Language Models (https://huggingface.co/blog/cosmopedia)
(其实我的数据侧偷了很多懒,今年开源了不少质量不错的预训练数据集,比如huggingface的fineweb。天工的skypile,以及一个很大的Redpajama等等,集合起来做一些过滤,去重,分类即可)
3.4 数据配比
还是scaling law贯穿始终

[2406.01375] D-CPT Law: Domain-specific Continual Pre-Training Scaling Law for Large Language Models (https://arxiv.org/abs/2406.01375)
[2305.10429] DoReMi: Optimizing Data Mixtures Speeds Up Language Model Pretraining (https://arxiv.org/abs/2305.10429)
具体multi-stage的设计就见仁见智了,每个阶段都是动态的重调配比。长文本和推理数据要稍微靠后一点再加入
末期一定是高质量数据!
所以不少文章都是利用退火来评估末期数据质量,然后选择性加入
3.5 训练前准备
按照scaling law估算一下吧。首先统计预测一下tokens数,大概能用多少卡多少天的算力,来推算需要多大模型,总共要多少step
3.5.1 模型参数计算:
假设词表大小V,模型L层,中间状态维度H, FFN维度H’ ,以llama为例
(其实这个MLP ratio也挺有讲究的,llama好像是取得8/3,我暴力穷举在8/3附近搜索,测得tflops数最高时应该是2.6875,和deepseek保持一致
- embedding层参数量:VH
- MHA:KQV每个变换矩阵都是H2,还需要一个MLP来拼接输出,所以一共4H2
- FFN:三个线性变换,一共3HH
- Norm:MHA和FFN输出需要RMSnorm(post-norm,故而是2H,最后模型输出还有一个norm需要H
- 输出层:线性变换需要VH
所以一共是:参数量 N = 2 V H + H + L ( 4 H 2 + 3 H H ′ + 2 H ) \text{所以一共是:参数量 }N=2VH+H+L(4H^2+3HH^{\prime}+2H) 所以一共是:参数量 N=2VH+H+L(4H2+3HH′+2H)
= 32000, = 32, = 4096, ′ = 11008的llama 7B参数量计算是6738415616,和实际吻合
3.5.2 运算量计算
假设模型参数量N,batchsize为B,输入seq_len为T,那么训练的总词元数是C=BT
简单的估算是运算量=6CN(如果没用Gradient checkpointing)用了多一次forward,修正为8CN

以 LLaMA (7B) 的训练为例介绍运算总量的计算方法。其参数量 N ≈ 6.74×10^9。这里假设训练数据的词元总数均为 = 1×10^9,不使用激活重计算技术, 那么 LLaMA (7B) 的训练过程中浮点运算总量为 6 × 6.74 × 10^9 × 10^9 ≈ 4.04 × 10^19
3.5.3 训练时间估计
T = 运算量 G P U 数 × G P U 每秒浮点运算数 T=\frac{\text{运算量}}{GPU\text{数}\times GPU\text{每秒浮点运算数}} T=GPU数×GPU每秒浮点运算数运算量
以 LLaMA (65B) 的预训练为 例,其参数量 N = 6.5 × 10^10,词元数 = 1.4 × 10^12,由于采用了激活重计算技术, 其运算量大致为 8 = 7.28 × 10^23。它在预训练过程中使用了 2,048 张 A100 GPU, 而每张 A100 GPU 每秒最多能进行 3.12 × 10^14 次 BF16 浮点数运算。我们假设在训练过程中,每张 GPU 能达到每秒 2 × 10^14 次 BF16 浮点数运算的实际性能。
可以计算出 LLaMA (65B) 使用 2,048 张 A100 GPU 在 1.4T 个词元上 的训练时间大致为 1.78 × 10^6 秒,即大约为 20.6 天。这个估算结果与论文中公布 的 21 天基本一致。
3.5.4 显存估计
老生常谈的话题。
模型参数和梯度用16位存储,AdamW额外存32位模型参数,动量,动量二阶矩,
设模型参数量P,数据并行数D,流水线并行P,张量并行T,GPU数G,
单卡存储模型参数和优化器显存开销:
- 不用ZeRO: 16P字节显存
- ZeRO1: 4P+12P/D字节
- ZeRO2: 2P+14P/D
- 如果用来tp,pp,那么全都除以PT即可得单卡开销
激活值显存:看模型架构,开不开flash-attn,有没有用激活值重计算,具体不再阐述,会算就行,慢慢分析即可
4. Post train
前面已经写了SFT,但我不会RLHF,(摊手,坦诚.jpg)。只会step-DPO调一下,其实DPO我也训不好,欸

今年以及未来很长一段时间的主流都会是Post-Training,实在太重要了,尤其是o1出来之后。大家都热情高涨。虽然真要应用MCTS的下游任务也不是很多,但是着实有趣,大模型推理是一定要拿下的一座山峰。
代码,数学,多轮对话,安全价值观各有各的细节。这里放一个llama 3推理部分的处理,机翻,摆烂了
我们将推理定义为执行多步计算并得出正确最终答案的能力。指导我们训练在数学推理方面表现优异的模型时,存在以下挑战:
- 缺乏提示:随着问题的复杂性增加,用于监督微调(SFT)的有效提示或问题的数量减少。这
种稀缺性使得创建多样化和代表性的训练数据集以教授模型各种数学技能变得困难。 - 缺乏真实值推理链:有效的推理需要一步一步的解决方案来促进推理过程。然而,通常缺乏真
实值推理链,这些推理链对于指导模型如何一步一步地分解问题预并得出最终答案至关重要。 - 中间步骤不正确:当使用模型生成的推理链时,中间步骤可能不总是正确的。这种不准确性可
能导致最终答案不正确,需要解决。 - 教授模型使用外部工具:增强模型使用外部工具,如代码解释器,允许它们通过交替代码和文
本来推理。这种能力可以显著提高它们的问题解决能力。 - 训练与推理之间的差异:模型在训练期间微调的方式与在推理期间使用的方式之间往往存在差
异。在推理期间,微调后的模型可能会与人类或其他模型互动,需要它通过反馈来改进其推理能
力。确保训练和现实世界使用之间的一致性对于保持推理性能至关重要。
为了解决这些挑战,我们应用以下方法论:
- 解决缺乏提示的问题:我们从数学上下文来取相关预训练数据,并将它转换成一种问题-答案格式,然后用于监督微调。此外,我们识别出模型表现不佳的数学技能,并积极从人类那里获取提示 η \eta η问题来教授模型这些技能。为了促进这一过程,我们创建了一个数学技能分类,并让人类根据相应的问题/问题提供相关提示。
- 增加逐步推理轨迹的训练数据:我们使用Llama 3为一系列提示生成一步一步的解决方案。对于每个提示,模型产生一个变数数量的生成。这些生成根据正确答案进行筛选。我们还在自我验证中使用Llama 3, 它用于验证对于给定的问题,是否有一个一步一步的解决方案是有效的。这个过程通过消除模型不产生有效推理轨迹的实例,提高了微调数据的质量。
- 过滤不正确的推理轨迹:我们训练了结果和逐步奖励模型来过滤中间推理步骤不正确的训练数据。这些奖励模型用于消除数据中的无效一步一步的推理,确保微调的高质量数据。对于更复杂的提示,我们使用蒙特卡洛树搜索 (MCTS) 与学习到的逐步奖励模型来生成有效的推理轨迹, 进一步提高了高质量推理数据的收集。
- 交替代码和文本推理:我们提示Llama 3通过结合文本推理和相关的Python代码来解决推理问
题。代码执行用作消除推理链无效情况的反馈信号,确保推理讨程的下确性。 - 从反馈和错误中学习:为了模拟人类反馈,我们利用了错误生成(即导致推理轨迹不正确的生成》并进行了错误校正,通过提示Llama 3来产生正确的生成。错误尝试和校正迭代过程的反馈使用,帮助提高了模型准确推理和从错误中学习的能力。
RLHF一定是非常重要的,SFT后RL一下往往能涨点。其实pretrain和sft都只是在正确的token上进行拟合,模型只知道什么是正确的输出,不知道什么是错误的,缺乏负反馈带来的多元信号。而RLHF在告诉你什么是正确的同时,也告诉了你错误的雷区在哪里,(不过RL完,错误的token是不是概率也增大了,毕竟出现频次比之前高了
Post train,RLHF这块,后面我会单独起一章详细写的,不像本文这样的行文匆匆,充满了草率的味道。我对这块非常感兴趣!欢迎小伙伴们一起交流呀!
相关文章:
如何从头训练大语言模型: A simple technical report
今天来快速捋一下路线,写个简短的technical report,更多是原理介绍性的。按我个人理解,从最简单的部分开始,逐步过渡到最繁复的环节: 模型架构-> Pretrain -> Post-Train -> Infra -> 数据侧。再掺杂一些杂项…...
gitlab无法登录问题
在我第一次安装gitlab的时候发现登录页面是 正常的页面应该是 这种情况的主要原因是不是第一次登录,所以我们要找到原先的密码 解决方式: [rootgitlab ~]# vim /etc/gitlab/initial_root_password# WARNING: This value is valid only in the followin…...
食品饮料生产瓶颈?富唯智能协作机器人来 “破壁”
在食品和饮料行业的发展进程中,诸多生产瓶颈如重复性劳动负担、复杂环境作业难题、季节性产能波动等,长期制约着企业的高效运营与进一步发展。如今,富唯智能协作机器人的出现,为这些难题提供了完美的解决方案,正逐步改…...
Python 实现 macOS 系统代理的设置
设置 SOCKS 代理 在 macOS 系统中,可以通过 networksetup 工具来设置 SOCKS 代理。以下是 Python 实现的方法: 使用 networksetup 设置 SOCKS 代理 import subprocessdef set_socks_proxy(server, port):"""设置 macOS 系统的 SOCKS 代理…...
深度学习之神经网络框架搭建及模型优化
神经网络框架搭建及模型优化 目录 神经网络框架搭建及模型优化1 数据及配置1.1 配置1.2 数据1.3 函数导入1.4 数据函数1.5 数据打包 2 神经网络框架搭建2.1 框架确认2.2 函数搭建2.3 框架上传 3 模型优化3.1 函数理解3.2 训练模型和测试模型代码 4 最终代码测试4.1 SGD优化算法…...
excel 日期转换
需求如下: 在excel 里面输入一个4515,4表示年份,2024年,51表示该年的51周,5表示日,周日用1表示,周一用2表示,以此类推,需要转换为年份/月份/日期 若想用公式来实现这一转换&#x…...
Awtk 如何添加开机画面
场景 我们知道在工程中,Ui是一个线程,并且需要一直存在,当我们使用的开机画面在这个线程开启就直接展示的时候,因为awtk的界面是window_open入栈的,即首次打开的窗口会记录在top,往后的窗口会依次往后存放&…...
【设计模式】【行为型模式】命令模式(Command)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 📫 欢迎V: flzjcsg2,我们共同讨论Java深渊的奥秘 …...
C++模拟实现AVL树
目录 1.文章概括 2.AVL树概念 3.AVL树的性质 4.AVL树的插入 5.旋转控制 1.左单旋 2. 右单旋 3.左右双旋 4.右左双旋 6.全部代码 1.文章概括 本文适合理解平衡二叉树的读者阅读,因为AVL树是平衡二叉树的一种优化,其大部分实现逻辑与平衡二叉树是…...
推荐算法实践:movielens数据集
MovieLens 数据集介绍 MovieLens 数据集是由明尼苏达大学的GroupLens研究小组维护的一个广泛使用的电影评分数据集,主要用于推荐系统的研究。该数据集包含用户对电影的评分、标签以及其他相关信息,是电影推荐系统开发与研究的常用数据源。 数据集版本 …...
dynamic_cast和static_cast和const_cast
dynamic_cast 在 C 中的作用 dynamic_cast 是 C 运行时类型转换(RTTI, Run-Time Type Identification)的一部分,主要用于: 安全的多态类型转换检查类型的有效性向下转换(Downcasting)跨类层次的指针或引用…...
React进行路由跳转的方法汇总
在 React 中进行路由跳转有多种方法,具体取决于你使用的路由库和版本。以下是常见的路由跳转方法汇总,主要基于 react-router-dom 库。 1. 使用 useNavigate 钩子(适用于 react-router-dom v6) useNavigate 是 react-router-dom…...
python卷积神经网络人脸识别示例实现详解
目录 一、准备 1)使用pytorch 2)安装pytorch 3)准备训练和测试资源 二、卷积神经网络的基本结构 三、代码实现 1)导入库 2)数据预处理 3)加载数据 4)构建一个卷积神经网络 5࿰…...
以Unity6.0为例,如何在Unity中开启DLSS功能
DLSS DLSS(NVIDIA 深度学习超级采样):NVIDIA DLSS 是一套由 GeForce RTX™ Tensor Core 提供支持的神经渲染技术,可提高帧率,同时提供可与原生分辨率相媲美的清晰、高质量图像。目前最新突破DLSS 4 带来了新的多帧…...
CSDN 大模型 笔记
AI 3大范式:计算 发发 交互 L1 生成代码 复制到IDEA (22年12-23年6,7月份) L2 部分自动编程 定义class 设计interface 让其填充实现 (23年7,8月份) L3 通用任务 CRUD (24年) L4 高度自动编程 通用领域专有任务…...
Flink怎么保证Exactly - Once 语义
Exactly - Once 语义是消息处理领域中的一种严格数据处理语义,指每条数据都只会被精确消费和处理一次,既不会丢失,也不会重复。 以下从消息传递语义对比、实现方式、应用场景等方面详细介绍: 与其他消息传递语义对比 在消息传递…...
AOS安装及操作演示
文章目录 一、安装node1.1 在 macOS 上管理 Node版本1.1.1 安装 nvm1.1.2 验证 nvm 是否安装成功1.1.3 使用 nvm 安装/切换 Node.js 版本1.1.4 卸载 Node.js 版本 1.2 在 windows 上管理 Node版本1.2.1 安装 nvm-windows1.2.2 安装 Node.js 版本1.2.3 切换 Node.js 版本1.2.4 卸…...
Python 操作 MongoDB 教程
一、引言 在当今数字化时代,数据的存储和管理至关重要。传统的关系型数据库在处理一些复杂场景时可能会显得力不从心,而 NoSQL 数据库应运而生。MongoDB 作为一款开源的、面向文档的 NoSQL 数据库,凭借其高性能、高可扩展性和灵活的数据模型…...
Stability AI 联合 UIUC 提出单视图 3D 重建方法SPAR3D,可0.7秒完成重建并支持交互式用户编辑。
Stability AI 联合 UIUC 提出一种简单而有效的单视图 3D 重建方法 SPAR3D,这是一款最先进的 3D 重建器,可以从单视图图像重建高质量的 3D 网格。SPAR3D 的重建速度很快,只需 0.7 秒,并支持交互式用户编辑。 相关链接 论文…...
网易易盾接入DeepSeek,数字内容安全“智”理能力全面升级
今年农历新年期间,全球AI领域再度掀起了一波革命性浪潮,国产通用大模型DeepSeek凭借其强大的多场景理解与内容生成能力迅速“出圈”,彻底改写全球人工智能产业的格局。 作为国内领先的数字内容风控服务商,网易易盾一直致力于探索…...
自动驾驶---如何打造一款属于自己的自动驾驶系统
在笔者的专栏《自动驾驶Planning决策规划》中,主要讲解了行车的相关知识,从Routing,到Behavior Planning,再到Motion Planning,以及最后的Control,笔者都做了相关介绍,其中主要包括算法在量产上…...
局域网使用Ollama(Linux)
解决局域网无法连接Ollama服务的问题 在搭建和使用Ollama服务的过程中,可能会遇到局域网内无法连接的情况。经过排查发现,若开启了代理软件,尤其是Hiddify,会导致此问题。这一发现耗费了我数小时的排查时间,希望能给大…...
聚焦 AUTO TECH China 2025,共探汽车内外饰新未来Automotive Interiors
全球汽车产业蓬勃发展的大背景下,汽车内外饰作为汽车重要组成部分,其市场需求与技术创新不断推动着行业变革。2025年11月20日至22日,一场备受瞩目的行业盛会 ——AUTO TECH China 2025 广州国际汽车内外饰技术展览会将在广州保利世贸博览馆盛…...
Moretl 增量文件采集工具
永久免费: <下载> <使用说明> 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架构 技术架构: Asp…...
支持多种网络数据库格式的自动化转换工具——VisualXML
一、VisualXML软件介绍 对于DBC、ARXML……文件的编辑、修改等繁琐操作,WINDHILL风丘科技开发的总线设计工具——VisualXML,可轻松解决这一问题,提升工作效率。 VisualXML是一个强大且基于Excel表格生成多种网络数据库文件的转换工具&#…...
mysql8 用C++源码角度看客户端发起sql网络请求,并处理sql命令
MySQL 8 的 C 源码中,处理网络请求和 SQL 命令的流程涉及多个函数和类。以下是关键的函数和类,以及它们的作用: 1. do_command 函数 do_command 函数是 MySQL 服务器中处理客户端命令的核心函数。它从客户端读取一个命令并执行。这个函数在…...
四、OSG学习笔记-基础图元
前一章节: 三、OSG学习笔记-应用基础-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145514021 代码:CuiQingCheng/OsgStudy - Gitee.com 一、绘制盒子模型 下面一个简单的 demo #include<windows.h> #include<osg/Node&…...
使用vllm docker容器部署大语言模型
说明 最近deepseek比较火,我在一台4卡4090的服务器上尝试部署了一下,记录下部署步骤。 安装过程 安卓docker和nvidia-container-toolkit 安装19.03版本以上的docker-ce即可。安装步骤参考清华docker源上的安装步骤:Docker CE 软件仓库 为…...
window 安装GitLab服务器笔记
目录 视频: 资源: Linux CeneOS7: VMware: Linux无法安装 yum install vim -y 1.手动创建目录 2.下载repo PS 补充视频不可复制的代码 安装GitLab *修改root用户密码相关(我卡在第一步就直接放弃了这个操作&…...
MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 10
第10章_创建和管理表 DDL:数据定义语言。CREATE \ALTER\ DROP \RENAME TRUNCATE DML:数据操作语言。INSERT \DELETE \UPDATE \SELECT(重中之重) DCL:数据控制语言。COMMIT \…...
