【機器學習深度學習】為什么需要分布式訓練?

目錄

前言

一、模型規模爆炸:單卡GPU已難以承載

1.1 問題描述

1.2 面臨挑戰

1.3 解決方案:模型并行 (Model Parallelism)

1.4 類比理解:模型并行

1.5?模型并行的關鍵點

1.6?模型并行(Model Parallelism)的流程圖和說明

1.7?一句話總結

二、計算資源需求龐大:分布式訓練加速進程

2.1 問題描述

2.2 解決方案:數據并行 (Data Parallelism)

2.3 高效的數據并行與優化策略

2.4 類比理解:數據并行

2.5 一句話總結?

三、內存瓶頸:不僅是模型,還有梯度和優化器狀態

3.1 問題描述

3.2?內存壓力來自哪里?

3.3 解決方案:ZeRO優化器與混合并行

3.3 顯存壓力緩解與內存優化技術

3.4 類別理解:ZeRO優化器與混合并行

3.5 場景模擬:從“爆炸”降到“可控”

3.6 一句話總結

四、總結:分布式訓練,是通向大模型時代的基石

4.1 🚀 大模型訓練三大核心挑戰與對應解決方案總覽表

4.2 🚀 大模型訓練三種分布式技術對比表

4.3 🔍?數據并行 vs 模型并行:區別在哪?

4.4 🧠內存優化的具體工作流程


前言

近年來,人工智能取得了驚人的進展,尤其是在自然語言處理領域。從GPT-3到LLaMA,從PaLM到Claude,這些參數量動輒數百億甚至上千億的大模型正在推動智能應用的邊界。然而,在這些成果背后,有一個關鍵的技術支撐功不可沒——分布式訓練

本文將從模型規模、計算資源和內存瓶頸三個方面,深入解析為什么大模型的訓練離不開分布式訓練。


一、模型規模爆炸:單卡GPU已難以承載

1.1 問題描述

現代大模型的參數規模已經遠遠超出單張GPU的存儲能力。例如:

  • GPT-3 擁有 1750 億個參數

  • LLaMA-2 的最大版本參數超過 650 億

  • GPT-4 推測模型規模更是成倍增長

以NVIDIA A100 40GB GPU為例,它能存儲的模型參數量大約在100億左右(僅存儲模型參數,還未計算梯度、優化器狀態等)。因此,一個完整的GPT-3模型根本無法放進一張顯卡中,哪怕是最強的顯卡。


1.2 面臨挑戰

存儲需求超出單卡能力
一塊高端 GPU(如 NVIDIA A100 80GB)的顯存容量通常在 40GB 到 80GB 之間,而一個千億級參數的模型,僅參數本身就可能占用數百 GB 的存儲空間(以 FP16 格式計算,每個參數約占 2 字節)。此外,訓練過程中還需要存儲梯度、優化器狀態(如 Adam 優化器的動量和方差),這些額外數據進一步加劇了存儲壓力。單卡 GPU 顯然無法容納如此龐大的數據量。


1.3 解決方案:模型并行 (Model Parallelism)

分布式訓練通過將模型參數分布到多個 GPU 或計算節點上,解決了單卡顯存不足的問題。例如,模型并行技術將模型的不同層或部分分配到不同設備上,每個設備只負責計算一部分模型。這種方式不僅突破了單卡顯存的限制,還能有效利用多設備的計算能力。

  • 將模型切分為多個部分,分別部署在不同GPU上

  • 每張卡只負責計算一部分的前向和反向傳播

  • 常見的策略包括張量并行(Tensor Parallelism)和流水線并行(Pipeline Parallelism)


1.4 類比理解:模型并行

想象一下:你家買了一個超大沙發,太長太重,一個人根本搬不動。怎么辦?只能喊幾個朋友一起來搬。

每個人負責搬沙發的一部分,配合好就能順利搬進屋子里

這就是“模型并行”的本質!

?🤖 類比到深度學習模型:

  • 一個超大模型就像這個“超長沙發”;

  • 一張顯卡就像一個人;

  • 模型太大,一張卡裝不下(內存不足);

  • 那就把模型切成幾部分,分別放在不同的顯卡上,每張顯卡只負責“自己那一段”的計算。

比如:

顯卡編號負責的模型部分
GPU1輸入層和前幾層 Transformer
GPU2中間幾層 Transformer
GPU3后幾層 Transformer 和輸出層

它們就像一個流水線,數據從頭到尾傳一遍,一起合作完成一次前向傳播和反向傳播


1.5?模型并行的關鍵點

  • 切模型:把大模型按層或按矩陣拆分;

  • 傳中間結果:不同顯卡之間要傳遞計算結果,就像搬沙發時要互相配合;

  • 節省顯存:每張卡只負責一部分內容,顯存壓力大大減輕;

  • 犧牲通信效率:因為多張卡之間要傳數據,速度可能比只用一張卡慢一些。


1.6?模型并行(Model Parallelism)的流程圖和說明

流程圖解析:

1.輸入數據流動

  • 數據從左側進入第一個 GPU(如 GPU 1)

  • GPU 1 計算自己負責的模型前半部分(例如神經網絡的前幾層)

  • 生成中間結果傳遞給下一個 GPU

2.接力式計算

  • GPU 2 接收中間結果,計算模型中間部分(例如中間層)

  • 再將新的中間結果傳遞給 GPU 3

3.輸出結果

  • GPU 3 計算模型后半部分(例如最后幾層)

  • 生成最終輸出(如預測結果)

關鍵特點:

  • 模型被切分:單個大模型被拆解成多個子部分(如圖中的前半/中間/后半)

  • 設備協作:每個 GPU 只存儲和計算模型的一小部分

  • 順序依賴:前一個 GPU 的計算結果是下一個 GPU 的輸入(類似流水線)

  • 適用場景:模型過大無法放入單張顯卡時(如百億參數大模型)

💡?對比數據并行
數據并行:每張 GPU 有完整模型副本,各自處理不同數據
模型并行:所有 GPU?合力拼成一個完整模型,共同處理同一份數據

實際應用中常結合兩種技術(如 3D 并行),但模型并行核心思想始終是:拆分模型,設備協作


    1.7?一句話總結

    模型并行 = 模型太大 → 切開分給多張顯卡一起算,就像搬不動的大沙發找人幫忙抬

    如果你覺得“數據并行”是“大家各自訓練一份模型”,那“模型并行”就是“大家合力訓練一個模型的不同部分”。


    二、計算資源需求龐大:分布式訓練加速進程

    2.1 問題描述

    大模型的訓練不僅需要存儲海量參數,還需要進行海量的計算操作。以 GPT-3 為例,其訓練過程需要數萬 GPU 小時的計算量,單卡訓練可能需要數年時間才能完成。分布式訓練通過并行計算顯著加速了這一過程。

    即使模型能勉強塞進顯存,訓練過程也極其耗時。例如:

    • GPT-3訓練耗時:355 GPU 年(假設使用NVIDIA V100)

    • 單卡訓練將耗費數年時間,完全不可行


    2.2 解決方案:數據并行 (Data Parallelism)

    • 將訓練數據劃分成多個子集,每個子集在不同GPU上并行訓練

    • 每個GPU維護一個完整模型副本,僅處理自己的數據子集

    • 每一輪訓練后,通過梯度同步保持模型一致性

    這種方式可以大大提升訓練吞吐量,是目前工業界最常用的分布式訓練范式之一。


    2.3 高效的數據并行與優化策略

    1. 數據并行與批量處理
      分布式訓練中最常見的方式是數據并行,即將訓練數據分成多個批次,分配到不同的 GPU 上并行計算梯度,然后通過梯度同步(如 AllReduce 操作)更新模型參數。這種方式能夠充分利用多設備的計算能力,顯著縮短訓練時間。例如,假設單卡訓練一個模型需要 100 天,使用 100 張 GPU 的數據并行可以將時間縮短到理論上的 1 天。

    2. 分布式優化
      分布式訓練還可以結合專門的優化算法,如 ZeRO(Zero Redundancy Optimizer),通過分片存儲優化器狀態和梯度,進一步減少內存開銷,同時保持高效的計算性能。這種方法在大規模分布式訓練中尤為重要,能夠在數百甚至數千 GPU 上實現高效協作。


    2.4 類比理解:數據并行

    🍰 數據太多吃不完?那就“分蛋糕”

    想象一下你和幾個朋友面對一個超大的蛋糕(訓練數據),要在一小時內吃完。

    你一個人吃不過來,但如果把蛋糕切成幾塊,大家一起吃,是不是就快多了?

    這就是數據并行的思路!

    🤖 類比到訓練大模型:

    • 模型是一個“廚師”,大家都用同一個食譜(模型結構一樣);

    • 數據是蛋糕,太多吃不完;

    • 那就:每張顯卡(每個朋友)復制一份相同的模型,然后用不同的訓練數據來“喂”這個模型;

    • 吃(訓練)完一輪后,大家把學到的經驗(梯度)合并在一起同步更新

    舉個例子:

    假設你有4張GPU,每個 batch 是128條數據:

    • 把128條數據平均分成4份,每張GPU處理32條;

    • 每張卡獨立前向傳播 + 反向傳播,得到自己的梯度;

    • 然后一起匯總梯度,大家同步更新模型參數;

    • 所有卡上的模型參數保持一致。

    ?? 優點:

    • 簡單易實現(PyTorch、DeepSpeed、FSDP都支持);

    • 吞吐量大大提升(多個GPU同時干活);

    • 各GPU模型結構一樣,便于管理。


    2.5 一句話總結?

    數據并行 = 每個顯卡都用同一個模型,各自處理不同的數據,然后同步學習成果

    就像一個班級每個人用同樣的教材做不同的題,做完后互相討論答案,然后統一修正知識點。


    三、內存瓶頸:不僅是模型,還有梯度和優化器狀態

    3.1 問題描述

    除了模型參數,訓練過程中的內存瓶頸還來自于梯度和優化器狀態。以 Adam 優化器為例,每個參數需要存儲對應的梯度和兩個優化器狀態變量(一階動量和二階動量)。對于一個千億參數的模型,這些數據的內存需求可能達到參數本身的數倍。

    除了模型參數本身,訓練過程中還需要存儲:

    • 梯度信息:反向傳播中臨時產生的值

    • 優化器狀態:如Adam優化器需要為每個參數維護一階矩估計和二階方差估計

    • 激活緩存:用于反向傳播的中間激活值

    這些都會迅速耗盡顯存。以GPT-3為例,僅優化器狀態就需要占用模型參數兩到三倍的顯存。


    3.2?內存壓力來自哪里?

    訓練大模型時顯存不夠,主要是因為需要同時存:

    內容舉例說明
    模型參數模型的“記憶體”,比如權重矩陣
    梯度反向傳播中計算出來的誤差值
    優化器狀態比如 Adam 優化器要記錄動量信息
    激活值(中間輸出)計算過程中暫存的結果,用于反向傳播時用

    這些加起來,占用顯存遠超你想象。比如:

    訓練一個65B參數的模型,可能需要超過400GB顯存!


    3.3 解決方案:ZeRO優化器與混合并行

    • ZeRO (Zero Redundancy Optimizer):通過切分優化器狀態、梯度、參數等方式分布在多卡上,大幅降低顯存開銷

    • 混合并行:結合數據并行、模型并行和流水線并行,實現更高效的資源利用


    3.3 顯存壓力緩解與內存優化技術

    1. 顯存的動態分配
      在單卡訓練中,顯存需要同時容納模型參數、梯度、優化器狀態以及激活值(中間計算結果)。當模型規模過大時,激活值可能占用大量顯存,尤其是在處理大批量數據或長序列數據時。分布式訓練通過流水線并行(Pipeline Parallelism)將模型分成多個階段,依次在不同設備上計算,減少了單設備的顯存壓力。

    2. 內存優化技術
      分布式訓練還引入了多種內存優化技術,如激活值重計算(Checkpointing)和顯存卸載(Offloading)。激活值重計算通過在反向傳播時重新計算前向傳播的中間結果,減少顯存占用;顯存卸載則將部分數據(如優化器狀態)存儲到 CPU 或 NVMe 存儲器中,進一步緩解 GPU 顯存壓力。


    3.4 類別理解:ZeRO優化器與混合并行

    🍲 比喻:顯卡就像一個鍋,煮飯的時候鍋不夠大就會溢出來

    想象你在煮一大鍋火鍋:

    • 你有好多材料(模型參數、梯度、優化器狀態)要放進去;

    • 鍋(顯卡顯存)太小了,一下全放進去肯定會溢鍋

    • 所以你得分批煮精簡材料,或者換個大鍋

    • 但現實中,大顯存的顯卡又貴又難搞,所以更好的辦法是——優化放材料的方式

    這就是我們說的**“內存瓶頸”問題**。

    🎯 解決方案:怎么讓鍋看起來更大?

    ? 方法1:ZeRO優化器(Zero Redundancy Optimizer)

    就像大家合伙煮火鍋,每個人只負責一種材料:

    • GPU1 保存模型參數的一部分

    • GPU2 保存梯度的一部分

    • GPU3 保存優化器狀態的一部分

    最終拼在一起就能完成訓練,但每個GPU的負擔減輕很多

    這就是 ZeRO 的核心思想:分而治之,減少重復


    ? 方法2:梯度檢查點(Gradient Checkpointing)

    這就像:不記住每一道菜怎么做,反正能重新做就行。

    • 中間的激活值不保存了,需要時再重新計算;

    • 換空間為時間,顯存省了,但訓練稍慢一點;

    • 非常適合大模型。


    ? 方法3:混合精度訓練(FP16 / BF16)

    就像食材切小一點,更容易煮熟:

    • 把浮點精度從32位降到16位;

    • 內存占用立減一半,速度還可能變快;

    • 現在已經是標準操作(NVIDIA A100,H100支持很好)。


    3.5 場景模擬:從“爆炸”降到“可控”

    1、實驗模型設定

    我們假設有一個如下的 Transformer 模型:

    • 模型參數量:65B(650億)

    • 使用的優化器:Adam

    • 默認使用 FP32(32位精度)

    • Batch Size:32

    • 使用 GPU:A100 40GB


    2、各組成部分的顯存占用(單位:GB)

    組成部分占用顯存(FP32)說明
    模型參數260GB65B × 4B(每個參數用4字節存儲)
    梯度(grad)260GB每個參數對應一個梯度
    優化器狀態(Adam)520GBm 和 v,各需要各1份(兩倍模型參數大小)
    激活值~100GB跟 Batch Size 和層數相關,粗略估算
    總計1140GB+無優化時遠超單張 GPU 顯存(40GB)

    是不是非常夸張?顯存直接爆炸。


    3、引入優化:ZeRO Stage 3 + 混合精度 + 梯度檢查點

    優化項優化后占用估算降低原因說明
    模型參數切片(ZeRO)↓到約 10–20GB參數分布到多卡上,每卡只保留一部分
    梯度切片(ZeRO)↓到約 10–20GB只存自己負責那部分梯度
    優化器狀態切片(ZeRO)↓到約 20GBm 和 v 也切片,負擔減輕
    混合精度(FP16/BF16)總體再減半每個變量只占 2 字節,精度仍可接受
    梯度檢查點激活值省一半或更多訓練時不保留中間激活,反向傳播再算一遍
    總計(單卡)20–30GB 左右控制在 A100 40GB 的范圍內,訓練可行

    4、整體對比

    優化級別顯存使用(單卡估算)是否可訓練?
    無優化(純FP32)>1000GB? 完全爆炸
    僅混合精度(FP16)~500–600GB? 爆炸
    加ZeRO(Stage 1/2)~100–200GB?? 需8–16張A100協作
    全部優化(ZeRO-3+FP16+CP)20–30GB? 單卡可運行

    ? 結論:

    原本訓練 65B 模型需要上千GB顯存,優化后可以壓縮到幾十GB,甚至單張 A100 就能運行,這就是分布式訓練 + 內存優化的威力!

    #


    3.6 一句話總結

    內存瓶頸 = 顯卡顯存太小,裝不下訓練中需要的數據,得想辦法“分攤、刪減、壓縮”來省空間。

    📌 類比總結:顯存壓力的三座大山

    問題比喻解決方法
    模型太大鍋太小煮不下材料模型并行 / ZeRO分片
    激活值太多太多中間步驟要暫存梯度檢查點
    數據太精細食材太重太大混合精度 / 量化

    四、總結:分布式訓練,是通向大模型時代的基石

    分布式訓練不是“錦上添花”,而是大模型訓練的必要條件。它解決了硬件限制下的三大核心問題:

    1. 模型太大放不下?→ 模型并行

    2. 計算太慢來不及?→ 數據并行

    3. 內存不夠撐不住?→ ZeRO優化與混合并行

    隨著模型規模的不斷增長,分布式訓練也在持續進化,從早期的簡單數據并行,到今天集成張量并行、流水線并行、ZeRO、異構計算等技術的復雜系統。

    未來的AI,將建立在更強大、更智能的分布式訓練架構之上。而理解它的意義,是每一位AI工程師邁向未來的重要一步。


    4.1 🚀 大模型訓練三大核心挑戰與對應解決方案總覽表

    問題類別通俗比喻原因描述解決方案(技術名)效果說明
    模型太大模型并行沙發太長一個人抬不動→找多人合力抬模型參數總量太大,單張顯卡裝不下模型結構模型并行(張量并行、流水線并行)每張卡只存模型的一部分,減輕顯存壓力
    數據太多數據并行蛋糕太大一個人吃不完→分給多人一起吃數據量太大,單卡訓練太慢,GPU利用率低數據并行(DDP, FSDP 等)每張卡處理不同數據,吞吐量提升,訓練更快
    內存撐不住內存優化火鍋太大鍋裝不下→分批煮、切菜小點不僅有模型參數,還有梯度、優化器狀態、激活值等占顯存ZeRO 優化器、混合精度、梯度檢查點多卡切片 + 精度優化 + 激活重算,將顯存從 TB 級降到幾十 GB

    4.2 🚀 大模型訓練三種分布式技術對比表

    特點模型并行數據并行內存優化(ZeRO / 混合精度等)
    目標模型太大,卡裝不下數據太多,卡處理不過來參數 + 梯度 + 優化器狀態太大,顯存撐不住
    方法拆模型,分到多張卡復制模型,分數據到多張卡切片參數/梯度/狀態,+ 混合精度 + 激活重算
    顯存壓力每張卡只存部分模型每張卡都存完整模型顯存需求大幅下降,可從TB降至幾十GB
    通信開銷卡之間需要頻繁通信(中間結果)每輪訓練后同步梯度高,需同步梯度、優化器狀態、參數(尤其ZeRO-3)
    實現復雜度實現復雜(如 Megatron-LM)實現相對簡單(如 DDP/FSDP)中等至復雜,需使用 DeepSpeed/FSDP 等框架
    典型場景超大模型,單卡裝不下結構(如GPT-3)大數據集,訓練加速(如BERT預訓練)超大模型顯存爆炸,需要強力優化

    4.3 🔍?數據并行 vs 模型并行:區別在哪?

    項目數據并行模型并行
    分擔內容每張卡處理不同數據子集,模型完全一致每張卡處理模型的一部分,模型被拆開了
    每張卡的模型一模一樣,完整復制每張卡只負責部分結構
    適合場景模型能放下,但數據太多 / 訓練太慢模型太大,單卡放不下
    通信方式每輪訓練后同步梯度(少量通信)每個前/反向過程都需要頻繁通信
    例子BERT、RoBERTa 預訓練GPT-3、PaLM、LLaMA 65B/70B

    數據并行是“復制模型、分數據”;
    模型并行是“拆模型、分卡算”。?


    4.4 🧠內存優化的具體工作流程

    內存優化的核心是:把模型訓練過程中占顯存的部分,盡量切、壓、懶加載,主要有三種手段:

    1?? ZeRO:把顯存負擔“拆開裝”

    問題:
    原始做法下,每張卡都保存完整的:

    • 模型參數

    • 梯度

    • 優化器狀態(例如 Adam 的動量信息)

    ZeRO 做的事:

    ZeRO 階段拆的內容
    Stage 1切分優化器狀態(比如 Adam 的 m 和 v)
    Stage 2進一步切分梯度
    Stage 3連模型參數都切分,只在需要時加載

    這樣每張卡只負責一部分,整體顯存占用成倍下降

    📌 額外補充: DeepSpeed 和 FSDP(Fully Sharded Data Parallel)都實現了類似機制。


    2?? 混合精度訓練(FP16 / BF16)

    問題:
    默認使用 FP32(32位浮點),占內存大,速度慢。

    優化方法:

    • FP16(16位浮點)BF16 表示參數、激活、梯度

    • 內存使用幾乎減半

    • 訓練速度更快

    • 精度在大多數任務中幾乎沒有影響(甚至有時更穩)


    3?? 梯度檢查點(Gradient Checkpointing)

    問題:
    訓練過程中會緩存很多激活值(中間結果),用于反向傳播。占了大量顯存。

    優化方法:

    • 只保存關鍵激活值,其他的到了反向傳播時再重新計算(反正能算出來)

    • 顯存開銷換成計算時間

    • 顯著節省內存,尤其適合超深模型(如上百層 Transformer)


    🧩 三者配合后的效果是:

    項目優化前優化后(全部組合)
    模型參數每卡存全部分布到各卡,僅存一部分
    梯度每卡存全部分布存儲或重計算
    優化器狀態每卡存全部分布存儲或低精度表示
    激活值所有中間層都存部分存,部分重算
    數據精度FP32FP16 / BF16
    總顯存占用(單卡)上百GB甚至超1TB20~30GB內可運行(A100)

    模型并行是“模型太大,切開算”;
    數據并行是“數據太多,分批算”;
    內存優化是“顯存太小,精打細算”。

    ?

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/diannao/93492.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/diannao/93492.shtml
    英文地址,請注明出處:http://en.pswp.cn/diannao/93492.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    二十八、【Linux系統域名解析】DNS安裝、子域授權、緩存DNS、分離解析、多域名解析

    DNS服務深度解析:緩存、分離與多域名管理一、DNS服務架構全景DNS核心組件關系DNS服務器類型對比二、基礎DNS服務配置1. Bind9核心配置文件2. 區域文件結構解析區域文件記錄類型表三、子域授權與分層解析子域授權原理子域配置流程1. 父域配置2. 子域配置遞歸與迭代查…

    【LeetCode】前綴表相關算法

    目錄1、介紹2、核心概念【1】前綴和后綴【2】最長公共前后綴(LPS)3、相關算法題【1】找出字符串中第一個匹配項的下標【2】重復的子字符串1、介紹 前綴表是一種在字符串匹配算法(特別是KMP算法)中使用的數據結構,用于…

    (六) Spring AI 1.0版本 + 千問大模型+RAG

    上篇文章我們大概講了一下向量模型的知識&#xff0c;本篇文章&#xff0c;我們將會通過RAG實戰的形式&#xff0c;來感受一下RAG。 項目準備 pom.xml 這里我們需要引入向量庫和pdf相關的包<dependency><groupId>org.springframework.ai</groupId><artifa…

    Spring Boot與Mybatis-Plus集成SQLServer的完整指南

    本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;本項目旨在演示如何將SQLServer與Spring Boot以及Mybatis-Plus框架進行整合&#xff0c;打造一個高效穩定的后端服務。詳細介紹涉及了數據庫連接、實體類定義、Mapper接口創建、Service層業務邏輯編寫、Control…

    【工作筆記】判斷一條方法需不需要事務/AOP

    ① 看注解方法/類上有 Transactional → 需要事務&#xff0c;必須走代理方法/類上有自定義 AOP 注解&#xff08;如 Log、Retry、Cacheable 等&#xff09;→ 需要代理什么都沒有 → 幾乎肯定不需要示例需求Transactional public void generateDailyTask(...)? 需要事務publi…

    Unity 的UI動畫調節

    在游戲開發中&#xff0c;精美的UI動畫能極大提升用戶體驗。Unity提供了強大的動畫系統&#xff0c;讓開發者可以輕松創建流暢的界面動效。本文將介紹UI動畫的核心概念、制作流程和實用技巧。一、核心動畫組件Animation窗口 - 可視化創建關鍵幀動畫Animator組件 - 控制動畫狀態…

    26考研11408數據結構

    數據結構 1.緒論1.1.1數據結構的基本概念 數據數據元素&#xff1a;數據的基本單位&#xff0c;一個數據元素由多個數據項組成&#xff0c;數據項是組成數據元素不可分割的最小單位數據對象&#xff1a;具有相同性質的數據元素的集合&#xff0c;是數據的一個子集數據類型&…

    Solar月賽(應急響應)——攻擊者使用什么漏洞獲取了服務器的配置文件?

    某某文化有限公司的運維小王剛剛搭建服務器發現cpu莫名的異常的升高請你幫助小王排查一下服務器。 文章目錄事件介紹事件1&#xff1a;幫助小王找到是什么漏洞?事件2&#xff1a;系統每天晚上系統都會卡卡的幫小明找到問題出在了那&#xff1f;事件3&#xff1a;惡意域名是什么…

    高頻面試題

    1.HashMap的底層原理JDK1.7版本之前&#xff0c;HashMap的底層數據結構是數組鏈表&#xff0c;HashMap通過哈希算法會將元素的key映射待數組的的槽位(Bucket)。如果多個鍵映射到同一個槽位&#xff0c;就會以鏈表的形式存儲在同一個槽位上。但是鏈表的查詢的復雜度O(n),所有沖突…

    魚皮項目簡易版 RPC 框架開發(四)

    本文為筆者閱讀魚皮的項目 《簡易版 RPC 框架開發》的筆記&#xff0c;如果有時間可以直接去看原文&#xff0c; 1. 簡易版 RPC 框架開發 前面的內容可以筆者的前面幾篇筆記 魚皮項目簡易版 RPC 框架開發&#xff08;一&#xff09; 魚皮項目簡易版 RPC 框架開發&#xff08;二…

    力扣-79.單詞搜索

    題目鏈接 79.單詞搜索 class Solution {int m, n;public boolean exist(char[][] board, String word) {m board.length;n board[0].length;boolean[][] visited new boolean[m][n];// 遍歷網格中的每個單元格作為搜索起點for (int i 0; i < m; i) {for (int j 0; j …

    LabVIEW的To More Specific Class功能說明

    ?To More Specific Class 是 LabVIEW 中用于控件引用類型轉換的關鍵函數。可將通用 GObject 引用&#xff0c;精準轉為 Listbox、TreeControl 等特定控件類引用&#xff0c;讓開發者能調用專屬屬性&#xff08;如獲取列表行數&#xff09;&#xff0c;實現對不同控件類的差異化…

    Ubuntu20.04安裝和配置Samba實現Win11下共享文件夾

    Samba是在Linux和UNIX系統上實現 SMB / CIFS 協議的開源軟件&#xff0c;主要用于局域網內的文件共享和打印服務。Samba通過SMB/CIFS協議實現跨平臺資源共享&#xff0c;支持匿名用戶和本地用戶訪問共享目錄&#xff0c;客戶端主要為Windows系統。其核心進程包括&#xff1a; ?…

    設計模式(八)結構型:橋接模式詳解

    設計模式&#xff08;八&#xff09;結構型&#xff1a;橋接模式詳解橋接模式&#xff08;Bridge Pattern&#xff09;是 GoF 23 種設計模式中的結構型模式之一&#xff0c;其核心價值在于將抽象部分與實現部分分離&#xff0c;使它們可以獨立變化。它通過“組合”而非“繼承”…

    【邊緣填充】——圖像預處理(OpenCV)

    目錄 1 邊界復制&#xff08;BORDER_REPLICATE&#xff09; 2 邊界反射&#xff08;BOEDER_REFLECT&#xff09; 3 邊界反射101&#xff08;BORDER_REFLECT101&#xff09; 4 邊界常數&#xff08;BORDER_CONSTANT&#xff09; 5 邊界包裹&#xff08;BORDER_WRAP&#xf…

    git同步到github出錯-幾個問題-一天晚上(2025.7.29)

    訪問不了github 代理和加速器都正常&#xff0c;但是就是訪問不了這個網站嘗試過幾種方法都不行&#xff0c;后面突然可以了。 之后發現一種情況會不行&#xff1a;同時開啟 同步不了 http連接 https://blog.csdn.net/m0_73972962/article/details/146198392 一堆問題 ssh連接才…

    Redis未授權訪問的利用的幾種方法原理以及條件

    一、redis通過定時任務反彈shell1.利用條件&#xff1a;需要能夠登錄redis數據庫&#xff0c;并且redis以root用戶運行。同時/var/spool/cron目錄要具有寫和執行權限。二、Redis主從getshell1.原理&#xff1a;在Redis 4.x之后&#xff0c;Redis新增了模塊功能&#xff0c;通過…

    DNF 與 YUM 的區別詳解:從 CentOS 7 到 CentOS 9 的演進

    &#x1f365; DNF 與 YUM 的區別詳解&#xff1a;從 CentOS 7 到 CentOS 9 的演進標簽&#xff1a;CentOS、YUM、DNF、Linux 包管理、系統升級、兼容性 適用版本&#xff1a;CentOS 7、CentOS 8、CentOS 9&#x1f9e9; 一、背景介紹 CentOS 中使用的包管理工具是 RedHat 系列…

    mp核心功能

    條件構造器mybatisPlus支持各種復雜的where條件, 滿足日常的開發wrapper類就是條件構造器提供了很多子類條件構造器的用法&#xff1a;QueryWrapper和LambdaQueryWrapper通常用來構建select、delete、update的where條件部分UpdateWrapper和LambdaUpdateWrapper通常只有在set語句…

    pcm,msd調制解調仿真

    PCM&#xff08;脈沖編碼調制&#xff09;和MSD&#xff08;多符號差分&#xff09;調制解調系統的MATLAB仿真代碼。 PCM (脈沖編碼調制) 仿真 %% PCM調制解調仿真 clear; clc; close all;% 參數設置 Fs 8000; % 采樣頻率 (Hz) t_duration 0.02; % 信號持續時間 (秒…