GPTQ - 生成式預訓練 Transformer 的精確訓練后壓縮

GPTQ - 生成式預訓練 Transformer 的精確訓練后壓縮

flyfish

曾經是 https://github.com/AutoGPTQ/AutoGPTQ
現在是https://github.com/ModelCloud/GPTQModel

對應論文是 《Accurate Post-Training Quantization for Generative Pre-trained Transformers》

生成式預訓練Transformer模型(如GPT或OPT)憑借在復雜語言建模任務中的突破性性能脫穎而出,但也因其極高的計算和存儲成本而備受關注。具體而言,由于其龐大的模型規模,即使是高精度的大型GPT模型進行推理也可能需要多塊高性能GPU,這極大限制了這類模型的實際應用。盡管目前有通過模型壓縮緩解這一壓力的研究,但現有壓縮技術的適用性和性能受限于GPT模型的規模與復雜度。

針對這一挑戰,本文提出了一種基于近似二階信息的新型一次性權重量化方法——GPTQ。該方法兼具高精度和高效性:

  • 能夠在約4個GPU小時內完成對1750億參數GPT模型的量化
  • 將權重位寬壓縮至3-4位/權重
  • 與未壓縮基線相比僅產生可忽略的精度損失

相較于此前提出的一次性量化方法,我們的方法在保持精度的同時將壓縮增益提高了一倍以上,首次實現了在單塊GPU上運行1750億參數模型進行生成推理。此外,我們還證明了該方法在極端量化場景下仍能保持合理精度,可將權重量化至2位甚至三進制水平。實驗表明:

  • 相比FP16精度,使用高端GPU(NVIDIA A100)可實現約3.25倍的端到端推理加速
  • 使用更具成本效益的GPU(NVIDIA A6000)可實現約4.5倍的推理加速

該技術突破為在資源受限設備上部署超大規模語言模型開辟了新路徑。

GPTQModel 最初是 AutoGPTQ 的重大重構版本,如今已發展為功能全面的替代方案。它擁有更簡潔的 API 接口、支持最新模型架構、具備更快的推理速度和更高質量的量化效果。
公開測試數據及 ModelCloud 內部測試均表明,GPTQ 在 4 位量化領域展現出卓越性能:其模型質量恢復能力與生產級推理速度(令牌延遲及每秒請求數)均達到或超越同類技術。在真實生產部署場景中,GPTQ 實現了模型質量與推理速度的完美平衡,是工業級大模型部署的理想選擇

pip 安裝 gptqmodel

pip install -v --no-build-isolation gptqmodel 
或者
pip install -v --no-build-isolation gptqmodel[vllm,sglang,bitblas,ipex,auto_round]

命令

  • -v–verbose:

    • 這個選項表示“詳細模式”。使用 -v 可以讓 pip 輸出更詳細的日志信息,幫助用戶了解安裝過程中的每一個步驟。這對于調試安裝問題非常有用。
  • –no-build-isolation:

    • 默認情況下,pip 使用 build isolation(構建隔離),這意味著在構建過程中會創建一個臨時的、獨立的環境來安裝構建所需的依賴項。這個選項禁用了這種隔離,允許你在全局環境中使用已有的依賴項進行構建。這在某些情況下可以幫助解決依賴沖突的問題。
  • gptqmodel[vllm,sglang,bitblas,ipex,auto_round]:

    • 這一部分指定了要安裝的包及其額外的可選特性或模塊。
    • gptqmodel: 這是要安裝的主要包的名字。
    • 方括號 [...] 內的內容指定了該包的一些額外功能或插件,這些被稱為“extras”:
      • vllm: 表示安裝支持 vLLM 推理的額外組件。
      • sglang: 支持 SGLang 推理的額外組件。
      • bitblas: 支持 Microsoft/BITBLAS 格式的額外組件。
      • ipex: Intel IPEX 加速量化/推理的支持。
      • auto_round: 提供 Intel/AutoRound 替代 GPTQ 推理兼容的量化方法。

GPTQModel特性:

  1. 生態兼容性
    深度集成Hugging Face生態(Transformers/Optimum/Peft主分支),支持vLLM和SGLang推理框架,可直接加載FORMAT.GPTQ格式模型,實現跨平臺開發與部署。

  2. 模型支持廣度
    覆蓋30+主流模型架構,包括多模態模型(Ovis VL/Qwen2-VL)、商業模型(Hymba/IBM Granite)及開源模型(Llama系列/GLM等),滿足多樣化業務需求。

  3. 全平臺適配
    支持Linux/MacOS/Windows系統,兼容Nvidia CUDA、AMD ROCm、Intel XPU/MPS及Apple Silicon等異構計算環境,實現CPU/GPU全場景加速。

  4. 動態量化引擎
    獨創模塊級動態量化控制,可對每個神經網絡層獨立配置量化參數(如4位/8位混合量化),或完全跳過敏感模塊,在性能與精度間實現最優平衡。

  5. 硬件加速方案
    針對Intel平臺深度優化,支持AVX/AMX/XMX指令集及Arc GPU加速;通過IPEX框架實現CPU推理優化,結合BITBLAS動態編譯技術提升計算效率。

  6. 工程化保障
    采用100% CI單元測試覆蓋,確保量化質量穩定性;支持模型分片加載與哈希校驗,保障大模型部署的可靠性;通過lm_head量化進一步降低顯存占用。

  7. 性能優化成果
    在Llama 3.1 8B模型量化中實現45%打包速度提升,OPT模型PPL計算加速50%;結合Intel AutoRound技術,可提供與GPTQ兼容的替代量化方案。

該工具通過算法創新與工程優化,為企業級大模型部署提供了完整解決方案,在保持模型精度的同時顯著降低算力成本,推動生成式AI技術的工業化落地。
-

基本思想

GPTQ的基本思想是將模型權重矩陣 W W W 量化為低比特表示 W ^ \hat{W} W^,使得量化后的模型在特定的校準數據集上與原始模型的輸出盡可能接近。具體而言,它通過最小化量化誤差來找到最優的量化參數。

量化過程

1. 選擇校準數據集

從訓練數據或驗證數據中選取一小部分樣本作為校準數據集。這部分數據用于在量化過程中估計量化誤差,通常不需要太多樣本,因為主要目的是捕捉模型的統計特性。

2. 逐層量化

GPTQ通常采用逐層量化的方式,即對模型中的每一層分別進行量化操作。以線性層為例,假設輸入為 X X X,權重矩陣為 W W W,輸出為 Y Y Y,則有 Y = X W Y = XW Y=XW。在量化時,我們要找到一個量化后的權重矩陣 W ^ \hat{W} W^,使得 Y Y Y X ^ W ^ \hat{X}\hat{W} X^W^ 之間的差異盡可能小,其中 X ^ \hat{X} X^ 是輸入 X X X 的量化表示(在某些情況下,輸入也可以不進行量化)。

3. 量化誤差的定義

為了衡量量化誤差,GPTQ通常使用均方誤差(Mean Squared Error, MSE)作為損失函數。對于一個線性層,量化誤差可以表示為:
L = 1 N ∑ i = 1 N ∥ X i W ? X i W ^ ∥ 2 2 L = \frac{1}{N} \sum_{i=1}^{N} \| X_i W - X_i \hat{W} \|_2^2 L=N1?i=1N?Xi?W?Xi?W^22?
其中, N N N 是校準數據集中樣本的數量, X i X_i Xi? 是第 i i i 個樣本的輸入, ∥ ? ∥ 2 \|\cdot\|_2 ?2? 表示L2范數。

4. 求解最優量化參數

為了找到最優的量化后的權重矩陣 W ^ \hat{W} W^,GPTQ采用了一種基于梯度的優化方法。具體來說,它通過迭代地更新量化參數,使得損失函數 L L L 最小化。在每次迭代中,根據當前的量化參數計算損失函數的梯度,并使用梯度下降等優化算法更新量化參數。

5. 量化方式

GPTQ可以采用對稱量化或非對稱量化。對稱量化假設權重的分布關于零對稱,而非對稱量化則允許權重的分布具有非零的均值。非對稱量化通常可以提供更高的量化精度,但計算復雜度也相對較高。

優化技巧

  • 分塊量化:為了降低計算復雜度,GPTQ通常將權重矩陣劃分為多個小塊,對每個小塊分別進行量化。這樣可以減少每次迭代中需要處理的參數數量,提高量化效率。
  • 快速二階近似:在計算損失函數的梯度時,GPTQ采用了一種快速二階近似方法,避免了直接計算Hessian矩陣,從而顯著降低了計算復雜度。

快速二階近似

二階信息在優化中的作用

在優化問題里,目標是最小化一個損失函數(例如GPTQ中衡量量化誤差的均方誤差)。梯度下降是常見的優化方法,它只使用了損失函數的一階導數(梯度)信息,根據梯度的反方向更新參數。然而,一階方法在某些情況下收斂速度較慢。二階方法會考慮損失函數的二階導數(Hessian矩陣),能提供關于函數曲率的信息,從而更準確地預估函數的局部形狀,通常可以讓優化過程收斂得更快。

傳統二階方法的問題

對于大規模的神經網絡模型,直接計算Hessian矩陣并利用它進行優化存在很大的挑戰。Hessian矩陣的規模是參數數量的平方,這會導致極高的存儲需求和計算復雜度,在實際應用中往往不可行。

GPTQ的快速二階近似

GPTQ采用了快速二階近似方法來解決上述問題,避免了直接計算完整的Hessian矩陣。

原理

它通過對Hessian矩陣進行近似和簡化,只計算和使用與優化相關的部分信息。具體而言,GPTQ利用了權重矩陣的結構特點和量化問題的特性,在每一步迭代中,對當前塊的權重計算一個近似的二階信息。這個近似過程基于一些合理的假設和簡化,使得計算量大幅降低。

操作方式
  • 分塊處理:將大的權重矩陣分成多個小塊,對每個小塊分別進行量化和優化。在處理每個小塊時,只考慮該小塊對應的局部二階信息,而不是整個模型的全局Hessian矩陣。
  • 低秩近似:利用低秩矩陣來近似表示Hessian矩陣的關鍵部分。低秩矩陣可以用較少的參數來描述,從而減少存儲和計算成本。
  • 迭代更新:在每次迭代中,根據當前的近似二階信息和梯度信息,更新量化參數。這個過程不斷重復,直到損失函數收斂到一個滿意的值。

快速二階近似的優勢

  • 計算效率提升:避免了直接計算和存儲完整的Hessian矩陣,大大減少了計算量和內存需求,使得量化過程能夠在合理的時間內完成。
  • 收斂速度加快:相比于僅使用一階信息的方法,結合近似二階信息可以更準確地引導參數更新,加快優化過程的收斂速度,提高量化的精度和效率。

剪枝(OBD/OBS)→ 量化(OBQ)→ 動態量化(GPTQ)

演進邏輯

  1. OBD(1989)——量化的萌芽

    • 首次提出基于Hessian矩陣的結構化剪枝方法
    • 通過計算參數對損失函數的二階導數(Hessian值)評估重要性
    • 核心思想:刪除對模型性能影響最小的連接(權重參數)
    • 問題:剪枝后模型稀疏度過高,推理加速有限
  2. OBS(1990)——剪枝技術的進化

    • 改進OBD的剪枝策略,提出"Optimal Brain Surgeon"
    • 動態調整剪枝閾值,保留更重要的參數
    • 引入參數恢復機制,在剪枝后微調恢復性能
    • 成果:在ImageNet等任務上實現30%參數縮減而不損失精度
  3. OBQ(2015)——量化技術的突破

    • 首次將量化與剪枝結合,提出"Optimal Brain Quantizer"
    • 創新點:將浮點權重壓縮為低精度定點數(如8bit)
    • 關鍵技術:
      • 基于KL散度的量化誤差最小化
      • 動態調整量化步長
      • 引入參數重訓練(fine-tuning)補償精度損失
    • 意義:開創了低比特量化的先河,為后續研究奠定基礎
  4. GPTQ(2022)——工業級量化方案

    • 革命性的4bit量化技術,實現:
      • 動態量化:逐通道/逐組調整量化參數
      • 精度補償:基于泰勒展開的誤差校正
      • 高效推理:支持CUDA kernel優化
    • 關鍵突破:
      • 混合精度量化策略(FP32/FP16/INT4混合存儲)
      • 自適應量化步長計算
      • 推理速度提升5-10倍的同時保持接近FP16的精度
    • 應用場景:LLM部署(Llama2-70B量化后可在消費級GPU運行)

GPTQ 混合量化方案(W4A16)

一、總述

GPTQ 采用 int4/fp16 (W4A16) 的混合量化方案,其中模型權重被量化為 int4 數值類型,而激活值則保留在 float16。在推理階段,模型權重被動態地反量化回 float16 并在該數值類型下進行實際的運算.

二、訓練階段:權重量化準備

在訓練階段,首先要對模型的權重進行一系列預處理操作,為后續的量化做準備。

  1. 動態范圍分析:對模型中每個權重矩陣進行統計分析,找出其最大值和最小值。例如,某一層的權重值分布在 -3.2 到 4.1 這個區間內。這一步的目的是確定權重的變化范圍,為后續的量化映射提供基礎。
  2. 量化參數計算:根據動態范圍分析得到的最大值和最小值,計算兩個重要的量化參數——縮放因子和零點。縮放因子的計算方法是用最大值與最小值的差值除以 int4 所能表示的最大正數(對于 4 位整數,即 2 的 3 次方減 1,也就是 15)。零點則是用于處理負數的偏移量,它確保量化后的數值能夠準確反映原始權重的信息。
  3. 量化映射:通過編寫函數,將原始的浮點型權重按照計算得到的縮放因子和零點進行量化,轉換為 int4 類型。例如使用 np.round(weight / scale + zero_point).astype(np.int8) 這樣的代碼,就能把權重轉換為對應的量化值。
三、存儲優化:int4 權重存儲

量化后的權重在存儲方面有很大優勢,GPTQ 采用了一系列優化策略。

  1. 內存布局優化:為了進一步節省存儲空間,GPTQ 把 4 個 int4 數值打包成 1 個字節(8 位)。這樣一來,原本需要大量空間存儲的權重,現在占用的空間大幅減少。比如一個有 1 億個參數的模型,原本使用 float32 存儲需要 400MB 空間,量化后使用 int4 并打包存儲,只需要 50MB,存儲空間直接壓縮為原來的八分之一。
  2. 存儲格式示例:可以通過一個表格清晰地看到原始的 float32 值、量化后的 int4 值以及打包后的字節形式之間的對應關系。例如,原始的 0.5 量化后為 3,和其他量化值一起打包成一個字節如 0b00110100 進行存儲。
四、推理階段:動態反量化與計算

在推理階段,為了保證計算精度,需要將量化后的權重反量化回 float16 進行實際運算。

  1. 硬件級反量化:當計算單元(如 GPU 內核)從內存中加載權重時,會自動對打包的字節進行解包操作,將其還原為 int4 形式,再進一步反量化為 float16。例如,讀取到 0b00110100 這個字節,就會解包出對應的量化值 3、 -5 等,然后反量化為對應的 float16 數值。
  2. 混合精度計算流程:推理過程遵循特定的流程。首先輸入的激活值保持為 float16 類型,然后解包后的權重也轉換為 float16 類型,接著進行矩陣乘法運算,最后經過激活函數處理得到輸出結果。整個過程可以用一個流程圖來清晰展示,輸入激活值經過解包權重、矩陣乘法、激活函數這幾個步驟,最終完成推理計算。
  3. 計算優化策略:為了提高推理速度,采用了多種計算優化策略。利用 GPU 的 Tensor Core 來加速 float16 運算,優化內存訪問方式以減少從 DRAM 到 SRAM 的數據傳輸量,還通過并行計算的方式同時處理多個 int4 權重組,從而提高整體的計算效率。
五、關鍵技術細節
  1. 量化粒度選擇:量化粒度的選擇對模型精度有重要影響。GPTQ 通常采用每通道量化的方式,相比于每層量化,這種方式能減少精度損失。一般典型的配置是每通道 4096 個參數為一組進行量化。
  2. 誤差補償機制:量化過程不可避免地會帶來一定的誤差,為了減少誤差對模型性能的影響,采用了誤差補償機制。動態調整量化參數,通過誤差反饋校準的方法,對量化過程中的誤差進行修正,盡量保持模型的精度。
  3. 激活值保留 fp16 的原因:激活值之所以保留為 float16 類型,是因為激活值的動態范圍通常較大,例如 ReLU 激活函數的輸出可能接近輸入的最大值。而且在計算過程中,中間結果需要更高的精度來避免誤差累積,從而保證最終的推理結果準確可靠。

解釋

量化與混合量化方案
  • 量化:在深度學習中,量化是一種將高精度數據(如32位浮點數,即 float32)轉換為低精度數據(如整數)的技術。其目的是減少模型的存儲需求和計算量,從而提高模型的推理速度和降低硬件資源的消耗。
  • 混合量化方案:不同的數據類型在模型的不同部分使用。在 int4/fp16 (W4A16) 這種混合量化方案里,“W4” 表示權重(weights)采用 4 位整數(int4)進行量化,“A16” 表示激活值(activations)采用 16 位浮點數(float16)來表示。
模型權重
  • 定義:在神經網絡中,權重是神經元之間連接的強度。它是模型學習到的參數,用于調整輸入信號的重要性。例如,在一個簡單的全連接層中,輸入向量會與權重矩陣相乘,從而得到輸出向量。模型訓練的過程就是不斷調整這些權重,使得模型的輸出盡可能接近真實標簽。
  • 量化為 int4:將原本使用高精度(如 float32)表示的權重,轉換為 4 位整數(int4)。4 位整數可以表示的數值范圍是有限的,這樣可以顯著減少權重的存儲空間。例如,原本一個 float32 類型的權重需要 32 位來存儲,而量化為 int4 后只需要 4 位,存儲空間減少為原來的 1/8。
激活值
  • 定義:激活值是神經元在接收到輸入信號并經過加權求和后,再通過激活函數處理得到的輸出值。激活函數的作用是引入非線性因素,使得神經網絡能夠學習到更復雜的模式。常見的激活函數有 ReLU(Rectified Linear Unit)、Sigmoid 等。例如,在一個多層感知機中,每一層神經元的輸出就是激活值,這些激活值會作為下一層的輸入。
  • 保留為 float16:激活值在計算過程中對精度要求相對較高,因為它們會直接影響后續層的輸入和最終的輸出結果。所以在這種混合量化方案中,激活值仍然使用 16 位浮點數(float16)來表示,以保證模型的計算精度。
推理階段與反量化
  • 推理階段:是指模型在訓練完成后,對新的輸入數據進行預測的過程。在這個階段,模型使用已經學習到的權重和結構來生成輸出結果。
  • 反量化:由于量化后的權重是 int4 類型,而在實際的計算中,硬件通常更擅長處理浮點數運算,所以在推理階段,需要將量化后的 int4 權重動態地轉換回 float16 類型,這個過程就是反量化。反量化的目的是為了在保證計算精度的前提下,利用硬件的浮點運算能力進行高效的計算。

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

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

相關文章

git的使用方法

文章目錄 前言git簡介GIT的基本操作克隆倉庫 (Clone)獲取最新代碼 (Pull)提交代碼到遠程倉庫查看當前分支查看提交代碼的日志git config 配置用戶信息 GIT的實操 前言 git是一種軟件版本管理工具,在多人團隊軟件開發中地方非常重要。 類似與SVN,git工具…

php虛擬站點提示No input file specified時的問題及權限處理方法

訪問站點,提示如下 No input file specified. 可能是文件權限有問題,也可能是“.user.ini”文件路徑沒有配置對,最簡單的辦法就是直接將它刪除掉,還有就是將它設置正確 #配置成自己服務器上正確的路徑 open_basedir/mnt/qiy/te…

使用Langflow和AstraDB構建AI助手:從架構設計到與NocoBase的集成

本文由 Leandro Martins 編寫,最初發布于 Building an AI Assistant with Langflow and AstraDB: From Architecture to Integration with NocoBase。 引言 本文的目標是演示如何創建一個集成了 NocoBase、LangFlow 和 VectorDB 工具的 AI 助手。作為基礎&#xf…

6.聊天室環境安裝 - Ubuntu22.04 - elasticsearch(es)的安裝和使用

目錄 介紹安裝安裝kibana安裝ES客戶端使用 介紹 Elasticsearch, 簡稱 ES,它是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,res…

SSL VXN

SSL VPN是采用SSL(Security Socket Layer)/TLS(Transport Layer Security)協議來實現遠程接入的一種輕量級VPN技術,其基于B/S架構,免于安裝客戶端,相較與IPSEC有更高的靈活度和管理性,當隧道建立…

【Qt】成員函數指針

一、成員函數指針的本質 與普通函數指針的區別: // 普通函數指針 void (*funcPtr)() &普通函數;// 成員函數指針 void (MyClass::*memberFuncPtr)() &MyClass::成員函數;? 綁定對象:成員函數指針必須與類的實例對象結合使用 ? 隱含 this 指…

通義萬相2.1開源版本地化部署攻略,生成視頻再填利器

2025 年 2 月 25 日晚上 11:00 通義萬相 2.1 開源發布,前兩周太忙沒空搞它,這個周末,也來本地化部署一個,體驗生成效果如何,總的來說,它在國內文生視頻、圖生視頻的行列處于領先位置&#xff0c…

Linux——system V共享內存

共享內存區是最快的IPC(進程內通信)形式,不再通過執行進入內核的系統調用來傳遞彼此的數據 1.共享內存的原理 IPC通信的本質是讓不同的進程先看到同一份資源,然后再進行通信,所以想要通過共享內存進行通信,那么第一步一定是讓兩個…

01 SQl注入基礎步驟(數字、字符、布爾盲注、報錯)

目錄 1、SQL注入漏洞的概要 2、SQL注入的常規思路 3、數字型注入 4、字符型注入 5、布爾盲注 6、報錯注入 1、SQL注入漏洞的概要 原理:通過用戶輸入的數據未嚴格過濾,將惡意SQL語句拼接到原始查詢中,從而操控數據庫執行非預期操作。 …

leetcode-sql數據庫面試題沖刺(高頻SQL五十題)

題目: 620.有趣的電影 表:cinema ------------------------ | Column Name | Type | ------------------------ | id | int | | movie | varchar | | description | varchar | | rating | float | ------------------------ id 是該表的主鍵(具有唯一值…

7.2 奇異值分解的基與矩陣

一、奇異值分解 奇異值分解(SVD)是線性代數的高光時刻。 A A A 是一個 m n m\times n mn 的矩陣,可以是方陣或者長方形矩陣,秩為 r r r。我們要對角化 A A A,但并不是把它化成 X ? 1 A X X^{-1}A X X?1AX 的形…

在本地部署DeepSeek等大模型時,需警惕的潛在安全風險

在本地部署DeepSeek等大模型時,盡管數據存儲在本地環境(而非云端),但仍需警惕以下潛在安全風險: 1. 模型與數據存儲風險 未加密的存儲介質:若訓練數據、模型權重或日志以明文形式存儲,可能被物…

【javaEE】多線程(進階)

1.????前言~🥳🎉🎉🎉 Hello, Hello~ 親愛的朋友們👋👋,這里是E綿綿呀????。 如果你喜歡這篇文章,請別吝嗇你的點贊????和收藏📖📖。如果你對我的…

dify中使用NL2SQL

在 Dify 工作流中融入 NL2SQL(自然語言轉 SQL)之能力,可依循如下步驟達成,借由 Dify 的模塊化設計以及模型編排之功能,優化數據庫查詢之智能化交互: 一、環境準備與 Dify 部署 安裝 Docker 與 Dify 務須確…

使用Everything搜索指定文件夾中的內容

直接路徑搜索法 在 Everything 的搜索框中輸入文件夾路徑加空格,再輸入要搜索的內容或文件名。如要在 D 盤的 “文檔” 文件夾中搜索名為 “報告.docx” 的文件,可輸入 “D:\ 文檔 報告.docx”235。 高級搜索法 打開 Everything 軟件,點擊菜…

Java在小米SU7 Ultra汽車中的技術賦能

目錄 一、智能駕駛“大腦”與實時數據 場景一:海量數據的分布式計算 場景二:實時決策的毫秒級響應 場景三:彈性擴展與容錯機制 技術隱喻: 二、車載信息系統(IVI)的交互 場景一:Android Automo…

Vue開發中計算屬性與方法調用之間的區別與聯系

文章目錄 一 概述二 核心區別三 聯系四 使用原則 一 概述 在 Vue 中,計算屬性(computed) 和 方法(methods) 都可以用于處理數據邏輯,但它們的核心區別在于 緩存機制 和 觸發方式 。 計算屬性示例&#xf…

【Unity】 HTFramework框架(六十一)Project窗口文件夾鎖定器

更新日期:2025年3月7日。 Github源碼:[點我獲取源碼] Gitee源碼:[點我獲取源碼] 索引 Project窗口文件夾鎖定器框架文件夾鎖定自定義文件夾鎖定限制條件 Project窗口文件夾鎖定器 在Project窗口中,文件夾鎖定器能夠為任何文件夾加…

C語言:6.20字符型數據練習題

編寫程序,輸人一行數字字符(用回車結束),每個數字字符 的前后都有空格。 把這一行中的數字轉換成一個整數。 例如,若輸入(<CR>代表 Enter鍵):2 4 8 3<CR>則輸出 整數:2483。 #include <stdio.h>int main() {char ch;int number 0;printf("請輸入一行…

【軟件工程】一篇入門UML建模圖(狀態圖、活動圖、構件圖、部署圖)

&#x1f308; 個人主頁&#xff1a;十二月的貓-CSDN博客 &#x1f525; 系列專欄&#xff1a; &#x1f3c0;軟件開發必練內功_十二月的貓的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻擋不了春天的腳步&#xff0c;十二點的黑夜遮蔽不住黎明的曙光 目錄 1. 前…