llama2 代码实验记录

news2025/1/17 13:57:56

torchrun分布式启动,所以要想在云端的环境下在本地的IDE上debug,需要设置一下,具体可以参考这里,需要传入的路径参数全部使用绝对路径。

目录

1、传入的句子

2、tokenizer 的tokenization

3、model的主要组成部分

4、过程中自己的小实验

总结

模型结构(测试只搭建了16层 model)


1、传入的句子

即prompts,实例中的如下所示

['I believe the meaning of life is', 'Simply put, the theory of relativity states that ', 'A brief message congratulating the team on the launch:\n\n        Hi everyone,\n        \n        I just ', 'Translate English to French:\n        \n        sea otter => loutre de mer\n        peppermint => menthe poivrée\n        plush girafe => girafe peluche\n        cheese =>']

2、tokenizer 的tokenization

示例如下 

# 传入
'I believe the meaning of life is'

# tokenizer
[306, 4658, 278, 6593, 310, 2834, 338]

# 加入bos后
[1, 306, 4658, 278, 6593, 310, 2834, 338]
# 传入
'Simply put, the theory of relativity states that '

# 
[3439, 17632, 1925, 29892, 278, 6368, 310, 14215, 537, 5922, 393, 29871]

#
[1, 3439, 17632, 1925, 29892, 278, 6368, 310, 14215, 537, 5922, 393, 29871]

 每个句子都被tokenizer用向量来表示。不过发现并不是逐词对应一个编码,有的对应了两个。其实这就涉及了sentencepiece的原理,见这里。由于兴趣使然,继续探索了一下

'I believe the meaning of life is'
[306, 4658, 278, 6593, 310, 2834, 338]
'I believe, the meaning of life is '
[306, 4658, 29892, 278, 6593, 310, 2834, 338, 29871]

 嗯,可以确定除了单词外,标点符号和空格也算做句子的一个部分。

'Simply' >> [3439, 17632]
'simply' >>[3763]

'Big' >>[7997]
'big' >>[4802]

不再继续探索了,详细的去查看sentencepiece原理,以及字节对编码 (BPE) (byte-pair-encoding (BPE))

3、model的主要组成部分

1、RSMNorm

一种标准化方法,详见这里

2、注意力运算

transformer decoder,应用掩码mask,主要的是采用RoPE位置编码方式,见这里

至于transformer的结构,见这里,不再详细赘述。

注意力运算方式采用GQA方式(Group Query Attention),至于相关的MHA,MQA的原理详见这里 

3、FeedForward

前向传播过程

主要是有个并行相乘的过程,激活函数采用 SiLU。

4、过程中自己的小实验

关于 sentencepiece的探讨

以下面文档为例训练了一下,其中包括中文和英文

一、一些注意事项
1.opencv默认读取的格式是BGR,也就是三通道的顺序。
2.而用matplotlib画的图是RGB的,所以其跟用opencv画的图颜色不太一样。
cv2.waitKey(0)表示按键盘任意键后,显示的图片会消失。
如果cv2.waitKey(1000),则等1000ms后显示的图片自动消失。
b,g,r三通道按顺序依次来。每个通道的形状都是一样的。b,g,r依次对应通道0,1,2,所以可以对其进行按通道处理,
即只保留其中的一个通道,使其它通道为全为0。
注:图中的cv_show为一个自定义的函数。这就是对这个图像矩阵进行切片操作一样。
填充位置:上、下、左、右依次对应top_size,bottom_size,left_size,right_size
cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
加个常数,矩阵的每个位置都加10。
其最大只能表示255,所以加和后的数为除256取余。
两个同型图片或者加个同型矩阵,表示为对应位置加和。其最大只能表示
3月11日下午三点半左右
菜鸟网络青岛即墨园区附近

一辆面包车发生交通事故

车头内凹受损严重

不明液体泄漏一地

驾驶员被困车内

此时

路过的多位热心人急伸援手

维持现场秩序

并及时找来工具砸车玻璃救人

不到十分钟

被困驾驶员便被救出

视频上传网络后

引发网友热议点赞

3月12日上午

记者联系到

参与救人的隋向坤等人

了解了当时

惊险又温暖的事发经过
网传:砸玻璃救被困司机现场视频热传获赞

“我们一起把这个人救出来了,安全驾驶!”3月11日下午,网友“@TOP8小龙虾大闸蟹”发布视频,记录了其参与的一起马路救援。

网传视频时长17秒,在视频中,一辆面包车侧翻在马路上,周围洒落了很多撞击碎片和不明液体,面包车车头受损严重,凹陷进去一大块,一名白衣男子拿着一个工具,在砸前风挡玻璃。

很快,前风挡玻璃被砸开一个洞,车内的司机从驾驶室钻了出来。

从视频来看,尽管面包车已经面目全非,但是车内人员似乎受伤并不严重。

视频一经发布,立即引发广大网友的关注和热议。

“车被撞成这样,即使车里的人没事,也要第一时间救人,因为车辆有自燃的可能,一旦发生起火,后果不堪设想。”

“出门在外,一定要安全驾驶,带上平安上路,载着幸福回家。”

“为这些及时伸出援手的热心人点赞。”

记者注意到,在视频下的留言中,除了点赞和安全提醒,还有网友“曝光”了白衣男子的身份,“救人的这个人叫隋向坤”“即墨移风店七级社区后吕村的”。
月12日上午,记者辗转联系到了隋向坤,他介绍了当时的现场情况。“当时我们开车沿着北赵线行驶,当经过菜鸟网络青岛即墨园区附近时,发现路中间有一辆
面包车侧翻了。当时没想太多,我们抓紧时间停车,跑过去看看有没有人员受伤。过去后,
发现车内有个司机被困在驾驶室,他自己出不来,当时我和朋友一起,三个人抓紧想办法救人。”隋向坤说。

得到的词汇表结果如下

<unk>	0
<s>	0
</s>	0
,	-2.70614
▁	-3.29977
。	-3.735
的	-3.88153
t	-4.52595
_	-4.55706
1	-4.66518
了	-4.66623
一	-4.72225
size	-4.79318
为	-4.93599
后	-4.93599
车	-5.10193
有	-5.10267
i	-5.10269
“	-5.26253
”	-5.27607
e	-5.30048
其	-5.30267
上	-5.30268
cv	-5.30269
R	-5.3027
g	-5.3027
m	-5.30271
2.	-5.30308
来	-5.36046
b	-5.42288
视频	-5.50133
不	-5.50318
在	-5.54744
和	-5.55094
网友	-5.55265
事	-5.55266
砸	-5.55266
隋向坤	-5.55267
被困	-5.55267
a	-5.55267
月	-5.55267
自	-5.55267
是	-5.55269
B	-5.55269
r	-5.55269
y	-5.55269
l	-5.5527
、	-5.55272
车内	-5.55382
通道	-5.57373
。”	-5.5878
一个	-5.60327
▁“	-5.60654
中	-5.85697
出	-5.87985
人	-5.88318
这	-5.88391
时	-5.88421
2	-5.88449
被	-5.88597
即	-5.88597
3	-5.88599
大	-5.886
数	-5.886
矩阵	-5.886
没	-5.886
司机	-5.886
我们	-5.886
所以	-5.88601
现场	-5.88601
h	-5.88601
w	-5.88601
想	-5.88601
着	-5.88601
:	-5.88602
多	-5.88602
看	-5.88602
路	-5.88602
E	-5.88602
位置	-5.88602
按	-5.88602
(	-5.88603
T	-5.88603
点赞	-5.88616
一样	-5.88848
一起	-5.88892
op	-5.97992
to	-6.2533
救人	-6.35325
三	-6.35584
0	-6.36683
当时	-6.37716
加	-6.38142
图	-6.38303
片	-6.38306
)	-6.38325
面包车	-6.38459
全	-6.38492
经	-6.38519
注	-6.38519
使	-6.38596
▁网传	-6.38598
也	-6.38598
发生	-6.38598
安全驾驶	-6.38598
撞	-6.38598
日下午	-6.38598
白衣男子	-6.38598
要	-6.38598
工具	-6.38598
个同型	-6.38599
果	-6.38599
除	-6.38599
传	-6.386
伸	-6.386
到	-6.386
取	-6.386
可	-6.386
失	-6.386
定	-6.386
对	-6.386
并	-6.386
留	-6.386
些	-6.386
从	-6.38601
太	-6.38601
都	-6.38601
很	-6.38601
G	-6.38602
K	-6.38602
O	-6.38602
s	-6.38602
凹	-6.38602
消	-6.38602
用	-6.38602
等	-6.38602
键	-6.38602
他	-6.38603
右	-6.38603
开	-6.38603
P	-6.38604
下	-6.38604
左	-6.38604
f	-6.38605
救	-7.01003
p	-7.05187
o	-7.36039
个	-7.36221
辆	-7.37107
起	-7.37386
样	-7.37563
内	-7.37937
当	-7.38203
5	-7.38255
间	-7.38261
.	-7.38308
过	-7.38316
安	-7.38323
意	-7.38397
者	-7.38498
记	-7.385
去	-7.38528
行	-7.38529
进	-7.38529
点	-7.38531
赞	-7.38531
成	-7.3859
!	-7.38595
7	-7.38595
七	-7.38595
份	-7.38595
光	-7.38595
叫	-7.38595
因	-7.38595
堪	-7.38595
店	-7.38595
把	-7.38595
曝	-7.38595
火	-7.38595
社	-7.38595
秒	-7.38595
移	-7.38595
第	-7.38595
级	-7.38595
蟹	-7.38595
设	-7.38595
身	-7.38595
还	-7.38595
醒	-7.38595
里	-7.38595
长	-7.38595
闸	-7.38595
风	-7.38595
家	-7.38597
快	-7.38597
6	-7.38599
两	-7.38599
保	-7.38599
只	-7.38599
广	-7.38599
或	-7.38599
立	-7.38599
持	-7.38599
8	-7.386
@	-7.386
M	-7.386
c	-7.386
义	-7.386
交	-7.386
以	-7.386
位	-7.386
余	-7.386
作	-7.386
便	-7.386
像	-7.386
关	-7.386
函	-7.386
分	-7.386
切	-7.386
区	-7.386
十	-7.386
半	-7.386
吕	-7.386
周	-7.386
回	-7.386
围	-7.386
地	-7.386
外	-7.386
它	-7.386
小	-7.386
带	-7.386
常	-7.386
平	-7.386
幸	-7.386
序	-7.386
式	-7.386
录	-7.386
急	-7.386
找	-7.386
拿	-7.386
提	-7.386
援	-7.386
操	-7.386
故	-7.386
旦	-7.386
村	-7.386
格	-7.386
此	-7.386
泄	-7.386
洒	-7.386
洞	-7.386
漏	-7.386
热	-7.386
燃	-7.386
理	-7.386
福	-7.386
秩	-7.386
维	-7.386
而	-7.386
能	-7.386
色	-7.386
获	-7.386
落	-7.386
虾	-7.386
解	-7.386
言	-7.386
认	-7.386
说	-7.386
读	-7.386
通	-7.386
钟	-7.386
钻	-7.386
项	-7.386
颜	-7.386
龙	-7.386
又	-7.386
发	-7.386
暖	-7.386
温	-7.386
险	-7.386
惊	-7.38601
默	-7.38601
乎	-7.38602
任	-7.38602
会	-7.38602
似	-7.38602
但	-7.38602
办	-7.38602
动	-7.38602
友	-7.38602
处	-7.38602
如	-7.38602
尽	-7.38602
己	-7.38602
已	-7.38602
朋	-7.38602
法	-7.38602
盘	-7.38602
目	-7.38602
管	-7.38602
载	-7.38602
门	-7.38602
非	-7.38602
面	-7.38602
A	-7.38605
C	-7.38605
D	-7.38605
k	-7.38605
介	-7.38605
停	-7.38605
况	-7.38605
击	-7.38605
则	-7.38605
北	-7.38605
名	-7.38605
块	-7.38605
形	-7.38605
情	-7.38605
沿	-7.38605
状	-7.38605
碎	-7.38605
绍	-7.38605
赵	-7.38605
跑	-7.38605
跟	-7.38605
转	-7.38605
辗	-7.38605
陷	-7.38605
驶	-7.38605
填	-7.38607
=	-7.3861
I	-7.3861
L	-7.3861
充	-7.3861
线	-7.3861
鸟	-8.1869
马	-8.187
顺	-8.1871
青	-8.1872
附	-8.1873
近	-8.1874
议	-8.1875
衣	-8.1876
菜	-8.1877
联	-8.1878
翻	-8.1879
紧	-8.188
系	-8.1881
白	-8.1882
画	-8.1883
男	-8.1884
生	-8.1885
液	-8.1886
每	-8.1887
最	-8.1888
显	-8.1889
明	-8.189
损	-8.1891
挡	-8.1892
抓	-8.1893
手	-8.1894
心	-8.1895
引	-8.1896
布	-8.1897
工	-8.1898
岛	-8.1899
就	-8.19
室	-8.1901
子	-8.1902
头	-8.1903
型	-8.1904
园	-8.1905
同	-8.1906
及	-8.1907
参	-8.1908
前	-8.1909
具	-8.191
侧	-8.1911
体	-8.1912
伤	-8.1913
与	-8.1914
n	-8.1915
d	-8.1916
阵	-8.1917
重	-8.1918
置	-8.1919
络	-8.192
矩	-8.1921
次	-8.1922
机	-8.1923
所	-8.1924
应	-8.1925
墨	-8.1926
场	-8.1927
司	-8.1928
依	-8.1929
们	-8.193
严	-8.1931
隋	-8.1932
表	-8.1933
璃	-8.1934
玻	-8.1935
日	-8.1936
我	-8.1937
坤	-8.1938
困	-8.1939
员	-8.194
向	-8.1941
受	-8.1942
午	-8.1943
现	-8.1944
包	-8.1945
驾	-8.1946
示	-8.1947
道	-8.1948
v	-8.1949
频	-8.195
视	-8.1951
z	-8.1952
网	-8.1953

进行了一下测试

if __name__ == '__main__':

    model_path = '************/model_output/Chinese.model'

    s = spm.SentencePieceProcessor(model_file=model_path)
    mm = s.EncodeAsPieces('测试一下,看看什么情况')
    print(mm)
    print('==================')
    word = '测试一下,看看什么情况'

    tokenizer = Tokenizer(model_path)
    token=tokenizer.encode(word, bos=True, eos=False)
    print(token)
    print('==================')
    decode_token = tokenizer.decode(token)
    print(decode_token)
# 得到的输出

['▁', '测试', '一', '下', ',', '看', '看', '什么', '情', '况']
==================
[1, 4, 0, 11, 141, 3, 76, 76, 0, 317, 310]
==================
 ⁇ 一下,看看 ⁇ 情况

Process finished with exit code 0

不在词汇表中的token在decode时会显示??,0代表的是unseen的。这说明这个词汇表的长度还是太小了。这只是各测试,看看其中的过程。 

总结

 因为这只是测试,所以感觉没有什么太复杂的东西。真正的难点应该是训练的整体流程,需要克服许多困难。不过本次测试对llama也有了一定的了解,同时对大模型的一些使用的技术有了相关了解。(●ˇ∀ˇ●)

***

你看看现在哪有瓜啊,这都是大鹏的瓜,

***

model.args

ModelArgs(dim=4096, n_layers=32, n_heads=32, n_kv_heads=None, vocab_size=32000, multiple_of=256, ffn_dim_multiplier=None, norm_eps=1e-06, max_batch_size=4, max_seq_len=128)

模型结构(测试只搭建了16层 model)

Transformer(
  (tok_embeddings): ParallelEmbedding()
  (layers): ModuleList(
    (0): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (1): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (2): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (3): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (4): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (5): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (6): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (7): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (8): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (9): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (10): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (11): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (12): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (13): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (14): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
    (15): TransformerBlock(
      (attention): Attention(
        (wq): ColumnParallelLinear()
        (wk): ColumnParallelLinear()
        (wv): ColumnParallelLinear()
        (wo): RowParallelLinear()
      )
      (feed_forward): FeedForward(
        (w1): ColumnParallelLinear()
        (w2): RowParallelLinear()
        (w3): ColumnParallelLinear()
      )
      (attention_norm): RMSNorm()
      (ffn_norm): RMSNorm()
    )
  )
  (norm): RMSNorm()
  (output): ColumnParallelLinear()
)

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

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

相关文章

如何关闭 Visual Studio 双击异常高亮

[问题描述]&#xff1a; 最近 Visual Studio 更新后&#xff0c;双击选中关键字快要亮瞎我的眼睛了 &#x1f440;&#x1f440; [解决方法]&#xff1a; 摸索了一下&#xff0c;找到了关闭的方法&#xff1a;工具 → 选项 → 文本编辑器 → 常规&#xff0c;然后取消 勾选 sel…

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——蚁群算法(ACO)

基于python语言&#xff0c;采用经典遗传算法&#xff08;ACO&#xff09;对 需求拆分车辆路径规划问题&#xff08;SDVRP&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作&#xff0c;目前已经成熟…

掼蛋俗语40条

1、以牌会友&#xff0c;天长地久 ​2、智慧掼蛋&#xff0c;欢乐无限 ​3、尊重对手&#xff0c;信任队友 ​4、小掼蛋&#xff0c;大世界 ​5、掼蛋敢做主&#xff0c;不会太受苦 ​6、掼蛋不出手&#xff0c;平时定保守 ​7、精彩掼蛋&#xff0c;生活精彩 ​8、细心…

算法打卡day14|二叉树篇03|Leetcode 104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

算法题 Leetcode 104.二叉树的最大深度 题目链接:104.二叉树的最大深度 大佬视频讲解&#xff1a;二叉树的最大深度视频讲解 个人思路 可以使用层序遍历&#xff0c;因为层序遍历会有一个层数的计算&#xff0c;最后计算到的层数就是最大深度&#xff1b; 解法 迭代法 就是…

docker 部署nacos

docker 部署nacos 1、配置数据库表 -- 导出 nacos 的数据库结构 DROP DATABASE IF EXISTS nacos; CREATE DATABASE IF NOT EXISTS nacos; USE nacos;-- 导出 表 nacos.config_info 结构 DROP TABLE IF EXISTS config_info; CREATE TABLE IF NOT EXISTS config_info (id bigi…

深入理解TCP的四次分手过程

文章目录 深入理解TCP的四次分手过程四次分手的意义四次分手的工作原理四次分手的重要性实际应用中的考虑结论补充:TIME_WAIT在哪一步?TIME_WAIT状态的目的TIME_WAIT状态的影响 深入理解TCP的四次分手过程 在网络通信中&#xff0c;TCP&#xff08;传输控制协议&#xff09;确…

疫情网课管理系统|基于springboot框架+ Mysql+Java+Tomcat的疫情网课管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 ​编辑 学生功能模块 管理员功能 教师功能模块 系统功能设计 数据库E-R图设计 lun…

rtsp流实现web端实时播放(海康+大华)

最近的电力项目需要嵌入海康摄像头画面&#xff0c;之前没有做过类似的流媒体播放&#xff0c;所以有些懵&#xff1b; 海康开放平台的webAPI&#xff0c;有插件还是无插件&#xff0c;都不适合自研web系统的嵌入&#xff0c;所以需要自己进行解流&#xff1b; 首先&#xff0c…

【docker】docker的常用命令

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;中间件 ⛺️稳中求进&#xff0c;晒太阳 常规命令 docker version #查看docker 版本信息docker info #显示docker 的系统信息&#xff0c;包括镜像和容器数量docker --help #查看所有的命…

性能测试-Jmeter常用元件基础使用

一、Jmeter元件 #线程组 添加HTTP请求 #配置元件 配置元件内的元件都是用于进行初始化的东西 #监听器 监听器主要是用来获取我们使用取样器发送请求后的响应数据相关信息 #定时器 定时器主要用来控制我们多久后执行该取样器&#xff08;发送请求&#xff09; #前置处理器 前置处…

解锁海外市场,HubSpot网站建设全攻略

在全球化日益加剧的今天&#xff0c;构建符合海外市场需求的网站已成为企业走向国际化的关键一步。今天运营坛将带领大家认识到全球化意识在网站建设中的重要性&#xff0c;并着重介绍为何选择HubSpot作为构建海外网站的首选工具&#xff0c;同时探讨网站设计和用户体验的关键因…

使用el-row及el-col页面缩放时出现空行解决方案

问题&#xff1a; 当缩放到90%或者110%&#xff0c;选中下拉后&#xff0c;下方就会出现空行 如下图所示&#xff1a; 关于el-row 和 el-col &#xff1a; 参数说明类型可选值默认值span栅格占据的列数number—24offset栅格左侧的间隔格数number—0push栅格向右移动格数number…

计算机网络 谢希仁(001-2)

计算机网络-方老师 总时长 24:45:00 共50个视频&#xff0c;6个模块 此文章包含1.5到1.7的内容 1.5计算机网络类别 连通 共享 分类方法 广域网是边缘部分和核心部分的核心部分 以前是拨号连接 现在是光纤 总线型 星型 环形网 1.6计算机网络的性能 带上单位之后就不是…

MySQL删除数据 文件大小不变的原因以及处理空洞问题

数据删除流程 InnoDB 里的数据都是用 B 树的结构组织的。 假设&#xff0c;我们要删掉 R4 这个记录&#xff0c;InnoDB 引擎只会把 R4 这个记录标记为删除。如果之后要再插入一个 ID 在 300 和 600 之间的记录时&#xff0c;可能会复用这个位置。但是&#xff0c;磁盘文件的大…

寻找用户痛点塑造产品价值 4大注意事项

移动互联网时代&#xff0c;用户价值不言而喻&#xff0c;只有拥有用户思维&#xff0c;寻找到用户痛点&#xff0c;塑造出产品价值&#xff0c;才能打造出爆款产品。因此要塑造产品价值&#xff0c;核心是寻找用户痛点。如果没有找到用户痛点&#xff0c;意味着产品无法满足用…

鸿蒙原生应用再添一批新丁!阿里旗下11款应用、广汽传祺、岚图汽车、零跑汽车、凯翼汽车 入局鸿蒙

鸿蒙原生应用再添一批新丁&#xff01;阿里旗下11款应用、广汽传祺、岚图汽车、零跑汽车、凯翼汽车 入局鸿蒙 来自 HarmonyOS 微博近期消息&#xff0c;阿里旗下闲鱼、1688、飞猪、饿了么、盒马、菜鸟、点淘、淘宝特价版、大麦、淘票票、灯塔专业版共11款大家耳熟能详的应用今…

vue防止用户连续点击造成多次提交

中心思想&#xff1a;在第一次提交的结果返回前&#xff0c;将提交按钮禁用。 方法一&#xff1a;给提交按钮加上disabled属性&#xff0c;在请求时先把disabled属性改成true&#xff0c;在结果返回时改成false 方法二&#xff1a;添加loading遮罩层&#xff0c;可以直接使用e…

【Vue3】路由的query参数和params参数

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

计算机毕业设计-神经网络算法及对未来一月的天气状况预测系统

概要 随着对气象各项数据的观测手段、技术上的提升&#xff0c;对于各项或取得数据种类&#xff0c;精度上都有着更好的超越&#xff0c;而对于气象温度进行预测是目前预测数据中最重要的需要解决的问题之一。 针对如何选择预测一个月内的天气情况&#xff0c;本次利用神经网络…

Keil5----生成lib文件和lib文件的使用

Keil5编译环境搭建----教程目录 Keil5----生成lib文件 将.c文件生成为.lib文件&#xff0c;实现程序代码的保密。具体步骤如下&#xff1a; 前言 User_LED.c文件如下&#xff0c;主要实现LED灯闪烁。 步骤1 步骤2 步骤3 步骤4 步骤5 Keil5----lib文件的使用 删除User_LED…