【自然语言处理】【大模型】DeepSeek-V2论文解析

news2024/9/22 13:29:29

论文地址:https://arxiv.org/pdf/2405.04434

相关博客
【自然语言处理】【大模型】DeepSeek-V2论文解析
【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM
【自然语言处理】BitNet b1.58:1bit LLM时代
【自然语言处理】【长文本处理】RMT:能处理长度超过一百万token的Transformer
【自然语言处理】【大模型】MPT模型结构源码解析(单机版)
【自然语言处理】【大模型】ChatGLM-6B模型结构代码解析(单机版)
【自然语言处理】【大模型】BLOOM模型结构源码解析(单机版)

一、简介

  • DeepSeek-V2是一个总参数为236B的MoE模型,每个token仅激活21B的参数,并支持128K的上下文长度。
  • 提出了Multi-head Latent Attention(MLA),通过压缩kv cache至隐向量,从而保证高效推理。
  • 相比于DeepSeek 67B,DeepSeek-V2实现了更好的表现,节约了42.5%的训练成本,降低了93.3%的kv cache,提升最大吞吐5.76倍。
  • 预训练语料包含了8.1T tokens并进一步进行SFT和RL。

二、模型结构

1. MLA(Multi-Head Latent Attention)

​ 传统Transformer采用MHA(Multi-Head Attention),但是kv cache会成为推理瓶颈。MQA(Multi-Query Attention)和GQA(Grouped-Query Attention)可以一定程度减少kv cache,但效果上不如MHA。DeepSeek-V2设计了一种称为MLA(Multi-Head Latent Attention)的注意力机制。MLA通过低秩key-value联合压缩,实现了比MHA更好的效果并且需要的kv cache要小很多。

1.1 标准MHA

​ 令 d d d为embedding维度, n h n_h nh是注意力头的数量, d h d_h dh是每个头的维度, h t ∈ R d \textbf{h}_t\in\mathbb{R}^d htRd是注意力层中第 t t t个token的输入。标准MHA通过三个矩阵 W Q , W K , W V ∈ R d h n h × d W^Q,W^K,W^V\in\mathbb{R}^{d_h n_h\times d} WQ,WK,WVRdhnh×d来产生 q t , k t , v t ∈ R d h n h \textbf{q}_t,\textbf{k}_t,\textbf{v}_t\in\mathbb{R}^{d_h n_h} qt,kt,vtRdhnh
q t = W Q h t k t = W K h t v t = W V h t \begin{align} \textbf{q}_t&=W^Q\textbf{h}_t \tag{1}\\ \textbf{k}_t&=W^K\textbf{h}_t \tag{2}\\ \textbf{v}_t&=W^V\textbf{h}_t \tag{3}\\ \end{align} \\ qtktvt=WQht=WKht=WVht(1)(2)(3)
在MHA中 q t , k t , v t \textbf{q}_t,\textbf{k}_t,\textbf{v}_t qt,kt,vt会被划分为 n h n_h nh个头:
[ q t , 1 ; q t , 2 ; … , q t , n h ] = q t [ k t , 1 ; k t , 2 ; … , k t , n h ] = k t [ v t , 1 ; v t , 2 ; … , v t , n h ] = v t o t , i = ∑ j = 1 t Softmax ( q t , i ⊤ k j , i d h ) v j , i u t = W O [ o t , 1 ; o t , 2 ; … , o t , n h ] \begin{align} &[\textbf{q}_{t,1};\textbf{q}_{t,2};\dots,\textbf{q}_{t,n_h}]=\textbf{q}_t \tag{4}\\ &[\textbf{k}_{t,1};\textbf{k}_{t,2};\dots,\textbf{k}_{t,n_h}]=\textbf{k}_t \tag{5}\\ &[\textbf{v}_{t,1};\textbf{v}_{t,2};\dots,\textbf{v}_{t,n_h}]=\textbf{v}_t \tag{6}\\ &\textbf{o}_{t,i}=\sum_{j=1}^t\text{Softmax}(\frac{\textbf{q}_{t,i}^\top\textbf{k}_{j,i}}{\sqrt{d_h}})\textbf{v}_{j,i} \tag{7}\\ &\textbf{u}_t=W^O[\textbf{o}_{t,1};\textbf{o}_{t,2};\dots,\textbf{o}_{t,n_h}] \tag{8}\\ \end{align} \\ [qt,1;qt,2;,qt,nh]=qt[kt,1;kt,2;,kt,nh]=kt[vt,1;vt,2;,vt,nh]=vtot,i=j=1tSoftmax(dh qt,ikj,i)vj,iut=WO[ot,1;ot,2;,ot,nh](4)(5)(6)(7)(8)
其中 q t , i , k t , i , v t , i ∈ R d h \textbf{q}_{t,i},\textbf{k}_{t,i},\textbf{v}_{t,i}\in\mathbb{R}^{d_h} qt,i,kt,i,vt,iRdh是第 i i i个注意力头的query、key和value, W O ∈ R d × d h n h W^O\in\mathbb{R}^{d\times d_h n_h} WORd×dhnh是输出投影矩阵。在推理时,所有的key和value都会被缓存来加速推理。对于每个token,MHA需要缓存 2 n h d h l 2n_h d_h l 2nhdhl个元素。

1.2 低秩Key-Value联合压缩

在这里插入图片描述

​ MLA通过低秩联合压缩key和value来减少kv cache:
c t K V = W D K V h t k t C = W U K c t K V v t C = W U V c t K V \begin{align} \textbf{c}_t^{KV}&=W^{DKV}\textbf{h}_t \tag{9}\\ \textbf{k}_t^C&=W^{UK}\textbf{c}_t^{KV} \tag{10}\\ \textbf{v}_t^C&=W^{UV}\textbf{c}_t^{KV} \tag{11}\\ \end{align} \\ ctKVktCvtC=WDKVht=WUKctKV=WUVctKV(9)(10)(11)
其中 c t K V ∈ R d c \textbf{c}_t^{KV}\in\mathbb{R}^{d_c} ctKVRdc是用于压缩key和value的隐向量; d c ( ≪ d h n h ) d_c(\ll d_h n_h) dc(dhnh)表示KV压缩的维度; W D K V ∈ R d c × d W^{DKV}\in\mathbb{R}^{d_c\times d} WDKVRdc×d是下投影矩阵, W U K , W U V ∈ R d h n h × d c W^{UK},W^{UV}\in\mathbb{R}^{d_h n_h\times d_c} WUK,WUVRdhnh×dc表示上投影矩阵。在推理时,MLA仅需要缓存 c t K V \textbf{c}_t^{KV} ctKV,因此kv cache仅需要缓存 d c l d_c l dcl个元素。此外,在推理时可以把 W U K W^{UK} WUK吸收到 W Q W^Q WQ W U V W^{UV} WUV吸收到 W O W^O WO中,这样甚至都不需要计算key和value。

关于推理时权重融合的理解:

​ 这里不考虑具体注意力头,仅就单个头进行分析。先来分析 q t ⊤ k j C \textbf{q}_t^\top\textbf{k}_j^C qtkjC
q t ⊤ k j C = ( W Q h t ) ⊤ W U K c j K V = h t ⊤ W Q ⊤ W U K c j K V = h t ⊤ W Q U K c j K V \begin{align} \textbf{q}_t^\top\textbf{k}_j^C&=(W^Q\textbf{h}_t)^\top W^{UK}\textbf{c}_j^{KV} \\ &=\textbf{h}_t^\top {W^Q}^\top W^{UK} \textbf{c}_j^{KV} \\ &=\textbf{h}_t^\top W^{QUK} \textbf{c}_j^{KV} \\ \end{align} \\ qtkjC=(WQht)WUKcjKV=htWQWUKcjKV=htWQUKcjKV
推理时可以将 W Q ⊤ W U K {W^Q}^\top W^{UK} WQWUK预先计算出来,记为 W Q U K W^{QUK} WQUK。再来看整个注意力输出值的计算过程
u t = W O o t = W O ∑ j = 1 t Softmax j ( q t ⊤ k j d h ) v j = W O ∑ j = 1 t Softmax j ( q t ⊤ k j d h ) W U V c j K V = W O W U V ∑ j = 1 t Softmax j ( q t ⊤ k j d h ) c j K V = W O U V ∑ j = 1 t Softmax j ( q t ⊤ k j d h ) c j K V \begin{align} \textbf{u}_t&=W^O\textbf{o}_t \\ &=W^O\sum_{j=1}^t\text{Softmax}_j(\frac{\textbf{q}_t^\top\textbf{k}_j}{\sqrt{d_h}})\textbf{v}_j \\ &=W^O\sum_{j=1}^t\text{Softmax}_j(\frac{\textbf{q}_t^\top\textbf{k}_j}{\sqrt{d_h}})W^{UV}\textbf{c}_j^{KV} \\ &=W^OW^{UV}\sum_{j=1}^t\text{Softmax}_j(\frac{\textbf{q}_t^\top\textbf{k}_j}{\sqrt{d_h}})\textbf{c}_j^{KV} \\ &=W^{OUV}\sum_{j=1}^t\text{Softmax}_j(\frac{\textbf{q}_t^\top\textbf{k}_j}{\sqrt{d_h}})\textbf{c}_j^{KV} \\ \end{align} \\ ut=WOot=WOj=1tSoftmaxj(dh qtkj)vj=WOj=1tSoftmaxj(dh qtkj)WUVcjKV=WOWUVj=1tSoftmaxj(dh qtkj)cjKV=WOUVj=1tSoftmaxj(dh qtkj)cjKV
W O W U V W^O W^{UV} WOWUV的结果记为 W O U V W^{OUV} WOUV。通过这样的方式就不需要显式计算key和value。

​ 此外,为了在训练时降低激活的显存占用,对query也进行低秩压缩,即使其不能降低kv cache。具体来说,
c t Q = W D Q h t q t C = W U Q c t Q \begin{align} \textbf{c}_t^Q&=W^{DQ}\textbf{h}_t \tag{12}\\ \textbf{q}_t^C&=W^{UQ}\textbf{c}_t^Q \tag{13} \\ \end{align} \\ ctQqtC=WDQht=WUQctQ(12)(13)
其中 c t Q ∈ R d c ′ \textbf{c}_t^Q\in\mathbb{R}^{d_c'} ctQRdc是query的压缩后隐向量; d c ′ ( ≪ d h n h ) d_c'(\ll d_h n_h) dc(dhnh)表示query的压缩维度; W D Q ∈ R d c ′ × d , W U Q ∈ R d h n h × d c ′ W^{DQ}\in\mathbb{R}^{d_c'\times d},W^{UQ}\in\mathbb{R}^{d_h n_h\times d_c'} WDQRdc×d,WUQRdhnh×dc是下投影矩阵和上投影矩阵。

1.3 解耦RoPE

​ RoPE与低秩KV压缩并不兼容。具体来说,RoPE对于query和key是位置敏感的。若将RoPE应用在 k t C \textbf{k}_t^C ktC上,等式10中的 W U K W^{UK} WUK将与位置敏感RoPE矩阵耦合。但是在推理时, W U K W^{UK} WUK就无法被吸收到 W Q W^Q WQ中,因为对当前生成token相关的RoPE矩阵将位于 W Q W^Q WQ W U K W^{UK} WUK之间,而矩阵乘法不满足交换律。因此,推理时必须重新计算前面token的key,这会显著影响推理效率。

关于RoPE与抵秩KV压缩不兼容的理解。

RoPE向 k t C \textbf{k}_t^C ktC注入位置信息的方式为 f ( k t C , t ) = R t k t C f(\textbf{k}_t^C,t)=R_t\textbf{k}_t^C f(ktC,t)=RtktC,其中 R t R_t Rt是一个位置敏感的矩阵。那么有
q t ⊤ f ( k j C , j ) = ( W Q h t ) ⊤ R j W U K c j K V = h t ⊤ W Q ⊤ R j W U K c j K V \begin{align} \textbf{q}_t^\top f(\textbf{k}_j^C,j)&=(W^Q\textbf{h}_t)^\top R_j W^{UK}\textbf{c}_j^{KV} \\ &=\textbf{h}_t^\top {W^Q}^\top R_j W^{UK} \textbf{c}_j^{KV} \\ \end{align} \\ qtf(kjC,j)=(WQht)RjWUKcjKV=htWQRjWUKcjKV
由于 R j R_j Rj是未知敏感的,导致 W Q ⊤ R j W U K {W^Q}^\top R_j W^{UK} WQRjWUK针对不同的token,取值不一样。无法像先前那样直接融合为 W Q U K W^{QUK} WQUK

​ 为了解决这个问题,提出使用额外的多头query q t , i R ∈ R d h R \textbf{q}_{t,i}^R\in\mathbb{R}^{d_h^R} qt,iRRdhR和共享key k t R ∈ R d h R \textbf{k}_t^R\in\mathbb{R}^{d_h^R} ktRRdhR来携带RoPE,其中 d h R d_h^R dhR表示解耦query和key的每个头的维度。在MLA中使用解耦RoPE策略的方式为:
q t R = [ q t , 1 R ; q t , 2 R ; …   ; q t , n h R ] = RoPE ( W Q R c t Q ) k t R = RoPE ( W K R h t ) q t , i = [ q t , i C ; q t , i R ] k t , i = [ k t , i C ; k t R ] o t , i = ∑ j = 1 t Softmax j ( q t , i ⊤ k j , i d h + d h R ) v j , i C u t = W O [ o t , 1 ; o t , 2 ; …   ; o t , n h ] \begin{align} \textbf{q}_t^R&=[\textbf{q}_{t,1}^R;\textbf{q}_{t,2}^R;\dots;\textbf{q}_{t,n_h}^R]=\text{RoPE}(W^{QR}\textbf{c}_t^Q) \tag{14}\\ \textbf{k}_t^R&=\text{RoPE}(W^{KR}\textbf{h}_t) \tag{15}\\ \textbf{q}_{t,i}&=[\textbf{q}_{t,i}^C;\textbf{q}_{t,i}^R] \tag{16}\\ \textbf{k}_{t,i}&=[\textbf{k}_{t,i}^C;\textbf{k}_t^R] \tag{17} \\ \textbf{o}_{t,i}&=\sum_{j=1}^t\text{Softmax}_j(\frac{\textbf{q}_{t,i}^\top\textbf{k}_{j,i}}{\sqrt{d_h+d_h^R}})\textbf{v}_{j,i}^C \tag{18} \\ \textbf{u}_t&=W^O[\textbf{o}_{t,1};\textbf{o}_{t,2};\dots;\textbf{o}_{t,n_h}] \tag{19}\\ \end{align} \\ qtRktRqt,ikt,iot,iut=[qt,1R;qt,2R;;qt,nhR]=RoPE(WQRctQ)=RoPE(WKRht)=[qt,iC;qt,iR]=[kt,iC;ktR]=j=1tSoftmaxj(dh+dhR qt,ikj,i)vj,iC=WO[ot,1;ot,2;;ot,nh](14)(15)(16)(17)(18)(19)
其中 W Q R ∈ R d h R n h × d c ′ W^{QR}\in\mathbb{R}^{d_h^R n_h\times d_c'} WQRRdhRnh×dc W K R ∈ R d h R × d W^{KR}\in\mathbb{R}^{d_h^R\times d} WKRRdhR×d是用于产生解耦query和key的矩阵; RoPE ( ⋅ ) \text{RoPE}(\cdot) RoPE()表示应用RoPE的操作; [ ⋅ ; ⋅ ] [\cdot;\cdot] [;]表示拼接操作。在推理时,解耦的key也需要被缓存。因此,DeekSeek-V2需要的总kv cache包含 ( d c + d h R ) l (d_c+d_h^R)l (dc+dhR)l个元素。

1.4 结论

在这里插入图片描述

MLA能够通过更少的kv cache实现比MHA更好的效果

2. 整体结构

2.1 基础结构

​ 对于FFN层,利用DeepSeekMoE架构,即将专家划分为更细粒度,从而获得更专业化的专家以及获取更准确的知识。在具有相同激活和总专家参数的情况下,DeepSeekMoE能够大幅度超越传统MoE架构。

​ 令 u t \textbf{u}_t ut是第t个token对FFN的输入,那么计算FFN的输出 h t ′ \textbf{h}_t' ht为:
h t ′ = u t + ∑ i = 1 N s FFN i ( s ) ( u t ) + ∑ i = 1 N r g i , t FFN i ( r ) ( u t ) g i , t = { s i , t , s i , t ∈ Topk ( { s j , t ∣ 1 ≤ j ≤ N r } , K r ) 0 , otherwise s i , t = Softmax i ( u t ⊤ e i ) \begin{align} \textbf{h}_t'&=\textbf{u}_t+\sum_{i=1}^{N_s}\text{FFN}_i^{(s)}(\textbf{u}_t)+\sum_{i=1}^{N_r}g_{i,t}\text{FFN}_{i}^{(r)}(\textbf{u}_t) \tag{20}\\ g_{i,t}&=\begin{cases} s_{i,t},& s_{i,t}\in\text{Topk}(\{s_{j,t}|1\leq j\leq N_r\},K_r)\\ 0,&\text{otherwise} \end{cases}\tag{21}\\ s_{i,t}&=\text{Softmax}_i(\textbf{u}_t^\top \textbf{e}_i) \tag{22}\\ \end{align} \\ htgi,tsi,t=ut+i=1NsFFNi(s)(ut)+i=1Nrgi,tFFNi(r)(ut)={si,t,0,si,tTopk({sj,t∣1jNr},Kr)otherwise=Softmaxi(utei)(20)(21)(22)
其中 N s N_s Ns N r N_r Nr表示共享专家和路由专家的数量; FFN i ( s ) ( ⋅ ) \text{FFN}_i^{(s)}(\cdot) FFNi(s)() FFN i ( r ) ( ⋅ ) \text{FFN}_i^{(r)}(\cdot) FFNi(r)()表示第i个共享专家和第i个路由专家; K r K_r Kr表示激活路由专家的数量; g i , t g_{i,t} gi,t是第i个专家的门限值; e i \textbf{e}_i ei是当前层第i个路由专家的中心。

2.2 设备受限路由

​ 设计了一种设备受限路由机制来控制MoE相关的通信成本。当采用专家并行时,路由专家将分布在多个设备上。对于每个token,MoE相关的通信频率与目标专家覆盖的设备数量成正比。由于在DeepSeekMoE中细粒度专家划分,激活专家的数量会很大,因此应用专家并行时,与MoE相关的通信将更加昂贵。

​ 对于DeepSeek-V2,除了路由专家会选择top-K个以外,还会确保每个token的目标专家最多分布在M个设备上。具体来说,对于每个token,先选择包含最高分数专家的M个设备。然后在这M个设备上执行top-K选择。在实践中,当 M ≥ 3 M\geq 3 M3时,设备受限路由能够实现与不受限top-K路由大致一致的良好性能。

2.3 用于负载均衡的辅助loss

​ 不平衡的负载会增加路由坍缩的风险,使一些专家无法得到充分的训练和利用。此外,当使用专家并行时,不平衡的负载降低计算效率。在DeepSeek-V2训练时,设计了三种辅助损失函数用于控制专家级别负载均衡 ( L ExpBal ) (\mathcal{L}_{\text{ExpBal}}) (LExpBal)、设备级别负载均衡 ( L DevBal ) (\mathcal{L}_{\text{DevBal}}) (LDevBal)和通信均衡 L CommBal \mathcal{L}_{\text{CommBal}} LCommBal

专家级均衡loss。专家级均衡loss用于缓解路由坍缩问题:
L ExpBal = α 1 ∑ i = 1 N r f i P i , f i = N r K r T ∑ t = 1 T 1 (Token t selects Expert i) P i = 1 T ∑ t = 1 T s i , t \begin{align} \mathcal{L}_{\text{ExpBal}}&=\alpha_1\sum_{i=1}^{N_r}f_iP_i, \tag{23} \\ f_i&=\frac{N_r}{K_r T}\sum_{t=1}^T\mathbb{1}\text{(Token t selects Expert i)} \tag{24} \\ P_i&=\frac{1}{T}\sum_{t=1}^T s_{i,t} \tag{25} \\ \end{align} \\ LExpBalfiPi=α1i=1NrfiPi,=KrTNrt=1T1(Token t selects Expert i)=T1t=1Tsi,t(23)(24)(25)
其中 α 1 \alpha_1 α1是称为专家级均衡因子的超参数; 1 ( ⋅ ) \mathbb{1}(\cdot) 1()是指示函数; T T T是序列中token的数量。

设备级均衡loss。除了专家级均衡loss以外,也设计了设备级别均衡loss来确保跨设备均衡计算。在DeepSeek-V2训练过程中,将所有的专家划分至 D D D { E 1 , E 2 , … , E D } \{\mathcal{E}_1,\mathcal{E}_2,\dots,\mathcal{E}_D\} {E1,E2,,ED}并在单个设备上部署每个组。设备级均衡loss计算如下:
L DevBal = α 2 ∑ i = 1 D f i ′ P i ′ f i ′ = 1 E i ∑ j ∈ E i f j P i ′ = ∑ j ∈ E i P j \begin{align} \mathcal{L}_{\text{DevBal}}&=\alpha_2\sum_{i=1}^D f_i' P_i'\tag{26} \\ f_i'&=\frac{1}{\mathcal{E}_i}\sum_{j\in\mathcal{E}_i}f_j \tag{27} \\ P_i'&=\sum_{j\in\mathcal{E}_i}P_j \tag{28} \\ \end{align} \\ LDevBalfiPi=α2i=1DfiPi=Ei1jEifj=jEiPj(26)(27)(28)
其中 α 2 \alpha_2 α2是称为设备级均衡因子的超参数。

通信均衡loss。通信均衡loss能够确保每个设备通信的均衡。虽然设备限制路由机制能够确保每个设备发送信息有上限,但是当某个设备比其他设备接收更多的tokens,那么实际通信效率将会有影响。为了缓解这个问题,设计了一种通信均衡loss如下:
L CommBal = α 3 ∑ t = 1 D f i ′ ′ P i ′ ′ f i ′ ′ = D M T ∑ t = 1 T 1 (Token t is sent to Device i) P i ′ ′ = ∑ j ∈ E i P j \begin{align} \mathcal{L}_{\text{CommBal}}&=\alpha_3\sum_{t=1}^D f_i''P_i''\tag{29} \\ f_i''&=\frac{D}{MT}\sum_{t=1}^T\mathbb{1}\text{(Token t is sent to Device i)}\tag{30} \\ P_i''&=\sum_{j\in\mathcal{E}_i}P_j\tag{31} \\ \end{align} \\ LCommBalfi′′Pi′′=α3t=1Dfi′′Pi′′=MTDt=1T1(Token t is sent to Device i)=jEiPj(29)(30)(31)
其中 α 3 \alpha_3 α3是称为通信均衡因子的超参数。设备受限路由机制操作主要确保每个设备至多向其他设备传输MT个hidden states。同时,通信均衡loss用来鼓励每个设备从其他设备接受MT个hidden states。通信均衡loss确保设备间信息均衡交换,实现高效通信。

2.4 Token-Dropping策略

​ 虽然均衡loss的目标是确保均衡负载,但是其并不能严格确保负载均衡。为了进一步缓解由于不均衡导致的计算浪费,在训练时引入了设备级别的token-dropping策略。该方法会先计算每个设备的平均计算预算,这意味着每个设备的容量因子等于1.0。然而,在每个设备上drop具有最低affinity分数的token,直到达到计算预算。此外,确保大约10%的训练序列的token永远不会被drop。这样,可以根据效率要求灵活地决定是否在推理过程中drop token,并确保训练和推理的一致性。

三、预训练

1. 实验设置

1.1 数据构造

​ 数据处理过程同DeepSeek 67B,并进一步扩展数据量和质量。采用与DeepSeek 67B相同的tokenizer。预训练语料包含8.1T tokens,中文token比英文多12%。

1.2 超参数

​ 略

1.3 Infrastructures

​ DeepSeek-V2训练基于HAI-LLM框架。利用16路0气泡流水并行、8路专家并行和ZeRO-1数据并行。考虑到DeepSeek-V2具有相对较少的激活参数,并且对一部分操作进行重计算来节约激活显存,因此可以不使用张量并行,从而降低通信开销。此外,为了进一步提高训练效率,使用专家并行all-to-all通信来重叠共享专家的计算。使用定制化的CUDA核来改善通信、路由算法和不同专家之间融合线性计算。此外,MLA基于改善版本的FlashAttention-2进行优化。

1.4 长上下文扩展

​ 使用YaRN将上下文窗口尺寸从4K扩展至128K。

2. 评估

在这里插入图片描述

四、对齐

SFT。 使用了150万样本的微调数据,其中120万是用于有用性,30万则用于安全性。

强化学习。仍然采用GRPO。

结果
在这里插入图片描述

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

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

相关文章

融资融券最低利率4.0!,融资融券利息计算公式,怎么开通?

融资融券的费率: 融资融券的费率主要包括融资利率和融券费率,这些费率的高低主要取决于证券公司的成本、政策倾向以及投资者的资金量大小。 融资利率方面,多数券商的优惠融资利率在5.5%到7.5%之间,与券商的成本和政策有关。一些…

【车载开发系列】AutoSar中的Port

【车载开发系列】AutoSar中的Port 一. Port概念 AutoSAR 接口定义了 SWC 之间、BSW 模块之间以及 SWC 和 BSW 模块之间交互的信息。AutoSAR 接口通过 SWC 和/或 BSW 模块端口(Port)的形式实现。通过这些端口,SWC 和 BSW 模块之间实现了数据…

Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…

vue3和vite

vue3 1、vue3使如何实现效率提升的 客户端渲染效率比vue2提升了1.3~2倍 SSR渲染效率比vue2提升了2~3倍 1.1、静态提升 解释&#xff1a; 1. 对于静态节点&#xff08;如&#xff1a;<h1>接着奏乐接着舞</h1>&#xff09;&#xff0c;vue3直接提出来了&#xff…

应用层之 HTTP 协议

HTTP 协议 HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些 其他的资源, 比如图片, 视频, 音频等二进制的数据。浏览器获取到网页&#…

了解 Robot Framework :接口自动化测试教程!

开源自动化测试利器&#xff1a;Robot Framework Robot Framework 是一个用于实现自动化测试和机器人流程自动化&#xff08;RPA&#xff09;的开放源代码框架。它由一个名为 Robot Framework Foundation 的组织得到推广&#xff0c;得到了多家领军企业在软件开发中的广泛应用。…

Shopline和Shopify哪个更好?Shopline和Shopify的区别

Shopline和Shopify哪个更好取决于用户面向的市场&#xff0c;面向亚洲市场就更适合有本地化支持的Shopline&#xff0c;而如果希望拓展全球业务&#xff0c;Shopify可能更好。 Shopline和Shopify都是知名的电子商务平台&#xff0c;可以很好的帮助商家搭建和管理在线商店&…

【基础算法总结】二分查找二

二分查找二 1.山脉数组的峰顶索引2.寻找峰值3.寻找旋转排序数组中的最小值4.点名 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.山脉数组的…

Blender雕刻建模_笔刷纹理和顶点绘制

笔刷纹理 主要用于皮肤&#xff0c;纹理的雕刻。 可以修改映射方式来实现不同绘制效果。 用一张纹理来定义笔刷各个点的强度。其中白色为1&#xff0c;黑色为0。 设置笔刷纹理步骤&#xff1a; -新建一套笔刷 -强度&#xff0c;设为0.15&#xff08;可以根据需求修改&#x…

Ubuntu 配置Samba

Ubuntu 配置&#xff1a; 安装 Samba &#xff1a; sudo apt-get install samba添加用户并设置密码&#xff08;可与ubuntu用户密码相同方便记忆&#xff09; sudo smbpasswd -a root这里我设置的密码为123456 sudo vi /etc/samba/smb.conf注意这个共享的目录一定要存在\ho…

高通Android 11/12/13 通过包名设置默认launcher

背景&#xff1a;最近在封装供第三应用系统SDK 接口&#xff0c;遇到一个无法通过包名设置主launcher代码坑所以记录下。 涉及类roles.xml # <!---~ see com.android.settings.applications.defaultapps.DefaultHomePreferenceController~ see com.android.settings.appl…

git常用命令及其ignore文件

1.git本地操作命令 # 查看git的版本 git --version # 生成空的本地仓库 git init # 将文件添加到暂存区 git add 文件 # 将暂存区里的文件提交到本地仓库 git commit -m "描述"2.git远程仓库命令 # 添加远程仓库 git remote add origin http://192.168.1.130:9000/…

asp.net 齿轮加工车间生产管理系统-计算机毕业设计源码56014

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;在现实运用中&#xff0c;为方便用户能够可以随时进行在线…

IT Tools

ChatGpt chatGpt chatgpt vs & vscode工具 Vs Extensions & Remote Development Vs Extensions Remote-SSH VSCode远程连接到Linux并实现免密码登录 Git Graph C cppreference.com cplusplus 镜像站点 用于下载 QT, Ubuntu, 清华镜像站点 CMake Downlo…

C语言详解:数组指针

数组指针是指针 int* p[10] 这是指针数组的写法 &#xff0c;因为【】的优先级比*高&#xff0c; 所以为了解决优先级问题&#xff0c;加&#xff08;&#xff09; int(* p)[10]&arr;//数组的地址要存起来 说明p是指针&#xff08;首先与*结合&#xff09;&#xff0c…

接口自动化-requests库

requests库是用来发送请求的库&#xff0c;本篇用来讲解requests库的基本使用。 1.安装requests库 pip install requests 2.requests库底层方法的调用逻辑 &#xff08;1&#xff09;get / post / put / delete 四种方法底层调用 request方法 注意&#xff1a;data和json都…

网络安全产业的现在时和将来时

由于之前新冠疫情在全球肆虐&#xff0c;网络安全行业面临着不少挑战。例如&#xff0c;企业在被迫数字转型过程中&#xff0c;造成数据泄露威胁加剧。另一方面&#xff0c;攻击者的攻击手段和方式也日趋复杂和成熟&#xff0c;加密勒索和针对新冠疫情的网络钓鱼层出不穷。 基…

玩转Matlab-Simscape(初级)- 06 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真(理论部分2)

** 玩转Matlab-Simscape&#xff08;初级&#xff09;- 06 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真&#xff08;理论部分2&#xff09; ** 目录 玩转Matlab-Simscape&#xff08;初级&#xff09;- 06 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真&am…

togaf培训简介2

1.定义 2.ADM 业务下降期不要瞎折腾&#xff0c;上升期配合业务做一些改革&#xff1f; 项目交付物不能是聊天记录、PPT什么的&#xff0c;最起码是邮件。 3.架构内容框架 或者叫&#xff1a;企业统一体。 包括&#xff1a;企业连续性和解决方案连续性 方案和工具的解耦很大程…

FPGA - GTX收发器-K码 以及 IBERT IP核使用

一&#xff0c;前言 在FPGA - Xilinx系列高速收发器---GTX中详细介绍了GTX的基础知识&#xff0c;以及IP核的调用&#xff0c;下面将补充一下GTX在使用中的高速串行数据流在接收和发送时的控制与对齐&#xff08;K码&#xff09;&#xff0c;以及高速接口GTX&#xff0c;如果G…