【彈性計算】異構計算云服務和 AI 加速器(四):FPGA 虛擬化技術

異構計算云服務和 AI 加速器》系列,共包含以下文章:

  • 異構計算云服務和 AI 加速器(一):功能特點
  • 異構計算云服務和 AI 加速器(二):適用場景
  • 異構計算云服務和 AI 加速器(三):GPU 虛擬化技術
  • 異構計算云服務和 AI 加速器(四):FPGA 虛擬化技術
  • 異構計算云服務和 AI 加速器(五):EAIS & AI 加速器

😊 如果您覺得這篇文章有用 ?? 的話,請給博主一個一鍵三連 🚀🚀🚀 吧 (點贊 🧡、關注 💛、收藏 💚)!!!您的支持 💖💖💖 將激勵 🔥 博主輸出更多優質內容!!!

異構計算云服務和 AI 加速器(四):FPGA 虛擬化技術

在這里插入圖片描述

🚀 FPGAField-Programmable Gate Array現場可編程門陣列)是一種可重構的半導體芯片,允許用戶根據需要動態配置硬件邏輯,從而實現定制化的數字電路功能。它介于通用處理器(如 CPU)和專用芯片(如 ASIC)之間,兼具靈活性和高性能計算能力。

將 FPGA 的高性價比算力通過云輸出,使得 FPGA 的算力普惠化、平民化,這是 FPGA as a Service 的核心出發點和立足點。同時,云上使用 FPGA 與 FPGA 的傳統使用方式也有著非常大的區別。FPGA as a Service 的核心就是 FPGA 虛擬化技術

目前 FPGA 虛擬化技術還在發展初期,近幾年隨著云計算和 AI 技術的發展,才逐漸成為工業和學術領域研究的熱點。關于 FPGA 虛擬化技術的介紹文獻也比較少,關于 FPGA 虛擬化技術的發展歷史,目前比較全面的總結可以參考 2018 年由 Manchester 大學學生發表的一篇 IEEE 論文《A Survey on FPGA Virtualization》,文中提到早在 2004 年由 Plessl 和 Platzner 發表的一篇論文《Virtualization of Hardware Introduction and Survey》中提到過 FPGA 虛擬化技術的概念,將 FPGA 虛擬化技術分為 時域劃分Temporal Partitioning)、虛擬化執行Virtualized Execution)和 虛擬機Virtual Machines)三種。

  • 時域劃分 早期主要解決設備容量問題,是將大規模的應用設計拆分為幾個小設計,然后將每個設計燒寫在單個 FPGA 上順序執行。時域劃分技術如下圖所示,主要包括 網表劃分數據流圖劃分CDFG 劃分。隨著數據量和計算復雜度的增加,單片 FPGA 已經無法滿足一個應用的需求,需要多片 FPGA 并行完成,虛擬化技術逐漸打破了時間和空間維度的限制,就像大型數據中心的應用場景:多片 FPGA 并行執行同一個任務,并可以及時切換到下一個任務。

在這里插入圖片描述

  • 虛擬化執行 是把一個應用分成幾個有關聯的任務,并通過一個抽象層來管理和調度它們,其目的是在一定程度上實現 設備無關性Device Independence),從而解決資源管理和安全隔離問題,還可以提高開發效率,比較典型的例子是 PipeRench 項目,此項目成功研發了 Kilocore 芯片,它內置了一個 PowerPC 處理器,實現了硬件虛擬化,并可以動態配置,從而解決 FPGA 的資源限制問題。

  • 虛擬機 通過一個抽象架構來描述應用從而徹底實現設備無關性。起初,虛擬機的概念用來表示 FPGA 的靜態架構,譬如 Shell 或者 vFPGA 的 Hypervisor,并不是我們現在理解的虛擬機概念。現在的 FPGA Overlay 技術是應用比較廣泛的 FPGA 虛擬化方法之一,它是位于 FPGA 硬件層之上、并連接頂層應用的虛擬可編程架構,實現了對 FPGA 底層硬件資源的抽象化和虛擬化。FPGA Overlay 的具體實現方式有很多種,這里不詳細介紹,其主要目的是為上層用戶提供他們熟悉的編程架構與接口,比如通過 C 語言等高層語言對 Overlay 中的通用處理器等進行編程,而無須擔心具體的硬件電路實現,這點類似 HLS。Overlay 實現了 FPGA 的硬件無關性,便于應用設計在不同 FPGA 架構間移植。另外,用戶可以選擇只編譯自己改動的邏輯部分,在很大程度上縮短了 FPGA 的編譯時間,也方便對應用進行調試和修改。但是在實際開發中,由于其引入的 Overlay 層并不能完全隱藏 FPGA 結構,而且此技術沒有業界統一標準,所以會來帶額外的開發難度和成本。

按照資源的抽象級別,FPGA 虛擬化技術分為三類,如下圖所示。

在這里插入圖片描述

  • 資源級別Resource Level):FPGA 上的資源可分為兩種,一種是可配置的,一種是不可配置的,所以資源級別的虛擬化主要指架構虛擬化(增加一個抽象層)和I/O 虛擬化,比較典型的技術就是 FPGA Overlay 技術,I/O 虛擬化技術本質上跟 CPU/GPU 實現類似,比如 FPGA 云主機用到的設備透傳功能。
  • 單節點級別Node Level):單節點指單片 FPGA,主要指具備資源管理功能的抽象層,包括 VMM(Virtual Machine Monitors,也叫 Hypervisor),Shell(FPGA OS或 Hypervisor-vFPGA)和調度管理,主要用于多租戶場景,即 FPGA 云主機。
  • 多節點級別Multi-Node Level):多節點指由兩片以上 FPGA 組成的 FPGA 集群,虛擬化的目的是在多片 FPGA 上完成同一個加速任務。其實現依賴 FPGA 互聯功能,常見的有三種互聯方式,如下圖所示。

在這里插入圖片描述

🚀 將加速器擴展到多片 FPGA 上的架構集合。此處

  • a) 代表 FPGA 到 FPGA 通信;
  • b) 展示了一種服務器-客戶機架構,在這種架構中 FPGA 直接和服務器通信;
  • c) 表示在服務器-客戶機架構中,FPGA 作為客戶機 CPU 的一個特殊設備。

FPGA 虛擬化技術比較典型的應用場景包括基于 OpenCL 實現的 MapReduce 框架和微軟的 Catapult 項目。

從 FPGA 云主機的實現方式來說,FPGA 虛擬化指 I/O(PCIe 設備)虛擬化技術。

I/O 虛擬化技術,有些地方也叫 I/O 設備虛擬化技術,目前主流的模型實現方式有以下幾種:

  • 全模擬:純軟件實現,通常由虛擬化層(QEMU)完全模擬一個設備給虛擬機用,其優點是不需要修改操作系統內核和驅動,因此它是可移植性與兼容性最好的 I/O 設備虛擬模型。但是,這種實現模型性能不高,主要原因是:第一,軟件模擬本身就無法具有很高的性能 ;第二,在這種實現方式中,I/O 請求的完成需要虛擬機與監視程序多次的交互,產生大量的上下文切換,開銷巨大。
  • Virtio 驅動半虛擬化:將設備虛擬的工作一拆為二,一部分在虛擬機內核中作為前端驅動,一部分放到虛擬化層上(通常是 QEMU)作為后端,前后端共享 Virtio 環協同完成任務。Virtio 前后端的技術只是減少了 VM Exit 和 VM Entry(Guest 和 Host 的上下文切換),并且使 Guest 和 Host 能通過并行處理 I/O 來提高吞吐量并減少延遲。但是,I/O 的路徑并不比全虛擬化技術少。
  • 硬件輔助虛擬化:借助硬件技術,如 Intel 的 VT-d 技術實現 PCI 設備直接掛載給虛擬機,常見的有設備直通和 SR-IOV。

縱觀各大云服務提供商,FPGA 云服務器采用的都是 設備直通Device Passthrough),主要因為以下三點 :

  • 一是 FPGA 的性能,客戶考慮業務搬遷上云首先要做的就是對比,跟本地物理機比、跟競品(如 GPU/ASIC)比。虛擬化必然導致部分的硬件性能損耗,1% 的性能損失都會增大客戶拒絕使用 FPGA 云服務器的可能性 ;
  • 二是應用場景,FPGA 比較適用于計算密集型和通信密集型任務。在大數據爆發的時代,很多應用都需要調度多片 FPGA 才能滿足需求,將同一片 FPGA 共享給多個客戶的需求并不強烈 ;
  • 三是實現難度,分片 FPGA(vFPGA)的多租戶場景,在安全和隔離的實現上,雖然可以復用 vGPU 方案,但是硬件邏輯開發的難度非常大。綜合考慮,各大云服務提供商在FPGA 設備虛擬化時選擇的都是性能損耗最小的設備直通方案。

設備直通技術:是將宿主機上的 PCIe 設備直接分配給客戶機使用,虛擬機獨占這個設備,在客戶機進行對應的 I/O 操作時,不需要通過 VMM 或被 VMM 截獲,所以設備性能幾乎無損耗。設備直通技術的實現依賴 IOMMU 功能(隔離虛擬機對內存資源的訪問),需要硬件支持,比如 Intel 平臺的VT-d 技術。

說到 VT-d 技術,首先要解釋下 DMA(直接內存讀取),它是一種硬件機制,允許外圍設備和主內存之間直接傳輸數據,不需要 CPU 參與,由此可以大大提高設備的吞吐量。I/O 虛擬化的關鍵在于解決 I/O 設備與虛擬機的數據交換問題,而這部分主要指 DMA 和中斷請求(IRQ)。只要解決好這兩個方面的隔離、保護及性能問題,就是成功的 I/O 虛擬化。VT-d 通過重新設計 IOMMU 架構,在 CPU、內存和 I/O 設備之間增加了一個硬件設備,其主要功能是將 I/O 設備的 DMA 訪問請求和中斷請求重定向到 VMM 設定好的 VM 中,最終實現了 DMA 虛擬化,這項技術也叫 DMA 重映射

阿里云 FPGA 云主機的設備直通方式采用的是 VFIO,這是一套用戶驅動框架,通俗來講就是一個設備驅動。在虛擬化情景下,VFIO 主要用來在用戶實現設備直通,充分利用了 VT-d 技術提供的 DMA 重映射和中斷重映射特性,在保證直通設備的DMA 安全性的同時其 I/O 性能接近物理設備。

總體來說,FPGA 板卡(PCIe 設備)的透傳方式跟 GPU/NIC 等 PCIe 設備并無差別,鑒于 FPGA 本身的硬件特性和安全隔離要求,阿里云 FPGA 云服務器雖然采用了設備直通方式,但是并沒有把 FPGA 設備功能完全暴露給虛擬機,而是將 PCIe 從功能角度劃分為兩個 PF(Physical Function):即 管理 PFManagement PF)和 用戶 PFUserPF),如下圖所示。

在這里插入圖片描述

  • 管理 PF:提供 FPGA 各種控制功能,如 FPGA 鏡像加載、狀態監控等。例如,在 FPGA 云主機上,只有先發送加載請求,后臺系統認證身份后,通過宿主機驅動才能發起加載操作。
  • 用戶 PF:對應的是邏輯功能接口,此功能會通過設備直通方式透傳給虛擬機,用戶可以使用官方提供的驅動訪問設備,也可以自己開發。

PCIe 功能雙 PF 的劃分,在一定程度上保護了 FPGA 板卡不會被用戶惡意燒寫,從而降低了宿主機的停機風險,也保證了 FPGA as a Service 的可靠性。此方案的實現基于 FPGA 特殊的硬件特性(部分可重配置),主流云服務提供商的做法基本類似。

部分可重配置Partial Reconfiguration):在前面介紹 FPGA 虛擬化技術的時候提到過,其實現原理是將 FPGA 內部劃分出多個區域,在 FPGA 運行時單獨對這些區域進行編程和配置,以改變區域內電路的邏輯,但并不影響 FPGA 其他電路的正常運行。它可以實現時間域和空間域兩個維度的任務切換,很多大型應用的邏輯都是利用 FPGA 這一特性實現的,如微軟的 Catapult 項目同時提出了 Shell(不可配置區域)和 Role(可重配的邏輯單元)的概念。也有將這一特性應用在多租戶場景下的,提出了vFPGA 的概念,即將一個 FPGA 共享給多個用戶使用,如 IBM 的 CloudFPGA 項目。

各云服務提供商的 FPGA 云服務器也抓住了這一特性,將 FPGA 在邏輯上劃分為 Shell(靜態區)和用戶邏輯(動態區)。

  • 靜態區:FPGA 的靜態區主要包括 PCIe、DRAM、DMA 及中斷等接口邏輯,一般由云服務提供商提供,主要負責 FPGA 管理功能。
  • 用戶邏輯:FPGA 的動態可重配置區域屬于用戶數據,即用戶的知識產權(IP)。

阿里云 FPGA 云主機在 F3 實例設計時也提出了 Role 的概念,它是和 Shell 類似的封裝,跟用戶邏輯一樣處于動態區域,其目的是簡化 Shell 功能,以盡可能減少 Shell 升級。另外,通過 Role 實現了同一個 Shell 既可以支持 OpenCL 開發,也可以支持 RTL 開發的功能,同時降低了用戶對 FPGA 的開發門檻。

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

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

相關文章

Java進階——位運算

位運算直接操作二進制位,在處理底層數據、加密算法、圖像處理等領域具有高效性能和效率。本文將深入探討Java中的位運算。 本文目錄 一、位運算簡介1. 與運算2. 或運算異或運算取反運算左移運算右移運算無符號右移運算 二、位運算的實際應用1. 權限管理2. 交換兩個變…

OpenAI深夜直播「偷襲」谷歌!GPT-4o原生圖像生成:奧特曼帶梗圖,AGI戰場再燃戰火

引言:AI戰場的「閃電戰」 當谷歌剛剛發布「地表最強」Gemini 2.5 Pro時,OpenAI立即以一場深夜直播「閃電反擊」——GPT-4o的原生圖像生成功能正式上線!從自拍變梗圖到相對論漫畫,奧特曼(OpenAI團隊)用一連…

鴻蒙harmonyOS:筆記 正則表達式

從給出的文本中,按照既定的相關規則,匹配出符合的數據,其中的規則就是正則表達式,使用正則表達式,可以使得我們用簡潔的代碼就能實現一定復雜的邏輯,比如判斷一個郵箱賬號是否符合正常的郵箱賬號&#xff0…

[首發]烽火HG680-KD-海思MV320芯片-2+8G-安卓9.0-強刷卡刷固件包

烽火HG680-KD-海思MV320芯片-28G-安卓9.0-強刷卡刷固件包 U盤強刷刷機步驟: 1、強刷刷機,用一個usb2.0的8G以下U盤,fat32,2048塊單分區格式化(強刷對U盤非常非常挑剔,usb2.0的4G U盤兼容的多&a…

Python-數據處理

第十五章 生成數據 安裝Matplotlib:通過pip install matplotlib命令安裝庫。繪制折線圖的核心語法為: import matplotlib.pyplot as plt x_values [1, 2, 3] y_values [1, 4, 9] plt.plot(x_values, y_values, linewidth2) plt.title(&quo…

Java基礎-23-靜態變量與靜態方法的使用場景

在Java中,static關鍵字用于定義靜態變量和靜態方法。它們屬于類本身,而不是類的某個實例。因此,靜態成員可以通過類名直接訪問,而無需創建對象。以下是靜態變量與靜態方法的常見使用場景: 一、靜態變量的使用場景 靜態…

大模型架構記錄12【Agent實例-tool】

運行根目錄下幾個ipynb文件- Learn-Agent.ipynb- 學習《Custom agent 自定義代理》部分- v1-Create-Custom-Agent.ipynb- v2-Create-Custom-Agent.ipynb- 基于v1,新增一些職位描述(JD)信息- v3-Create-Custom-Agent.ipynb- 基于v2&#xff0c…

在MCU工程中優化CPU工作效率的幾種方法

在嵌入式系統開發中,優化 CPU 工作效率對于提升系統性能、降低功耗、提高實時性至關重要。Keil 作為主流的嵌入式開發工具,提供了多種優化策略,包括 關鍵字使用、內存管理、字節對齊、算法優化 等。本文將從多個方面介紹如何在 Keil 工程中優…

Linux系統下C語言fork函數使用案例

一、fork函數的作用 生成一個子進程,異步執行某個任務; 二、子進程的作用 1、子進程能復制一份父進程的變量、函數; 2、子進程可以和父進程同時并發執行; 函數語法: pid_t fork() 說明:調用后返回一個進程…

MySQL中的CREATE TABLE LIKE和CREATE TABLE SELECT

MySQL中的CREATE TABLE LIKE和CREATE TABLE SELECT CREATE TABLE LIKECREATE TABLE SELECT CREATE TABLE LIKE CREATE TABLE ... LIKE可以用來復制表結構,源表上的索引和約束也會復制。CREATE TABLE ... LIKE不能復制表數據。CREATE TABLE ... LIKE只能復制基表&…

Java開發者指南:深入理解HotStuff新型共識算法

🧑 博主簡介:CSDN博客專家、全棧領域優質創作者、高級開發工程師、高級信息系統項目管理師、系統架構師,數學與應用數學專業,10年以上多種混合語言開發經驗,從事DICOM醫學影像開發領域多年,熟悉DICOM協議及…

opencv圖像處理之指紋驗證

一、簡介 在當今數字化時代,生物識別技術作為一種安全、便捷的身份驗證方式,正廣泛應用于各個領域。指紋識別作為生物識別技術中的佼佼者,因其獨特性和穩定性,成為了眾多應用場景的首選。今天,我們就來深入探討如何利…

wfs.js之h264轉碼mp4分析

準備源文件 下載源文件 git clone https://github.com/ChihChengYang/wfs.js.git編譯后得到wfs.js這個文件 調用 在demo/index.html中,前端對wfs.js進行了調用 var video1 document.getElementById("video1"), wfs new Wfs(); wfs.attachMedia…

協程 Coroutine

協程是 C20 引入的新特性。 文章目錄 基本概念std::coroutine_handlepromise 類型co_yield 基本用法 優勢異步 TCPco_await 基本概念 協程(Coroutine)是一種比線程更加輕量級的并發編程模型。協程的調度由程序員手動控制。 異步不是并行,但…

uniapp中的流式輸出

一、完整代碼展示 目前大多數的ai對話都是流式輸出&#xff0c;也就是對話是一個字或者多個字逐一進行顯示的下面是一個完整的流式顯示程序&#xff0c;包含的用戶的消息發出和ai的消息回復 <template><view class"chat-container"><view class&quo…

洛谷題單1-P5703 【深基2.例5】蘋果采購-python-流程圖重構

題目描述 現在需要采購一些蘋果&#xff0c;每名同學都可以分到固定數量的蘋果&#xff0c;并且已經知道了同學的數量&#xff0c;請問需要采購多少個蘋果&#xff1f; 輸入格式 輸入兩個不超過 1 0 9 10^9 109 正整數&#xff0c;分別表示每人分到的數量和同學的人數。 輸…

JS 手撕題高頻考點

前端面試中&#xff0c;JS 手撕題是高頻考點&#xff0c;主要考察 編程能力、算法思維、JS 核心知識。以下是最常見的手撕題分類 代碼示例&#xff1a; 目錄 &#x1f4cc; 1. 手寫函數柯里化&#x1f4cc; 2. 手寫 debounce&#xff08;防抖&#xff09;&#x1f4cc; 3. 手寫…

【STM32】知識點介紹一:硬件知識

文章目錄 一、電源引腳簡介二、電平信號三、電路分析 一、電源引腳簡介 VCC、GND、VDD和VSS是電子電路中常見的術語&#xff0c;代表著不同的電源引腳或電壓。 VCC&#xff08;Voltage at the Common Collector&#xff09;&#xff1a;VCC是指集電極&#xff08;Collector&am…

3. 列表元素替換

【問題描述】給定一個列表&#xff0c;將列表中所有的偶數替換為0 【輸入形式】輸入一行&#xff0c;包含若干個整數&#xff0c;用空格分隔 【輸出形式】輸出替換后的列表&#xff0c;每個元素用空格分隔 【樣例輸入】1 2 3 4 5 6 7 8 9 10 【樣例輸出】1 0 3 0 5 0 7 0 9…

問題的根源還是解題的方案

周末的早上照例是要早醒 debug 代碼的&#xff0c;仿佛又回到了 2014 年… 古人幾天甚至幾個月不洗澡&#xff0c;不會臭嗎&#xff1f;有沒有可能古人沒有化纖類衣服&#xff0c;且古人的純天然生活環境其身體菌群和現代人不同&#xff0c;古人就像健康的野生動物一樣即使不洗…