第六十三章:AI模型的“跨界之旅”:不同硬件架構下的兼容性方案

不同硬件架構兼容

  • 前言:AI的“英雄”與“舞臺”
  • 第一章:AI硬件生態總覽:百花齊放的“算力戰場”
    • 1.1 CPU:AI計算的“全能基石”
    • 1.2 GPU:AI計算的“核心加速器”
    • 1.3 專用AI芯片:NPU/TPU等“定制利器”
  • 第二章:NVIDIA CUDA生態:AI加速的“黃金標準”
    • 2.1 CUDA:GPU編程的“事實標準”
    • 2.2 cuDNN:深度學習的“加速引擎”
    • 2.3 TensorRT:極致推理優化器(回顧與深化)
    • 2.4 pyTorch GPU加速驗證
  • 第三章:Apple M系列芯片:統一內存架構與新興力量
    • 3.1 統一內存架構(UMA):CPU與GPU的“無縫協作”
    • 3.2 Core ML與MLX:Apple AI生態的“原生工具”
    • 3.3 挑戰:CUDA兼容性與軟件生態
    • 3.4 PyTorch MPS加速驗證
  • 第四章:Vulkan等通用計算API:跨平臺的“抽象層”
    • 4.1 為什么需要通用計算API?——“百家爭鳴”的GPU廠商
    • 4.2 OpenCL/Vulkan/WebGPU:GPU計算的“OpenGL”
    • 4.3 優勢:真正的跨平臺兼容性
    • 4.4 挑戰:性能優化與生態成熟度
  • 第五章:框架的“智慧”:抽象層與后端管理
    • 5.1 PyTorch的“設備無關性”設計:to(device)的奧秘
    • 5.2 ONNX:模型導出的“通用語言”
    • 5.3 加速庫:accelerate等如何簡化多硬件部署
  • AI模型跨硬件部署的層次結構
  • “量化感知編譯”:硬件與量化的深度融合
  • 總結與展望:你已掌握AI模型“跨界之旅”的指南

前言:AI的“英雄”與“舞臺”

在AI模型訓練和推理的旅程中,我們總是離不開強大的硬件。如果說AI模型是舞臺上的“英雄”,那么各種計算芯片就是承載英雄表演的“舞臺”。

然而,這個“舞臺”并非單一。除了長期占據主導地位的NVIDIA GPU,我們還有Apple M系列芯片、AMD GPU、Intel GPU以及各種專用AI芯片(NPU)。它們各自擁有獨特的架構和優勢。

如何在這些不同的“舞臺”上,讓我們的AI模型高效、兼容地運行?如何實現“一次訓練,多平臺運行”的終極目標?
ai舞臺

今天,我們將深入探討不同硬件架構下的AI兼容性方案。我們將解密它們各自的特點、挑戰與優化策略,為你揭示AI模型如何實現“跨界之旅”的終極目標。

第一章:AI硬件生態總覽:百花齊放的“算力戰場”

觀概覽AI計算中各類硬件的角色和定位,為后續深度解析打下基礎。

1.1 CPU:AI計算的“全能基石”

特點:通用性強,編程靈活,可以運行任何AI模型。
優勢:成本相對低,易于部署,適用于小模型、非實時推理或數據預處理。
局限:串行計算為主,不擅長大規模并行計算,在處理深度學習模型時速度較慢。

1.2 GPU:AI計算的“核心加速器”

特點:擁有數千個并行計算核心(CUDA Cores, Stream Processors等),專為大規模并行計算設計。
優勢:深度學習模型的核心計算(矩陣乘法、卷積)是高度并行的,GPU能夠提供數倍到數百倍的加速。
玩家:NVIDIA(市場主導),AMD,Intel(新興)。

1.3 專用AI芯片:NPU/TPU等“定制利器”

特點:為AI計算(特別是推理)量身定制的硬件,具有極高的能效比和特定任務的加速能力。
例子:

  • NPU (Neural Processing Unit):集成在手機SoC中(如Apple A/M系列芯片、高通驍龍),用于本地AI加速。
  • TPU (Tensor Processing Unit):Google專為機器學習設計的ASIC芯片,主要用于云端訓練和推理。

第二章:NVIDIA CUDA生態:AI加速的“黃金標準”

深入NVIDIA CUDA生態的各個核心組件,理解其在AI加速中的主導地位。
n卡黃金標準

2.1 CUDA:GPU編程的“事實標準”

概念:CUDA (Compute Unified Device Architecture) 是NVIDIA推出的并行計算平臺和編程模型,允許開發者直接利用NVIDIA GPU的強大計算能力。

地位:它是目前深度學習領域最成熟、生態最完善、性能最優異的GPU編程模型,幾乎所有主流深度學習框架(PyTorch, TensorFlow)都原生支持CUDA。

2.2 cuDNN:深度學習的“加速引擎”

概念:cuDNN (CUDA Deep Neural Network library) 是NVIDIA為深度學習專門優化的GPU加速庫。

作用:它提供了高度優化的深度學習基本操作的實現(如卷積、池化、激活函數、歸一化等)。深度學習框架在底層都會調用cuDNN來執行這些操作,以獲得最佳性能。

2.3 TensorRT:極致推理優化器(回顧與深化)

作用: TensorRT是NVIDIA的高性能推理優化器和運行時庫。

優化點:

  1. 圖優化:算子融合(將多個連續操作融合成一個),消除冗余層。
  2. 精度校準:支持INT8量化,并提供校準工具最小化精度損失。
  3. 自動調優:根據目標GPU架構,自動選擇最優的CUDA核函數。
  4. 運行時:生成高度優化的引擎文件(.plan文件),直接在NVIDIA GPU上高效執行。
    特點:NVIDIA GPU上的極致性能,但缺乏跨平臺性。

2.4 pyTorch GPU加速驗證

目標:驗證PyTorch是否能夠成功使用NVIDIA GPU進行計算,并觀察Tensor在GPU上的創建和移動。
前置:確保你的系統安裝了NVIDIA GPU驅動和CUDA Toolkit,并安裝了PyTorch的CUDA版本。

# pytorch_cuda_check.pyimport torchprint("--- 案例#001:PyTorch GPU加速驗證 ---")# 1. 檢查CUDA是否可用
if torch.cuda.is_available():print("? 檢測到CUDA GPU!PyTorch可以使用GPU進行加速。")device = torch.device("cuda")print(f"  GPU設備名稱: {torch.cuda.get_device_name(0)}") # 打印第一個GPU的名稱print(f"  GPU數量: {torch.cuda.device_count()}") # 打印可用的GPU數量
else:print("? 未檢測到CUDA GPU。PyTorch將使用CPU運行。")device = torch.device("cpu")# --- 2. Tensor在CPU和GPU之間的移動 ---
# 在CPU上創建Tensor
cpu_tensor = torch.tensor([1, 2, 3], dtype=torch.float32)
print(f"\nCPU上的Tensor: {cpu_tensor}, 設備: {cpu_tensor.device}")if device.type == 'cuda':# 將Tensor移動到GPUgpu_tensor = cpu_tensor.to(device)print(f"GPU上的Tensor: {gpu_tensor}, 設備: {gpu_tensor.device}")# 在GPU上直接創建Tensornew_gpu_tensor = torch.randn(2, 2, device=device)print(f"直接在GPU上創建的Tensor:\n{new_gpu_tensor}, 設備: {new_gpu_tensor.device}")# 在GPU上執行計算result_gpu = gpu_tensor * 2 + new_gpu_tensor[0, 0]print(f"GPU上計算結果: {result_gpu}, 設備: {result_gpu.device}")# 將結果移回CPU (如果需要NumPy或Matplotlib等操作)result_cpu = result_gpu.cpu()print(f"結果移回CPU: {result_cpu}, 設備: {result_cpu.device}")else:print("\n無GPU可用,跳過GPU相關演示。")print("\n? PyTorch GPU加速驗證完成!")
print("掌握 Tensor 的設備管理是 PyTorch 編程的關鍵。")
print("-" * 50)

【代碼解讀】
這個案例是所有PyTorch GPU編程的基礎。
torch.cuda.is_available():檢查系統是否有可用的NVIDIA GPU。
tensor.to(device):這是將Tensor在CPU和GPU之間移動的核心方法。
torch.randn(…, device=device):可以直接在指定設備上創建Tensor。
運行這段代碼,如果你的GPU環境配置正確,你會看到所有Tensor都被成功地移動到cuda:0設備上,并在GPU上執行計算。

第三章:Apple M系列芯片:統一內存架構與新興力量

探索Apple M系列芯片的獨特架構,以及其在AI計算上的優勢和挑戰。

3.1 統一內存架構(UMA):CPU與GPU的“無縫協作”

概念:Apple M系列芯片(如M1, M2, M3)采用了統一內存架構(Unified Memory Architecture, UMA)。這意味著CPU和GPU共享同一塊物理內存。
優勢:

  1. “零拷貝”:CPU和GPU之間的數據傳輸不再需要復制,避免了大量的數據拷貝開銷,大大提升了效率。
  2. 內存效率:模型可以在CPU和GPU之間無縫切換,共享內存池,沒有傳統GPU的專用顯存限制。
  3. 編程簡化:開發者無需顯式地管理數據在CPU和GPU內存之間的移動。
    對比:傳統GPU(如NVIDIA)有自己的獨立顯存(VRAM),數據在CPU RAM和GPU VRAM之間需要顯式拷貝。

3.2 Core ML與MLX:Apple AI生態的“原生工具”

Core ML:Apple為開發者提供的高級機器學習框架,用于在Apple設備上高效運行模型。它支持將PyTorch、TensorFlow等模型轉換為Core ML格式。
MPS (Metal Performance Shaders):Apple為GPU計算提供的一套底層圖形/計算API。
MLX:Apple最新推出的專為M系列芯片設計的機器學習框架。它具有類似于PyTorch的API,但底層針對M系列芯片的UMA特性進行了極致優化,是其未來在Apple硬件上進行AI開發的核心。

3.3 挑戰:CUDA兼容性與軟件生態

CUDA兼容性:M系列芯片不支持CUDA。這意味著許多依賴CUDA的底層AI庫和工具(如FlashAttention, TensorRT)無法直接在M系列芯片上運行。
軟件生態:雖然Apple正在積極構建自己的AI生態(Core ML, MLX, MPS),但與NVIDIA及其CUDA的龐大、成熟的生態相比,仍有差距。

3.4 PyTorch MPS加速驗證

目標:驗證PyTorch是否能夠成功使用Apple M系列芯片的MPS后端進行計算。
前置:需要Apple M系列芯片的Mac電腦,并安裝了支持MPS的PyTorch版本。

# pytorch_mps_check.pyimport torchprint("\n--- 案例#002:PyTorch MPS加速驗證 (Apple M系列芯片) ---")# 1. 檢查MPS是否可用
if torch.backends.mps.is_available():print("? 檢測到Apple MPS設備!PyTorch可以使用GPU加速。")device = torch.device("mps")# torch.backends.mps.is_built() 檢查MPS是否在PyTorch中被編譯支持if not torch.backends.mps.is_built():print("警告: PyTorch MPS后端未編譯支持。")
else:print("? 未檢測到Apple MPS設備。PyTorch將使用CPU運行。")device = torch.device("cpu")# --- 2. Tensor在CPU和MPS設備之間的移動 (類似CUDA) ---
cpu_tensor_mps = torch.tensor([1, 2, 3], dtype=torch.float32)
print(f"\nCPU上的Tensor: {cpu_tensor_mps}, 設備: {cpu_tensor_mps.device}")if device.type == 'mps':mps_tensor = cpu_tensor_mps.to(device)print(f"MPS設備上的Tensor: {mps_tensor}, 設備: {mps_tensor.device}")new_mps_tensor = torch.randn(2, 2, device=device)print(f"直接在MPS上創建的Tensor:\n{new_mps_tensor}, 設備: {new_mps_tensor.device}")result_mps = mps_tensor * 2 + new_mps_tensor[0, 0]print(f"MPS上計算結果: {result_mps}, 設備: {result_mps.device}")else:print("\n無Apple MPS可用,跳過MPS相關演示。")print("\n? PyTorch MPS加速驗證完成!")
print("Apple M系列芯片為AI計算提供了強大的替代方案。")
print("-" * 50)

【代碼解讀】
這個案例演示了M系列芯片的AI加速。
torch.backends.mps.is_available():檢查MPS后端是否可用。
device = torch.device(“mps”):指定設備為mps。
tensor.to(device):Tensor的設備管理方式與CUDA相同。

第四章:Vulkan等通用計算API:跨平臺的“抽象層”

探討Vulkan等通用計算API如何為不同GPU廠商提供統一的編程接口,實現真正的跨平臺AI。
Vulkan等通用計算API

4.1 為什么需要通用計算API?——“百家爭鳴”的GPU廠商

除了NVIDIA(CUDA),還有AMD(ROCm)、Intel(oneAPI/OpenCL)等GPU廠商。每個廠商都有自己的GPU架構和編程棧。
問題:如果每個應用都要為不同廠商的GPU編寫不同的代碼,部署將變得極其復雜。
解決方案:需要一個通用的、跨廠商的、底層的計算API。

4.2 OpenCL/Vulkan/WebGPU:GPU計算的“OpenGL”

OpenCL:最早的開放標準,用于并行編程。
Vulkan:現代、低開銷的跨平臺圖形API,也支持通用計算(GPGPU)。它提供了比OpenGL更精細的GPU控制權。
WebGPU:基于Web的、用于GPU計算的API,旨在讓瀏覽器也能直接利用GPU。
它們就像GPU計算領域的“OpenGL”(圖形API的開放標準),為不同廠商的GPU提供了一個統一的“語言”。

4.3 優勢:真正的跨平臺兼容性

“一次編寫,多處運行”:開發者編寫一套基于Vulkan的代碼,理論上可以在任何支持Vulkan的GPU上運行,無論它是NVIDIA、AMD還是Intel。
社區驅動:開放標準,由多個廠商和組織共同維護。

4.4 挑戰:性能優化與生態成熟度

性能優化:由于是通用層,可能無法像CUDA/TensorRT那樣,為特定硬件提供極致的、原生級別的性能優化。
生態成熟度:相較于CUDA的龐大生態(庫、工具、開發者社區),Vulkan/OpenCL在AI計算領域的工具鏈和社區成熟度仍有差距。

第五章:框架的“智慧”:抽象層與后端管理

總結PyTorch等深度學習框架如何通過其內部的抽象層,實現模型在不同硬件上的兼容運行。

5.1 PyTorch的“設備無關性”設計:to(device)的奧秘

核心:PyTorch的設計理念之一就是**“設備無關性”**。你在編寫模型代碼時,無需關心它最終在哪種設備上運行。
tensor.to(device):這是魔法的核心。你只需要將所有Tensor和模型實例調用.to(device),PyTorch就會自動處理底層的數據移動和計算調度。
內部機制:PyTorch內部維護了一個Dispatch Table,根據device的類型(cuda, cpu, mps),動態地將操作分發到對應的底層后端(CUDA kernels, CPU kernels, MPS backend)。

5.2 ONNX:模型導出的“通用語言”

NNX作為模型中間表示的作用,它可以將模型從一個訓練框架導出,再導入到另一個推理引擎,實現跨平臺部署。

5.3 加速庫:accelerate等如何簡化多硬件部署

accelerate (Hugging Face):Hugging Face的accelerate庫提供了一個更高級的抽象層。它簡化了分布式訓練和多硬件部署的配置。你只需簡單幾行代碼,就能讓模型在單機多卡、CPU、GPU等不同環境下運行,無需修改模型代碼。

AI模型跨硬件部署的層次結構

Ai 模型部署

“量化感知編譯”:硬件與量化的深度融合

在最前沿的AI硬件優化中,量化和模型編譯(部署)是深度融合的:
硬件定制量化:芯片設計者會根據其硬件的指令集(例如,某個NPU只擅長4比特乘加)來設計量化算法。
量化感知編譯:編譯器在將模型優化為硬件可執行代碼時,會感知到模型的量化信息,并生成調用硬件底層量化專用單元的指令。
例子:NVIDIA的TensorRT可以對INT8模型進行編譯,充分利用Tensor Core。LLaMA.cpp的GGUF和其運行時,就是為CPU SIMD指令集量身定制的量化-編譯-執行一體化方案。
這代表了AI模型優化從軟件層面走向“軟硬協同”的終極目標。

總結與展望:你已掌握AI模型“跨界之旅”的指南

總結與展望:你已掌握AI模型“跨界之旅”的指南
恭喜你!今天你已經系統理解了AI模型在不同硬件架構下的兼容性方案。
? 本章驚喜概括 ?

你掌握了什么?對應的核心概念/技術
AI硬件生態? CPU, GPU, 專用芯片的特點與定位
NVIDIA CUDA生態? CUDA, cuDNN, TensorRT的“黃金標準”
Apple M系列芯片? UMA架構,MPS/MLX,優勢與挑戰
通用計算API? Vulkan/OpenCL的跨平臺兼容性與局限
框架智慧? PyTorch的“設備無關性”,ONNX通用性
代碼實戰? 親手實現PyTorch CUDA/MPS加速驗證
軟硬協同? 了解量化與硬件編譯的深度融合

你現在不僅能理解不同硬件的特性,更能掌握如何在各種“舞臺”上,讓你的AI模型高效地“表演”。你手中掌握的,是AI模型從“一機一用”走向“跑遍天下”的**“跨界之旅”指南**。

🔮 敬請期待! 隨著本章的完成,我們正式結束了**《階段五:模型壓縮與量化技術》。在下一階段《階段六:訓練鏈路與采集系統》中,我們將探索AI模型“食糧”的奧秘**——如何高效地采集、標注和準備數據,以及如何構建和優化訓練鏈路!

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

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

相關文章

2 Abp 框架核心架構

ABP Framework 核心架構 架構概述 ABP Framework 基于模塊化、分層架構構建,遵循領域驅動設計(DDD)、依賴注入和 SOLID 原則,為構建可維護、可測試和可擴展的應用程序提供基礎。 核心模塊 #mermaid-svg-10g1JRKDltZN4z5P {font-fa…

Spring的高頻基礎面試題(二)

1. 線程池創建的作用是什么 ? 線程池的核心參數有哪些 ? 線程池執行任務的流程 ?作用:提高線程的復用性,降低損耗資源。核心參數:核心線程 、最大線程數 、等待空閑時間、時間單位、任務隊列、線程工廠、拒絕策略執行流程: 首…

【JavaEE】(12) 創建一個 Sring Boot 項目

一、Maven 1、什么是 Maven Maven 用于管理項目、管理依賴(通過 POM 文件配置各種各樣的 jar 包)。 在沒有 Maven 之前,需要手動將 jar 包導入項目。整個流程:從網上查 jar 包并下載到本地(或者叫同事發)&…

最終章【1】Epson機器人篇

1,開發環境 Epson RC 7.5.1 RC90控制器 2,條件分支指令 2.1,If...EndIf,邏輯判斷分支 語法格式: If 條件1 Then 處理邏輯1................ ElseIf 條件2 Then 處理邏輯2................ Else 處理邏輯3................ EndIf 例子: String order$If ord…

vue3 實現web網頁不同分辨率適配

vue3 實現web網頁不同分辨率適配首先這個標題可能不是特別的合適,之前開發了一個網站,那個網站是類似于官網的效果,按照 19201080100% 的分辨率進行開發的,但是在開發完成之后,發現有的電腦是 19201080125% 的大小展示…

電子電路原理學習筆記---第5章特殊用途二極管---第2天

5.5閱讀數據手冊圖5-15給出了1N957B和1N4728A系列的齊納二極管數據手冊中的數據,再后面的討論中將參考這些數據。數據手冊中大部分信息是提供給電路設計者的,但有些內容在故障診斷和測試時也有必要了解。5.5.1最大功率齊納二極管的功率等于它對應的電壓與…

實現一個二維碼讓 iOS 和 Android 用戶自動跳轉到對應下載鏈接

實現一個二維碼讓 iOS 和 Android 用戶自動跳轉到對應下載鏈接 背景 開發一個APP后,需要分發Android測試包和iOS TestFlight的場景,但為兩個端分別生成二維碼,需要為二維碼標識系統以免導致用戶掃錯碼。如何實現一個二維碼讓 iOS 和 Androi…

Docker中ES安裝分詞器

1、下載好的文件上傳到虛擬機或者云服務器 https://release.infinilabs.com/analysis-ik/stable/ elasticsearch-analysis-ik-8.10.4.zip 2、將本地 ZIP 文件復制到容器內的臨時目錄(如 /tmp/) docker cp /data/elasticsearch-analysis-ik-8.10.4.zip e…

掌握while循環:C語言編程基礎

目錄 一、while循環簡介 二、if和while的對比 語法結構對比: 實際代碼對比: 三、while語句的執行流程 while循環的執行流程如下: 流程圖表示: 四、while循環實踐 練習:在屏幕上打印1~10的值 五、進階練習 題…

XML Schemas 簡介

XML Schemas 簡介 引言 XML(可擴展標記語言)是互聯網上用于數據交換的一種標準標記語言。隨著互聯網技術的飛速發展,XML因其靈活性和可擴展性而被廣泛應用于各種領域。XML Schemas(XML模式)作為一種定義XML文檔結構的機制,為XML文檔提供了嚴格的規范,確保了數據的準確…

Gradle(二)Gradle的優勢、項目結構介紹

目錄一、什么是 Gradle?二、為什么選擇 Gradle?三、Gradle 的項目結構3.1 項目結構3.2 gradle wrapper 包裝器3.3 settings.gradle 設置文件3.4 build.gradle 核心構建文件1)原始文件內容2)plugins 插件3)repositories…

機器學習-決策樹(上)

決策樹構建: 決策樹的結構與python中的二叉樹結構(PY數據結構-樹)相似,不過決策樹中除了葉節點之外的其他節點,都被稱之為“決策節點”,構建決策樹的過程,也就是選取每一個節點采用哪一個特征作為劃分依據的過程。 以…

一周學會Matplotlib3 Python 數據可視化-繪制直方圖(Histogram)

鋒哥原創的Matplotlib3 Python數據可視化視頻教程: 2026版 Matplotlib3 Python 數據可視化 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程講解利用python進行數據可視化 科研繪圖-Matplotlib,學習Matplotlib圖形參數基本設置&…

uni-app之刪除沒用的文件,搭建頁面

文章目錄一、初始化項目1.1 初始化index.vue1.2 刪除無用文件1.3 初始化后的目錄結果如下二、文件目錄分析2.1 核心文件2.2 關鍵文件夾?2.3 其他文件2.4 注意事項??三、創建頁面(pages)3.1 創建home頁面3.2 創建其他頁面3.3 查看pages.json3.4 刪除index頁面和pages.json的配…

99、【OS】【Nuttx】【構建】cmake 配置實操:問題解決

【聲明】本博客所有內容均為個人業余時間創作,所述技術案例均來自公開開源項目(如Github,Apache基金會),不涉及任何企業機密或未公開技術,如有侵權請聯系刪除 背景 接之前 blog 【OS】【Nuttx】【構建】cm…

2007-2023年各省環境保護支出統計數據

數據介紹 環境保護支出是指政府和企業為改善生態環境質量、防治污染、保護自然資源所投入的資金,涵蓋污染防治、生態修復、環境管理等多方面。污染防治支出、生態保護支出、環境管理事務、資源節約與循環利用等,當前環保支出仍面臨區域不平衡、隱性債務…

PyCharm(2025.1.3.1)綁定 Conda 環境

1. Pycharm 右下角,選擇( 如圖所示 )2. Path to conda 這里選擇如圖所示的這個文件( 在你下載的 Anaconda 文件里 ),之后在 Enviroment 中就可以看到你新創建的環境了

Liunx文件系統詳解

目錄 1.磁盤 1.1 概念 1.2 磁盤物理結構 1.3 磁盤的存儲結構 1.4 磁盤的邏輯結構 1.5 CHS && LBA地址 2.基礎文件系統 2.1 塊 ?編輯 2.2 分區 2.3 inode 3.ext2 ?件系統 3.1 宏觀認識 3.2 Block Group 3.3塊組內部構成 3.3.1 超級塊(Supe…

Mac如何安裝telnet命令

Mac如何安裝telnet命令_mac telnet-CSDN博客

【SpringBoot】持久層 sql 注入問題

目錄 概述 #{} 與 ${} 概述 前端惡意傳參,改變后端 sql 語句的語法結構,從而使后端給前端返回一些私密的數據。這種安全問題往往是因為沒有嚴格過濾參數,或者后端代碼不嚴謹導致的。 #{} 與 ${} 在 MyBatis 框架中,#{} 與 ${} 都…