【论文阅读】VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning
VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning -- VCD-FL:可验证可抵抗共谋攻击的动态联邦学习
- 来源
- 背景介绍
- 相关工作
- 本文贡献
- 预备知识
- 系统模型
- 威胁模型
- 具体实现
- 初始化
- 本地训练
- 梯度加密
- 承诺生成
- 插值优化
- 密文聚合
- 聚合结果验证
- 梯度解密
- 结果验证
- 恶意行为检测规则
- 动态验证支持
- 总结
来源
论文名称 | VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning |
---|---|
链接 | 2023 TIFS |
作者 | Sheng Gao; Jingjie Luo; Jianming Zhu; Xuewen Dong; Weisong Shi |
背景介绍
传统的联邦学习存在一些问题:
- 用户隐私泄露
- 服务器伪造聚合结果
- 客户端与服务器进行共谋 :窃取隐私、跳过验证
- 客户端在训练过程掉线
相关工作
本文贡献
- 抵抗共谋的验证 。本文提出了一种轻量级的承诺方案,利用不可逆梯度变换来保护客户的隐私。为了防止服务器使用伪造的聚合结果以通过验证,本文设计了一种基于优化拉格朗日插值的高效验证机制。与仅考虑抵抗共谋的隐私保护的现有工作相比, VCD-FL 还可以实现抵抗共谋的验证。
- 识别恶意行为 。尽管现有研究可以检测聚合结果是否被伪造,但它们对揭示服务器恶意行为的帮助非常有限。为了使安全预防措施更具针对性,本文建立了恶意行为检测规则,这可以帮助用户判断服务器是否涉及共谋攻击以通过验证,或者它只是一个懒惰的服务器返回伪造的聚合结果以节省计算开销。
- 支持联邦动态 。考虑到由于网络异常、崩溃和断电等原因,一些客户可能会离线,本文将提出的验证机制与 Shamir 门限秘密共享方案 结合起来,以容忍一定数量的客户掉线。
- 降低计算和通信开销 。本文通过设计一种新的方法来生成拉格朗日插值的插值点,从而减少了 VFL 中的计算和通信开销。此外,本文通过引入梯度压缩算法进一步减少了计算开销。
预备知识
-
拉格朗日插值
拉格朗日插值是指一种可以通过所有给定数据点准确构造多项式的方法。给定有 n 个点的集合 { ( x i , y i ) } i = 1 n \{(x_i,y_i)\}_{i=1}^n {(xi,yi)}i=1n ,我们可以使用这 n 个点拟合一个唯一的 n-1 阶多项式:L ( x ) = ∑ i = 1 n y i L i ( x ) L(x)=\sum_{i=1}^n y_iL_i(x) L(x)=∑i=1nyiLi(x)
其中基础多项式 L i ( x ) L_i(x) Li(x)定义如下:
L i ( x ) = ∏ j = 1 , j ≠ i n x − x j x i − x j , i ∈ { 1 , 2 , . . . , n } L_i(x)= \prod_{j=1,j\ne i}^{n} \frac{x-x_j}{x_i-x_j},i \in \{1,2,...,n\} Li(x)=∏j=1,j=inxi−xjx−xj,i∈{1,2,...,n}
显然, L i ( x ) L_i(x) Li(x)满足以下关系:
L i ( x j ) = { 1 , j = i 0 , j ≠ i L_i(x_j)=\begin{cases} 1,j=i \\ 0,j \ne i \end{cases} Li(xj)={1,j=i0,j=i
也就是说,当我们拟合了一个拉格朗日多项式后, L ( x ) L(x) L(x) 依然是一个 y i y_i yi关于 x i x_i xi的函数:
L ( x i ) = y i L(x_i)=y_i L(xi)=yi
系统模型
- TA :主要负责系统初始化,使用PRG作为伪随机生成器,并向客户端分发 VCD-FL 使用的参数,包括一对种子、一维平方矩阵、伪随机向量序列和整数序列。它被认为是值得信赖的,不会参与联邦训练,也不会泄露相关的私人信息。
- 客户端 :具有某种共同利益的客户可以一起参与特定模型。每个客户首先从聚合服务器(AS)下载全局参数,然后在其拥有的私有数据集上执行本地模型训练,最后将分组的拉格朗日多项式的 系数 作为密文上传到AS。一旦AS返回聚合结果,每个客户都可以验证其正确性,并决定是否接受或拒绝该更新。
- 聚合服务器(AS) :负责密文的收集和聚合,然后将每次迭代的聚合结果分发给客户端进行验证。
威胁模型
- TA:完全可信。
- 客户端:诚实但好奇。在训练期间对其他客户端的数据感兴趣;与服务器共谋来帮助服务器通过(pass)验证。
- 聚合服务器:恶意的。它对客户端的数据感兴趣;服务器可能会为了节省计算资源而伪造聚合结果,返回错误的聚合;服务器可能会与客户端共谋,来通过(pass)客户端的验证机制。将服务器按恶意程度分为两类:
- 弱攻击模型。具有弱能力的攻击服务(AS)仅充当一个懒惰的服务器,只是聚合部分收集的梯度以节省计算开销。它会发起推理攻击以确定原始训练数据集中是否包含某些特定数据,甚至重构敏感属性。
- 强攻击模型。具有强能力的攻击服务(AS)会尽力隐藏对聚合结果的修改。它会与一些客户端共谋,伪造聚合结果以欺骗其他客户端。更糟的是,它可能通过使用精心设计的聚合结果引诱客户端泄露更多私人信息。
具体实现
初始化
- 为了减少初始化的开销,VCD-FL 中的TA直接生成两个客户端 P i P_i Pi 和 P j P_j Pj 之间的一对种子 s i , j s_{i,j} si,j ,用于梯度掩码。
- 为了应对客户端掉线问题以实现动态,TA首先为 P i P_i Pi 生成一个额外的随机种子 ρ i \rho_i ρi,然后使用沙米尔门限秘密分享方案将 ρ i \rho_i ρi 的份额分发给每个客户端。
- 为了提高插值精度,利用 P R G ( ρ i ) PRG(\rho_i) PRG(ρi) 生成的用于验证的序列集 A i \mathbb{A}_i Ai 应该被标准化:
- VFL 方案将客户端的梯度拆分,而VCD-FL是将梯度分组,具体如下:每个维度为 d d d 的梯度 g i g_i gi 被分成 ⌈ d / M ⌉ ⌈ d /M ⌉ ⌈d/M⌉ 个组,每组 M M M 个梯度元素。如果最后一组中的梯度元素数量少于 M M M ,使用 0 0 0 填充其余部分。
- 为了使 VCD-FL 可验证,TA 需要生成一个随机整数序列 Z = { a i ∣ i = 1 , 2 , ⋅ ⋅ ⋅ , ⌈ d M ⌉ ( M + 1 ) } \mathbb{Z} = \{a_i |i = 1, 2, · · · , ⌈ d M ⌉(M + 1)\} Z={ai∣i=1,2,⋅⋅⋅,⌈dM⌉(M+1)} 作为插值点集,以及一个大小为 M × M M × M M×M 的方阵 U U U 用于承诺生成。
伪代码如下:
本地训练
梯度加密
每个客户端 P i P_i Pi 训练结束得到梯度 g i g_i gi ,然后使用加密算法:
- 首先使用单遮掩协议来盲化每个客户端 P i P_i Pi 的本地梯度 g i g_i gi :
- 为了抵御共谋攻击,防止服务器跳过验证,将盲化后的梯度 g i ′ g_i' gi′ 按相同的策略进行分组:每个客户端 P i P_i Pi 生成第 k k k 组的拉格朗日插值集合,其中前 M M M 个点为 { ( a ( k − 1 ) ( M + 1 ) + j , g i ′ ( ( k − 1 ) M + j ) ) ∣ j = 1 , 2 , . . . , M } \{ (a_{(k-1)(M+1)+j} , g_i'((k-1)M+j)) |j=1,2,...,M\} {(a(k−1)(M+1)+j,gi′((k−1)M+j))∣j=1,2,...,M} ,第 ( M + 1 ) (M + 1) (M+1) 个点为 ( a k ( M + 1 ) , A i ( k ) ) (a_{k(M+1)}, A_i(k)) (ak(M+1),Ai(k)),其中 k ∈ 1 , 2 , ⋅ ⋅ ⋅ , ⌈ d / M ⌉ k \in {1, 2, · · · , ⌈ d/M ⌉} k∈1,2,⋅⋅⋅,⌈d/M⌉。因此,函数 f i , [ k ] f_{i,[k]} fi,[k] 是在第 k k k 组拉格朗日插值集合上计算的:
其中:
- 最后, P i P_i Pi 将系数向量 B i B_i Bi 作为梯度密文上传给服务器,
其中每个 B i , [ k ] B_{i,[k]} Bi,[k] 表示从 f i , [ k ] ( x ) f_{i,[k]}(x) fi,[k](x) 中提取的这 M + 1 M + 1 M+1 个系数,按 x x x 的次数降序排列:
承诺生成
为了验证聚合结果,实现验证机制,本文使用不可逆变换的轻量级承诺方案。
- 先将梯度 g i g_i gi 进行分组,每组包含 M M M 个元素, g i = ( g i , [ 1 ] , g i , [ 2 ] , . . . , g i , ⌈ d / M ⌉ ) g_i=(g_{i,[1]},g_{i,[2]},...,g_{i,\left \lceil d/M \right \rceil }) gi=(gi,[1],gi,[2],...,gi,⌈d/M⌉) ,其中 g i , [ k ] = ( g i ( k − 1 ) M + 1 , g i ( ( k − 1 ) M + 2 ) , . . , g i ( k M ) ) T g_{i,[k]}=(g_i(k-1)M+1, g_i((k-1)M+2),..,g_i(kM))^T gi,[k]=(gi(k−1)M+1,gi((k−1)M+2),..,gi(kM))T
- 然后 P i P_i Pi 对 g i , [ k ] g_{i,[k]} gi,[k] 进行承诺:
其中 U U U 是一个 M × M M×M M×M的不可逆矩阵,以确保梯度隐私,而 g i , [ k ] g_{i,[k]} gi,[k] 是第 k k k 个梯度组的 M M M 维列向量。 - 随后, P i P_i Pi 将 C i = ( C i , [ k ] ) k = 1 ⌈ d / M ⌉ C_i=(C_{i,[k]})_{k=1}^{\left \lceil d/M \right \rceil } Ci=(Ci,[k])k=1⌈d/M⌉广播 ,并在上传 B i B_i Bi 到 AS 之前接收其他客户端的承诺。
插值优化
- 为了减少插值频率而不影响模型准确性,引入深度梯度压缩来获得优化的梯度。
- G i G_i Gi 的初始值为0,使用动量因子为 0.5 来扩张。
- 随后,每个客户端 P i P_i Pi 从 G i G_i Gi 中选择绝对值最大的前 p p% p 元素放在梯度 g i g_i gi 的相同位置,其余元素在 g i g_i gi 中被设置为 0。为了避免信息丢失, G i G_i Gi 中每个未被选择的元素将在本地累积,直到其绝对值足够大。 G i G_i Gi 中被选择的元素将被重置为 0。
- 显然,优化后的梯度 g i g_i gi 将大大减少插值计算的开销。因为那些满足 g i ′ ( j ) = 0 g_i' (j) = 0 gi′(j)=0 的插值点不会对 B i , [ k ] B_{i,[k]} Bi,[k] 产生影响, P i P_i Pi 只需要计算 g i ′ ( j ) ≠ 0 g_i' (j) \ne 0 gi′(j)=0 时的 L j , [ k ] ( x ) L_{ j,[k]}(x) Lj,[k](x) 。
伪代码见算法2:
密文聚合
-
AS 只有接收到所有 B i B_i Bi 后才会进行聚合操作 (这里产生了强假设问题)
-
AS 计算 B B B :
-
聚合后服务器将 B B B 发送给所有客户端。请注意,由于密文 B i B_i Bi 是通过 g i ′ g_i' gi′ 和 A i A_i Ai 计算得出的, VCD-FL 可以确保原始梯度 g i g_i gi 不被推断,只要 AS 只与不超过 N − 2 N − 2 N−2 个客户端进行共谋。
伪代码如下:
聚合结果验证
梯度解密
- 为了获得梯度的聚合结果, P i P_i Pi 首先以 B [ k ] B[k] B[k] 为基础重构第 k k k 组的聚合插值函数 f [ k ] ( x ) f_{[k]}(x) f[k](x):
其中 B [ k ] ( m ) B_{[k]}(m) B[k](m) 表示 B [ k ] B_{[k]} B[k] 中的第 m m m 个元素,且 k ∈ { 1 , 2 , . . . , ⌈ d / M ⌉ } k \in \{1, 2, . . . , ⌈ d/M ⌉\} k∈{1,2,...,⌈d/M⌉}。
- 然后, P i P_i Pi 通过将整数序列 Z Z Z 作为输入,重构梯度的聚合结果 g g g 与 f [ k ] ( x ) f_{[k]}(x) f[k](x) ,并去除插入的序列 A i A_i Ai 和在 ⌈ d / M ⌉ ⌈ d/M ⌉ ⌈d/M⌉ 组中的填充0。也就是说,
其中 k ∈ { 1 , 2 , . . . , ⌈ d / M ⌉ } k \in \{1, 2, . . . , ⌈ d/M ⌉ \} k∈{1,2,...,⌈d/M⌉}
结果验证
为了验证聚合结果 g g g 的正确性,同时保护梯度隐私,基本思路是判断以下方程是否成立:
其中 R R R 是一个 d d d 维向量,然而,这样的验证方法并不能抵御共谋,这是因为在这种情况下, R R R 不是随机生成的,那些共谋的恶意客户端可以巧妙地设计 R R R 或操纵 R ⋅ g i R·g_i R⋅gi,以帮助恶意AS通过验证。
- 本文在先前生成的承诺基础上设计了一种高效的验证机制。具体来说, P i P_i Pi 首先向其他客户端发送 A i A_i Ai 和一个行向量 R i = ( r i , 1 , r i , 2 , . . . , r i , M ⋅ ⌈ d / M ⌉ ) R_i = (r_{i,1}, r_{i,2}, . . . , r_{i,M·⌈ d/M ⌉}) Ri=(ri,1,ri,2,...,ri,M⋅⌈d/M⌉) 。然后, P i P_i Pi 可以计算 R R R 为
- 每个半诚实客户端同时广播 R i R_i Ri 且不参与共谋,所以 R R R 是不可预测的。
- P i P_i Pi 以与梯度 g i g_i gi 相同的方式对 R R R 进行分组,并计算一个随机行向量 S S S 作为验证系数向量:
- 其中第 k k k 个组向量 S [ k ] S_{[k]} S[k] 被计算为 S [ k ] = R [ k ] ⋅ U S_{[k]} = R_{[k]}·U S[k]=R[k]⋅U, U U U 是相同的 M × M M × M M×M 大小的方阵。
- 为了实现高效验证, P i P_i Pi 并行计算每个组的校验和 v i , k v_{i,k} vi,k 。对于第 k k k 组, v i , k v_{i,k} vi,k 可以计算为
- 最后, P i P_i Pi 计算 V i V_i Vi 为 V i = ∑ k = 1 ⌈ d / M ⌉ v i , k V_i = \sum_{k=1}^{⌈ d/M⌉ } v_{i,k} Vi=∑k=1⌈d/M⌉vi,k,并发布 A i = { A i ( k ) } k = 1 ⌈ d / M ⌉ A_i = \{ A_i (k)\}_{k=1}^{⌈ d/M⌉} Ai={Ai(k)}k=1⌈d/M⌉ 以供验证。
恶意行为检测规则
- f [ k ] ( a ( M + 1 ) k ) f_{[k]}(a(M+1)k) f[k](a(M+1)k) 和 g ( m ) = f [ ⌈ m / M ⌉ ] ( a m + ⌈ m / M ⌉ − 1 ) g(m) = f_{[⌈m/M⌉}](a_{m+⌈m/M⌉−1}) g(m)=f[⌈m/M⌉](am+⌈m/M⌉−1) 是通过来自AS的返回密文 B B B 计算得出的,而 S ( m ) S(m) S(m) 表示 S S S 中的第 m m m 个元素。简而言之,Eq(18)可以用作验证聚合结果正确性的第一步,而Eq(19)则进一步验证AS是否与客户端共谋。因此,VCD-FL定义了以下规则:
- 规则 1:如果Eq (18) 和Eq (19) 同时成立,则 AS 被认为是可信的。
- 规则 2:如果Eq (18) 和Eq (19) 同时不成立,则 AS 被认为是一个弱攻击者。
- 规则 3:如果Eq (18) 成立而Eq (19) 不成立,则 AS 被认为是一个强攻击者。
验证算法伪代码如下:
动态验证支持
- 由于网络异常、崩溃和停电等原因,某些客户在训练过程中可能会掉线。现有的方案在梯度聚合之前根据双重掩蔽协议减去掩蔽。然而,他们是在假设任何客户端不会同时透露同一客户的在线和离线份额的基础上保证了梯度隐私。在 VCD-FL 中,这将是不可行的,因为某些客户端可能会与AS串通。如果没有超过 N − 2 N-2 N−2 个客户端与AS串通, VCD-FL 可以保证隐私。
- 在 VCD-FL 中, f [ k ] ( a k ( M + 1 ) ) f_{[k]}(a_k(M+1)) f[k](ak(M+1)) 和 g g g 是使用 AS 返回的 B B B 进行计算的,这不受离线客户端的影响。
- 梯度承诺 C i C_i Ci 在聚合之前分发,而 R R R 可以使用来自在线客户端的随机向量进行计算 , S S S 和 V i V_i Vi 的计算过程不会受到影响。
- 使用 Shamir 门限秘密共享方案以 T -out-of-N 的形式共享 P i P_i Pi 的 ρ i \rho_i ρi。每个客户端 P j ∈ P P_j \in \mathbb{P} Pj∈P 获得一个份额 ρ i , j \rho_{i,j} ρi,j 。这使得当 P i P_i Pi 退出时 ρ i \rho_i ρi 能够被恢复,即使在验证过程中 P i P_i Pi 退出,只要剩余的在线客户端的数量不小于 T T T , 也可以恢复。
总结
- 这篇论文在先前工作(VerfyNet、VeriFL、VFL)的基础上,优化了TA的参数分发,去掉了密钥协商的过程,可以一定程度抵御客户端之间的共谋,也可以减少通信开销;VCD-FL又对拉格朗日插值进行了优化,从VFL的梯度拆分优化为梯度分组,这样就减少了插值的次数,减少了多项式的最高次数;同时VCD-FL还引入深度梯度压缩技术,使用本地累计+tok-k技术来选择重要的参数,保留一些重要性低的参数,减少了用于插值的数量,即减少了通信和计算开销。
- VCD-FL的动态性是指允许一定数量的客户端在训练过程中掉线,如果将假设修改为允许新的客户端中途加入联邦学习训练,那么要怎么实现呢?
- 我们可以将 TA 只在系统开始时初始化参数改为每一轮初始化新的参数,这样就能支持新客户端的加入,但是这样无疑增加了通信开销。。。
相关文章:
【论文阅读】VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning
VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning -- VCD-FL:可验证可抵抗共谋攻击的动态联邦学习 来源背景介绍相关工作本文贡献预备知识 系统模型威胁模型具体实现初始化本地训练梯度加密承诺生成插值优化 密文聚合聚合结果验证梯度解密结果验证恶意…...
浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索
安科瑞吕梦怡 18706162527 摘 要:分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上,利用太阳能进行发电的一种可再生能源利用方式,与传统的大型集中式光伏电站相比,分布式光伏发电具有更灵活…...
记一次数据库连接 bug
整个的报错如下: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Metho…...
STM32 FreeRTOS 信号量
信号量的简介 reeRTOS中的信号量是一种用于任务间同步和资源管理的机制。信号量可以是二进制的(只能取0或1)也可以是计数型的(可以是任意正整数)。信号量的基本操作包括“获取”和“释放”。 比如动车上的卫生间,一个…...
计算机网络 | 什么是公网、私网、NAT?
关注:CodingTechWork 引言 计算机网络是现代信息社会的基石,而网络通信的顺畅性和安全性依赖于有效的IP地址管理和网络转换机制。在网络中,IP地址起到了标识设备和进行数据传输的核心作用。本文将详细讨论公网IP、私网IP以及NAT转换等网络技…...
学技术学英文:通过jmeter命令行工具生成聚合报告文件到csv文件
单词 汉语意思 音标 aggregate 聚合 /ˈɡrɪɡeɪt/ command-line 命令行 /kəˈmnd laɪn/ distribution 分布 /ˌdɪstrɪˈbjuːʃn/ extractor 提取器 /ɪkˈstrktər/ granulation 细分 /ˌɡrnjuˈleɪʃn/ jmeter JMeter(软件࿰…...
数据库开发支持服务
文章目录 前言适用产品服务范围前提条件责任矩阵交互项目 服务流程交付件项目完成标志 前言 数据库开发支持服务是为了达成客户业务系统开发、测试、上线运行提供的具体技术支撑,内容包括数据库开发指导、性能调优、第三方平台对接支持、应用对接与上线支持等。数据…...
【SQL 中的分组查询与联合查询详解】
文章目录 SQL 中的分组查询与联合查询详解1. GROUP BY分组查询1.1 语句格式1.2 示例说明1.2.1 分别查询哥哥组和弟弟组的英语成绩总和1.2.2 查询哥哥组的所有成绩总和 2. 联合查询2.1 内连接2.1.1 语法格式2.1.2 执行过程 2.2 外连接2.2.1 左外连接2.2.2 右外连接 2.3 自连接2.…...
如何提高自动化测试覆盖率和效率
用ChatGPT做软件测试 在现代软件开发中,自动化测试已经成为保证软件质量的重要手段。然而,在实践中,自动化测试的覆盖率和效率常常受到限制,导致潜在缺陷未能及时发现或测试资源浪费。因此,提升自动化测试的覆盖率和效…...
Vue3 nginx 打包后遇到的问题
前端vite文件配置 export default defineConfig({plugins: [vue(),DefineOptions()],base:./,resolve:{alias:{:/src, //配置指向src目录components:/src/components,views:/src/views}},server:{// host:0.0.0.0,// port:7000,proxy:{/api:{target:xxx, // 目标服务器地址 &am…...
【PCIe 总线及设备入门学习专栏 5.3.2 -- PCIe 枚举与 PCIe PHY firmware 的区别与联系】
文章目录 OverviewPCIe 枚举与PCIe PHY固件的区别与联系1. PCIe 枚举2. PCIe PHY固件3. 区别4. 联系 举例说明实例场景 1:服务器启动 PCIe 网卡的过程实例场景 2:PCIe 热插拔设备的调试 Overview 本文将详细介绍 PCIe 枚举与 PCIe PHY firmware 的区别与…...
电动汽车超级充电设备与车辆之间的通讯协议对27930-2015国标的修改记录
左侧为团体标准 右侧为国标 1.CHM SPN 2600 数据修改为 团标数据: 0x534331 ,国标数据:0x000101 2.BRM SPN 2565 数据修改为 团标数据: 0x53…...
案例分析一
张某(10多年IT工作经验)应聘一家国企单位,面试官(技术副主管)面试时问了些无关痛痒的问题,谈到薪资时强调我权限范围内的数额就那么多,再多就需要走申请流程进行操作了。 没几天入职后…...
2.5G PoE交换机 TL-SE2109P 简单开箱评测,8个2.5G电口+1个10G光口(SFP+)
TPLINK(普联)的万兆上联的2.5G网管交换机TL-SE2109P简单开箱测评。8个PoE 2.5G电口,1个万兆SFP上联口。 2.5G交换机 TL-SE2420 简单开箱评测,16个2.5G电口4个10G光口(SFP):https://blog.zeruns.com/archives/837.html…...
mysql存电话号码应该用int还是string类型
在MySQL中,存储电话号码一般建议使用**STRING 类型**(通常是 VARCHAR),而不是 INT 类型,原因如下: 1. 电话号码不是数字用于计算的值 电话号码本质上是一个标识符,不需要进行数学运算。如果用…...
解决本地运行MR程序访问权限问题
文章目录 1. 提出问题2. 解决问题2.1 临时解决方案2.2 永久解决方案 3. 小结 1. 提出问题 运行DeduplicateIPsDriver类,抛出如下异常: 该错误信息表明在尝试运行 DeduplicateIPsDriver 类时,遇到了 HDFS(Hadoop 分布式文件系统&a…...
Codeforces Round 997 (Div. 2) A~C
今天的封面是水母猫猫和佩佩,原图在这里,记得关注画师夏狩大大 至此,天鹅完成了连续四场比赛在四个不同比赛上四次分的壮举!(ABC388,CodeChef169,牛客月赛109,CF997) 这场…...
3. Go函数概念
在 Go 语言中,函数被称为一等公民(First-Class Citizens),意味着函数可以像其他数据类型(如整数、字符串、结构体等)一样作为变量传递、返回、赋值等。这使得 Go 在编程时具备了极大的灵活性。 1、函数概念…...
python-44-嵌入式数据库SQLite和DuckDB
文章目录 1 SQLite1.1 世界上最流行的数据库1.1 SQLite简介1.2 插入语句1.3 查询数据1.4 更新数据1.5 删除数据2 DuckDB2.1 DuckDB简介2.2 DuckDB与Python结合使用2.2.1 创建表2.2.2 分析语句2.2.3 导出为parquet文件2.3 Windows中使用DuckDB3 参考附录1 SQLite Python的一个特…...
使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。
在上一篇博客中主要是使用SpringBootApache POI实现了BOM物料清单Excel表格导出,详见以下博客: Spring Boot Apache POI 实现 Exc()el 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并&#…...
R语言的并发编程
R语言的并发编程 引言 在现代计算中,如何有效地利用计算资源进行数据处理和分析已成为一个重要的研究方向。尤其在大数据时代,数据量的急剧增加让单线程处理方式显得力不从心。为了解决这一问题,各种编程语言都开展了并发编程的研究和应用。…...
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目 项目概述项目视图效果一、侧边栏相关代码(一)HTML代码(二)css代码 二、登录页面(一)HTML代码(二)css代码…...
PixArt--alpha笔记
PixArt-α 是华为发布的文生图模型。 训练策略分解:设计三个不同训练步骤,分别优化像素依赖、文本图像对齐和图像审美质量。高效T2I transformer:将 cross-attention融入 Diffusion Transformer (DiT)注入文本条件,简化计算密集的…...
内网渗透测试工具及渗透测试安全审计方法总结
1. 内网安全检查/渗透介绍 1.1 攻击思路 有2种思路: 攻击外网服务器,获取外网服务器的权限,接着利用入侵成功的外网服务器作为跳板,攻击内网其他服务器,最后获得敏感数据,并将数据传递到攻击者࿰…...
java工程学习步骤
1、安装idea,安装maven,mysql数据库 2、创建一个多maven的springboot的项目,可以正常启动以及可以访问web页面 3、引入日志使用slflogbck进行日志打印,同时封装统一的日志打印工具,idea安装maven analyzer工具&#…...
使用Flask和Pydantic实现参数验证
使用Flask和Pydantic实现参数验证 1 简介 Pydantic是一个用于数据验证和解析的 Python 库,版本2的性能有较大提升,很多框架使用Pydantic做数据校验。 # 官方参考文档 https://docs.pydantic.dev/latest/# Github地址 https://github.com/pydantic/pyd…...
LabVIEW 蔬菜精密播种监测系统
在当前蔬菜播种工作中,存在着诸多问题。一方面,播种精度难以达到现代农业的高标准要求,导致种子分布不均,影响作物的生长发育和最终产量;另一方面,对于小粒径种子,传统的监测手段难以实现有效监…...
统信UOS系统安装redis
1、yum引入redis yum install redis2、创建日志文件夹 mkdir -p /var/log/redis mkdir -p /var/lib/redis3、添加用户 useradd redis -s /usr/sbin/nologin4、文件夹赋权限 chown -R redis:root /var/log/redis chown redis:root /etc/redis.conf chown -R redis:root /var…...
课程如何抵御脑腐的冲击
课程需要引导学生逐步形成深度思考的能力,才有可能抵御‘Brain Rot’,否则都不会取得任何改善。 一步步失去的思维力,需要一步步引导恢复,类似康复训练。这是一个非常长期而艰辛但又十分有意义和有价值的工作。 这是一篇类似工作转…...
2.4 如何学习表示学习(Representation Learning)
如何学习表示学习(Representation Learning) 学习表示学习(Representation Learning)是理解和掌握机器学习、深度学习以及人工智能的关键一步。表示学习主要关注从原始数据中提取有效的特征或表示,使得模型能够高效处理和理解复杂的数据。以下是一些系统的方法,帮助你一…...
介绍下常用的前端框架及时优缺点
以下是一些常用的前端框架及其优缺点介绍: React • 优点 • 组件化架构:可构建可复用的UI组件,提高开发效率和组件可维护性。 • 虚拟DOM:高效更新页面,减少直接操作DOM的性能开销。 • 灵活性和可扩展性…...
Rust 猜数字游戏:从 0 到 1 的完整实现与深入解析
一、项目概述 1.1 为什么选择“猜数字”? “猜数字”是编程入门中非常经典的一个项目。它看似简单,却能很好地展示: 输入输出 (I/O):提示用户输入并读取内容。随机数:每次运行生成一个随机值,保证游戏的…...
使用C语言实现栈的插入、删除和排序操作
栈是一种后进先出(LIFO, Last In First Out)的数据结构,这意味着最后插入的元素最先被删除。在C语言中,我们可以通过数组或链表来实现栈。本文将使用数组来实现一个简单的栈,并提供插入(push)、删除(pop)以及排序(这里采用一种简单的排序方法,例如冒泡排序)的操作示…...
职场的三个阶段及其应对规划:以前端开发工程师为例
作为职场人士,特别是 IT 开发工程师,职业生涯的发展路径往往伴随着不同的挑战与机遇。一般而言,职场生涯可以划分为三个阶段:找工作阶段、有工作阶段以及职业转型阶段。每个阶段都有其特定的特征和应对策略,下面我将从…...
【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南
前言 随着自然语言处理(NLP)技术的快速发展,越来越多的企业和个人开发者寻求在本地环境中运行大型语言模型(LLM),以确保数据隐私和提高响应速度。Ollama 作为一个强大的本地运行框架,支持多种先…...
蓝桥杯训练—斐波那契数列
文章目录 一、题目二、解析三、代码 一、题目 求100以内的斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列 ,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入&…...
TensorFlow DAY3: 高阶 API(Keras,Estimator)(完)
TensorFlow 作为深度学习框架,当然是为了帮助我们更便捷地构建神经网络。所以,本次实验将会了解如何使用 TensorFlow 来构建神经网络,并学会 TensorFlow 构建神经网络的重要函数和方法。 知识点 Keras 顺序模型Keras 函数模型Keras 模型存储…...
复健第二天之[MoeCTF 2022]baby_file
打开题目在线环境可以看到: 感觉要用伪协议去求,但是我们并不知道flag的位置,这里我选择用dirsearch去扫一下: 最像的应该就是flag.php了 于是就构建payload: **?filephp://filter/convert.base64-encode/resource…...
【QT用户登录与界面跳转】
【QT用户登录与界面跳转】 1.前言2. 项目设置3.设计登录界面3.1 login.pro参数3.2 界面设置3.2.1 登录界面3.2.2 串口主界面 4. 实现登录逻辑5.串口界面6.测试功能7.总结 1.前言 在Qt应用程序开发中,实现用户登录及界面跳转功能是构建交互式应用的重要步骤之一。下…...
【docker踩坑记录】
docker踩坑记录 踩坑记录(持续更新中.......)docker images 权限问题 踩坑记录(持续更新中…) docker images 权限问题 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.s…...
【Azure 架构师学习笔记】- Azure Function (2) --实操1
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建,接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…...
豆包MarsCode:构造特定数组的逆序拼接
问题描述 思路分析 1. 数组的组成: 我们要根据 i 的不同值拼接出不同长度的子数组。对于每个 i 从 1 到 n,我们要把数字从 n 逆序到 i 拼接成一个子数组。 例如,当 i 1 时,拼接 [n, n-1, ..., 1]。当 i 2 时,拼接 …...
14-美妆数据分析
前言 美妆数据分析可以帮助企业更好地理解市场趋势、客户偏好和产品表现 import pandas as pd import numpy as np 一、数据清洗 data pd.read_csv(rC:\Users\B\Desktop\美妆数据.csv,encodinggbk) data.head()data.info()data data.drop_duplicates(inplaceFalse) data.r…...
新阿里云买服务器配置需手动配置80端口
新买阿里云服务器需手动配置80,端口才可以访问nginx CentOS系统 安装nginx 1. 安装 Nginx yum install nginx 2. 启动 Nginx 服务 systemctl start nginx 3. 修改默认网页 cd /usr/share/nginx/ echo "666" >index.html cat index.html 访问ngin最后…...
Mysql--实战篇--连接泄漏问题(什么是连接泄漏,未关闭SqlSession,长事务处理,连接池管理等)
1、什么是连接泄漏(Connection Leak)? 连接泄漏是指应用程序未能正确关闭数据库连接,导致连接池中的可用连接逐渐减少,最终耗尽所有连接。连接泄漏可能会导致新的请求无法获得连接,进而引发服务中断。 连…...
【ESP32】ESP-IDF开发 | WiFi开发 | AP模式 + 基站连接例程
1. 简介 前面一篇讲了WiFi的基站模式,演示了怎么编程连接AP,所以这一篇讲一讲AP模式,ESP32作AP,让其他的设备连接自己。 1.1 DHCP 这里需要补充一个知识点——DHCP服务器。当基站连接一个AP时,会被分配一个IP…...
Ubuntu升级Linux内核教程
本文作者CVE-柠檬i: CVE-柠檬i-CSDN博客 本文使用的方法是dpkg安装,目前版本为5.4.0-204,要升级成5.8.5版本 下载 下载网站:https://kernel.ubuntu.com/mainline/ 在该网站下载deb包,选择自己想要升级的版本,这里是5…...
关于AWS网络架构的思考
目录: AWS概述 EMR Serverless AWS VPC及其网络 关于AWS网络架构的思考 在AWS K8S中部署的业务,有不同的流量路径。 流量进入 客户端请求 普通的客户端流量流向从前到后是: 客户端公司网关(endpoint)业务的Endpoint ServiceLoad Balancers(监听80和…...
Pandas库的常用内容归纳
Pandas 是一个强大的 Python 数据分析库,提供了大量用于数据处理和分析的功能。以下是一些 Pandas 库中常用的功能: 数据创建和操作 Series 和 DataFrame:创建一维的 Series 和二维的 DataFrame 对象。数据导入:从 CSV、Excel、…...
【错误解决方案记录】spine3.8.75导出的数据使用unity-spine3.8插件解析失败报错的解决方案
报错信息 Exception: Unsupported skeleton data, please export with a newer version of Spine. Spine.SkeletonBinary.ReadSkeletonData (System.IO.Stream file) (at Assets/Spine/Runtime/spine-csharp/SkeletonBinary.cs:132) Spine.Unity.Editor.AssetUtility.AddRequi…...