阿里云虛擬化團(tuán)隊(duì)異構(gòu)計(jì)算和高性能計(jì)算團(tuán)隊(duì)一直致力于將計(jì)算資源"平民化";平民化這個(gè)詞我第一次是從高性能計(jì)算團(tuán)隊(duì)何萬(wàn)青老師那邊聽(tīng)到的,他們?cè)谧龅腅-HPC就是要讓所有云上用戶都能夠瞬間擁有一個(gè)小型的超算集群,使得使用超算不再僅僅是一些超算中心和高校的特權(quán);我們異構(gòu)計(jì)算團(tuán)隊(duì)則致力于將目前最快,最新的計(jì)算設(shè)備在云上提供給用戶,之前的產(chǎn)品為GPU云服務(wù)器EGS;大概半年前我們正式推出了FPGA云服務(wù)器FaaS;經(jīng)過(guò)內(nèi)測(cè),公測(cè),現(xiàn)在終于正式上線,用戶只需要開(kāi)通白名單就可以和使用ECS虛擬機(jī)一樣使用FPGA資源了!
FaaS介紹
FaaS,全名FPGA as a Service,是一種在云上使用FPGA的方式;我們現(xiàn)在支持兩種不同的實(shí)例,分別為:
實(shí)例型號(hào) FPGA型號(hào)
F1?intel A10?
F2?Xilinx ku115
F2從入門到放棄
準(zhǔn)備
新建子帳號(hào)(可選)
建議用戶新建一個(gè)子帳號(hào),并使用子帳號(hào)來(lái)操作阿里云資源,通過(guò)授權(quán)子帳號(hào)必要的權(quán)限,來(lái)保證安全!
1. 登陸阿里云RAM控制臺(tái)
2. 在左側(cè)邊欄位置選擇[用戶管理] -> [新建用戶]
3. 在彈出的創(chuàng)建用戶的表單中填寫(xiě):用戶名,顯示名,郵箱,電話等信息,**選中為該用戶自動(dòng)生成AccessKey**,點(diǎn)擊確定
4. 在彈出的窗口中保存用戶的AK/AS,這里請(qǐng)一定要記住AK/AS,后續(xù)操作都會(huì)需要用到這個(gè)信息!
5. 至此,RAM子帳號(hào)已經(jīng)創(chuàng)建好,接下來(lái)需要給該子帳號(hào)授權(quán)!
6. 在RAM控制臺(tái)里,選中左側(cè)的[用戶管理]標(biāo)簽,可以看到剛剛新建的RAM子帳號(hào),點(diǎn)擊[授權(quán)]按鈕,進(jìn)行子帳號(hào)授權(quán)
7. 至少給該子帳號(hào)授予如下權(quán)限:AliyunOSSFullAccess, AliyunECSFullAccess, AliyunRAMFullAccess & AliyunSTSAssumeRoleAccess;選中后點(diǎn)擊確定即可
開(kāi)通OSS,并創(chuàng)建一個(gè)專用的bucket
FaaS的鏡像相關(guān)操作依賴于阿里云OSS存儲(chǔ),因此用戶必須開(kāi)通OSS服務(wù);同時(shí)我們建議用戶新建一個(gè)專有的bucket,用來(lái)存儲(chǔ)您自己的FPGA鏡像中間結(jié)果
開(kāi)通OSS(如果已經(jīng)開(kāi)通請(qǐng)忽略這一步)
1. 登陸OSS售賣頁(yè)面,點(diǎn)擊立即開(kāi)通
在華東1區(qū)新建一個(gè)bucket
建議用戶新建一個(gè)bucket,專門用于FaaS服務(wù),因此這個(gè)bucket會(huì)對(duì)aliyun官方管理帳號(hào)開(kāi)通讀寫(xiě)權(quán)限,因此不建議用戶存儲(chǔ)和FaaS不相關(guān)內(nèi)容;**請(qǐng)記住這個(gè)bucket名字,在后續(xù)操作中會(huì)經(jīng)常用到**
1. 登陸OSS管理控制臺(tái)
2. 點(diǎn)擊左上方的"+"號(hào),新建一個(gè)bucket
3. 在右側(cè)彈出的對(duì)話框中給這個(gè)bucket起一個(gè)名字,選擇區(qū)域?yàn)?*華東1**,點(diǎn)擊確定
4. 可以在左側(cè)看到剛剛創(chuàng)建的bucket
購(gòu)買
To 預(yù)算比較緊張,購(gòu)買按量付費(fèi)的用戶: 考慮到F2實(shí)例價(jià)格比普通ECS價(jià)格高一些,因此建議用戶在調(diào)試,編譯階段采用普通ECS;建議使用阿里云計(jì)算型實(shí)例,4核以上;在完成調(diào)試和編譯后,真正需要下載到FPGA里運(yùn)行時(shí),再購(gòu)買F2實(shí)例;
1. 目前購(gòu)買F2實(shí)例仍然需要開(kāi)白名單,請(qǐng)用戶提工單(或者聯(lián)系阿里云BD)提供自己的阿里云帳號(hào)
2. 開(kāi)通白名單后,在阿里云官網(wǎng)直接購(gòu)買,請(qǐng)選擇華東1,可用區(qū)B,VPC網(wǎng)絡(luò);F2目前支持**按量付費(fèi)**和**包年包月**兩種售賣方式;實(shí)例規(guī)格請(qǐng)選擇**異構(gòu)計(jì)算**,**FPGA計(jì)算型**
3. Xilinx的開(kāi)發(fā)環(huán)境,我們準(zhǔn)備了一個(gè)鏡像,用戶直接使用該鏡像創(chuàng)建實(shí)例即可;該鏡像后期會(huì)在鏡像市場(chǎng)免費(fèi)提供給用戶,目前還只能通過(guò)共享鏡像的方式提供,因此用戶在選擇鏡像時(shí),請(qǐng)選擇**共享鏡像**;如果在共享鏡像里看不到鏡像,需要提工單(或者聯(lián)系阿里云BD)
F2 實(shí)例OpenCL開(kāi)發(fā)最佳實(shí)踐
這里我們以使用普通計(jì)算型實(shí)例做編譯和仿真,以F2實(shí)例作為最終運(yùn)行為例;當(dāng)然,編譯和仿真也完全可以在F2實(shí)例上完成,這樣更簡(jiǎn)單
編譯,仿真
對(duì)于按量用戶,建議使用更加便宜的普通ECS實(shí)例(建議使用計(jì)算型4核以上實(shí)例)進(jìn)行編譯和仿真,因?yàn)檫@時(shí)候不需要真正使用到FPGA;購(gòu)買普通ECS實(shí)例和購(gòu)買F2實(shí)例類似,只是在選擇實(shí)例規(guī)格時(shí),選擇型號(hào)不同,但是**依然要使用我們共享的鏡像**
1. 首先配置SDx環(huán)境 source /opt/Xilinx/SDx/2017.2/settings64.sh
2. 運(yùn)行SDx自帶demo:
cd /opt/Xilinx/SDx/2017.2/examples/vadd
查看在當(dāng)前目錄下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
軟件仿真
make -f sdaccel.mk run_cpu_em
看結(jié)果是否PASSED
直接運(yùn)行
export XCL_EMULATION_MODE=true #一定要設(shè)置這個(gè)環(huán)境變量,不然會(huì)報(bào)錯(cuò),找不到設(shè)備
./vadd bin_vadd_cpu_emu.xclbin
#如果報(bào)如下錯(cuò):Error: Unable to find Target Device xilinx_kcu1500_4ddr-xpr_4_0;請(qǐng)檢查XCL_EMULATION_MODE是否為true,如果沒(méi)有,請(qǐng)?jiān)O(shè)置:export XCL_EMULATION_MODE=true
硬件仿真
make -f sdaccel.mk cleanall
make -f sdaccel.mk run_hw_em
看仿真結(jié)果是否PASSED
直接運(yùn)行
export XCL_EMULATION_MODE=true #一定要設(shè)置這個(gè)環(huán)境變量,不然會(huì)報(bào)錯(cuò),找不到設(shè)備
./vadd bin_vadd_cpu_emu.xclbin
#如果報(bào)如下錯(cuò):Error: Unable to find Target Device xilinx_kcu1500_4ddr-xpr_4_0;請(qǐng)檢查XCL_EMULATION_MODE是否為true,如果沒(méi)有,請(qǐng)?jiān)O(shè)置:export XCL_EMULATION_MODE=true
編譯
make -f sdaccel.mk cleanall
make -f sdaccel.mk xbin_hw
//其他一些操作
/*
make -f sdaccel.mk xbin_hw #生成最終的二進(jìn)制文件,時(shí)間比較長(zhǎng),差不多4個(gè)小時(shí)才能完成
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 //這個(gè)最重要,編譯生成可以下載到FPGA內(nèi)的二進(jìn)制文件
#Clean working diretory
#make -f sdaccel.mk clean
#Super clean working directory
#make -f sdaccel.mk cleanall
*/
ps:此處編譯的時(shí)間會(huì)比較久,建議通過(guò)screen或者nohub等方式,防止ssh timeout退出。
3. 配置安全燒寫(xiě)環(huán)境
source /root/xbinst_oem/F2_env_setup.sh
faascmd config --id= --key= #id/key為阿里云accessID/accessKey,上述新建子帳號(hào)曾經(jīng)保存過(guò)
faascmd auth --bucket= #新建的OSS bucket 名字
4. 編譯成功后打包結(jié)
#如果/root/xbinst_oem/目錄里沒(méi)有sdaccel_package.sh,先下載:wget
/root/xbinst_oem/sdaccel_package.sh -xclbin=/opt/Xilinx/SDx/2017.2/examples/vadd/bin_vadd_cpu_emu.xclbin
5. 上傳壓縮包到自己的OSS指定的bucket
faascmd upload_object --object=<在bucket中名字,建議和file一致> --file=<打包生成的結(jié)果,一個(gè)tar包>
6. 新建一個(gè)可以在F2上運(yùn)行的FPGA image
faascmd create_image --object=<在bucket中名字,建議和file一致> --fpgatype=xilinx --name=hereIsFPGAImageName --tags=hereIsFPGAImageTag --encrypted=false --shell=V1.0
7. 查看fpga image是否已經(jīng)可以下載
我們看到狀態(tài)已經(jīng)是success,可以下載了。記下FPGAIamgeUUID,一會(huì)下載的時(shí)候需要用
下載
如何編譯和仿真是在另外一臺(tái)ECS上完成的,這里首先要購(gòu)買一臺(tái)F2實(shí)例;具體的購(gòu)買過(guò)程參考**購(gòu)買**章節(jié)
1. 首先配置安全燒寫(xiě)環(huán)境(如果之前已經(jīng)設(shè)置過(guò),跳過(guò))
source /root/xbinst_oem/F2_env_setup.sh
faascmd config --id= --key= #id/key為阿里云accessID/accessKey,上述新建子帳號(hào)曾經(jīng)保存過(guò)
faascmd auth --bucket= #新建的OSS bucket 名字
2. 獲取fpgauuid
faascmd list_instances --instanceId=hereIsYourInstanceId
vm instance Id:可以在阿里云控制臺(tái)找到
3. 下載fpga image
faascmd download_image --instanceId=hereIsYourInstanceId --fpgauuid=hereIsFpgaUUID --fpgatype=xilinx --imageuuid=hereIsImageUUID --imagetype=afu --shell=V1.0
4. 查看是否下載成功
faascmd fpga_status --fpgauuid=hereIsFpgaUUID --instanceId=hereIsYourInstanceId
板卡上的FpgaImageUUID已經(jīng)跟需要下載的image一致,并且TaskStatus已經(jīng)valid,說(shuō)明下載已經(jīng)成功。
5.跑host程序
make -f sdaccel.mk host
unset XILINX_SDX
./vadd bin_vadd_hw.xclbin
評(píng)論