FPGA資源平民化 - 阿裏雲FaaS使用指南
前言
阿裏雲虛擬化團隊異構計算和高性能計算團隊一直致力於將計算資源"平民化";平民化這個詞我第一次是從高性能計算團隊何萬青老師那邊聽到的,他們在做的E-HPC就是要讓所有雲上用戶都能夠瞬間用於一個小型的超算集群,使得使用超算不再僅僅是一些超算中心和高校的特權;我們異構計算團隊則致力於將目前最快,最新的計算設備在雲上提供給用戶,之前的產品為GPU雲服務器EGS;大概半年前我們正式推出了FPGA雲服務器FaaS;經過內測,公測,現在終於正式上線,用戶隻需要開通白名單就可以和使用ECS虛擬機一樣使用FPGA資源了!
FaaS介紹
FaaS,全名FPGA as a Service,是一種在雲上使用FPGA的方式;我們現在支持兩種不同的實例,分別為:
實例型號 | FPGA型號 |
---|---|
F1 | intel A10 |
F2 | Xilinx ku115 |
F2從入門到放棄
準備
新建子帳號(可選)
建議用戶新建一個子帳號,並使用子帳號來操作阿裏雲資源,通過授權子帳號必要的權限,來保證安全!
-
在左側邊欄位置選擇[用戶管理] -> [新建用戶]
-
在彈出的創建用戶的表單中填寫:用戶名,顯示名,郵箱,電話等信息,**選中為該用戶自動生成AccessKey**,點擊確定
-
在彈出的窗口中保存用戶的AK/AS,這裏請一定要記住AK/AS,後續操作都會需要用到這個信息!
至此,RAM子帳號已經創建好,接下來需要給該子帳號授權!
-
在RAM控製台裏,選中左側的[用戶管理]標簽,可以看到剛剛新建的RAM子帳號,點擊[授權]按鈕,進行子帳號授權
-
至少給該子帳號授予如下權限:AliyunOSSFullAccess, AliyunECSFullAccess, AliyunRAMFullAccess & AliyunSTSAssumeRoleAccess;選中後點擊確定即可
開通OSS,並創建一個專用的bucket
FaaS的鏡像相關操作依賴於阿裏雲OSS存儲,因此用戶必須開通OSS服務;同時我們建議用戶新建一個專有的bucket,用來存儲您自己的FPGA鏡像中間結果
開通OSS(如果已經開通請忽略這一步)
-
登陸OSS售賣頁麵,點擊立即開通
在華東1區新建一個bucket
建議用戶新建一個bucket,專門用於FaaS服務,因此這個bucket會對aliyun官方管理帳號開通讀寫權限,因此不建議用戶存儲和FaaS不相關內容;**請記住這個bucket名字,在後續操作中會經常用到**
登陸OSS管理控製台
-
點擊左上方的"+"號,新建一個bucket
-
在右側彈出的對話框中給這個bucket起一個名字,選擇區域為**華東1**,點擊確定
-
可以在左側看到剛剛創建的bucket
購買
To 預算比較緊張,購買按量付費的用戶: 考慮到F2實例價格比普通ECS價格高一些,因此建議用戶在調試,編譯階段采用普通ECS;建議使用阿裏雲計算型實例,4核以上;在完成調試和編譯後,真正需要下載到FPGA裏運行時,再購買F2實例;
目前購買F2實例仍然需要開白名單,請用戶提工單(或者聯係阿裏雲BD)提供自己的阿裏雲帳號
-
開通白名單後,在阿裏雲官網購買頁麵直接購買,請選擇華東1,可用區B,VPC網絡;F2目前支持**按量付費**和**包年包月**兩種售賣方式;實例規格請選擇**異構計算**,**FPGA計算型**
Xilinx的開發環境,我們準備了一個鏡像,用戶直接使用該鏡像創建實例即可;該鏡像後期會在鏡像市場免費提供給用戶,目前還隻能通過共享鏡像的方式提供,因此用戶在選擇鏡像時,請選擇**共享鏡像**;如果在共享鏡像裏看不到鏡像,需要提工單(或者聯係阿裏雲BD)
F2 實例OpenCL開發最佳實踐
這裏我們以使用普通計算型實例做編譯和仿真,以F2實例作為最終運行為例;當然,編譯和仿真也完全可以在F2實例上完成,這樣更簡單
編譯,仿真
對於按量用戶,建議使用更加便宜的普通ECS實例(建議使用計算型4核以上實例)進行編譯和仿真,因為這時候不需要真正使用到FPGA;購買普通ECS實例和購買F2實例類似,隻是在選擇實例規格時,選擇型號不同,但是**依然要使用我們共享的鏡像**
-
首先配置安全燒寫環境
source /root/xbinst_oem/F2_env_setup.sh faascmd config --id=<accessID> --key=<accessKey> #id/key為阿裏雲accessID/accessKey,上述新建子帳號曾經保存過 faascmd auth --bucket=<bucket_name> #新建的OSS bucket 名字
-
運行SDx自帶demo:
cd /opt/Xilinx/SDx/2017.2/examples/vadd
查看在當前目錄下sdaccel.mk裏麵的platform(第60行)是否為
XDEVICE=xilinx:kcu1500:4ddr-xpr:4.0
改common.mk文件
vim ../common/common.mk
把第61行
CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} -o ${XCLBIN} ${KERNEL_DEFS} ${KERNEL_INCS}
改成
CLCC_OPT += $(CLCC_OPT_LEVEL) ${DEVICE_REPO_OPT} --platform ${XDEVICE} -o ${XCLBIN} ${KERNEL_DEFS} ${KERNEL_INCS} --xp param:compiler.acceleratorBinaryContent=dcp
然後開始仿真,編譯
export XILINX_SDX=/opt/Xilinx/SDx/2017.2 make -f sdaccel.mk xbin_hw #生成最終的二進製文件,時間比較長,差不多4個小時才能完成 //其他一些操作 /* make -f ./sdaccel.mk help #查看幫助文檔 #Compile and run CPU emulation using default xilinx:adm-pcie-7v3:1ddr:3.0 DSA make -f sdaccel.mk run_cpu_em //即:軟件仿真 #Compile and run hardware emulation using default xilinx:adm-pcie-7v3:1ddr:3.0 DSA make -f sdaccel.mk run_hw_em //硬件仿真 #Compile host executable only make -f sdaccel.mk host //隻編譯host代碼 #Compile XCLBIN file for system run only make -f sdaccel.mk xbin_hw //這個最重要,編譯生成可以下載到FPGA內的二進製文件 #Clean working diretory #make -f sdaccel.mk clean #Super clean working directory #make -f sdaccel.mk cleanall */
ps:此處編譯的時間會比較久,建議通過screen或者nohub等方式,防止ssh timeout退出。
-
編譯成功後打包結果
/root/xbinst_oem/sdaccel_package.sh -xclbin=/opt/Xilinx/SDx/2017.2/examples/vadd/bin_vadd_cpu_emu.xclbin
-
上傳壓縮包到自己的OSS指定的bucket
faascmd upload_object --object=<在bucket中名字,建議和file一致> --file=<打包生成的結果,一個tar包>
-
新建一個可以在F2上運行的FPGA image
faascmd create_image --object=bit.tar.gz --fpgatype=xilinx --name=hereIsFPGAImageName --tags=hereIsFPGAImageTag --encrypted=false --shell=V1.0
-
查看fpga image是否已經可以下載
faascmd list_images
我們看到狀態已經是success,可以下載了。記下FPGAIamgeUUID,一會下載的時候需要用
下載
如何編譯和仿真是在另外一台ECS上完成的,這裏首先要購買一台F2實例;具體的購買過程參考**購買**章節
-
首先配置安全燒寫環境
source /root/xbinst_oem/F2_env_setup.sh faascmd config --id=<accessID> --key=<accessKey> #id/key為阿裏雲accessID/accessKey,上述新建子帳號曾經保存過 faascmd auth --bucket=<bucket_name> #新建的OSS bucket 名字
-
獲取fpgauuid
faascmd list_instances --instanceId=hereIsYourInstanceId
-
下載fpga image
faascmd download_image --instanceId=hereIsYourInstanceId --fpgauuid=hereIsFpgaUUID --fpgatype=xilinx --imageuuid=hereIsImageUUID --imagetype=afu --shell=V1.0
-
查看是否下載成功
faascmd fpga_status --fpgauuid=hereIsFpgaUUID --instanceId=hereIsYourInstanceId
板卡上的FpgaImageUUID已經跟需要下載的image一致,並且TaskStatus已經valid,說明下載已經成功。
5.跑host程序
make -f sdaccel.mk host
unset XILINX_SDX
./vadd bin_vadd_hw.xclbin
最後更新:2017-10-26 13:35:41