⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)
您的(de)當前(qián)位置:主(zhǔ)页(yè) > FPGA行業資訊 >

FPGA:深度(dù)学習的(de)未来(lái)?-明(míng)德揚科教(minyingyiyuan.com)

發(fà)布(bù)时(shí)間(jiān):2019-12-10   作者(zhě):admin 浏覽量(liàng):

最(zuì)近(jìn)幾(jǐ)年(nián)數據(jù)量(liàng)和(hé)可(kě)訪問(wèn)性(xìng)的(de)迅速增长,使得人(rén)工智能(néng)的(de)算法設計(jì)理念發(fà)生(shēng)了(le)轉(zhuǎn)變(biàn)。人(rén)工建立算法的(de)做法被(bèi)計(jì)算機(jī)從大量(liàng)數據(jù)中(zhōng)自(zì)動(dòng)習得可(kě)組合系(xì)統的(de)能(néng)力所(suǒ)取(qǔ)代(dài),使得計(jì)算機(jī)視覺、語(yǔ)音(yīn)識别、自(zì)然語(yǔ)言处理等關(guān)鍵領域都出(chū)現(xiàn)了(le)重(zhòng)大突破。深度(dù)学習是(shì)这(zhè)些領域中(zhōng)所(suǒ)最(zuì)常使用(yòng)的(de)技術(shù),也(yě)被(bèi)業界大为(wèi)關(guān)注。然而(ér),深度(dù)学習模型需要(yào)极(jí)为(wèi)大量(liàng)的(de)數據(jù)和(hé)計(jì)算能(néng)力,只(zhī)有(yǒu)更(gèng)好(hǎo)的(de)硬(yìng)件(jiàn)加速条(tiáo)件(jiàn),才能(néng)滿足現(xiàn)有(yǒu)數據(jù)和(hé)模型規模繼續擴大的(de)需求。現(xiàn)有(yǒu)的(de)解(jiě)決方(fāng)案(àn)使用(yòng)图(tú)形处理單元(yuán)(GPU)集群(qún)作为(wèi)通(tòng)用(yòng)計(jì)算图(tú)形处理單元(yuán)(GPGPU),但現(xiàn)场可(kě)編程門(mén)阵(zhèn)列(FPGA)提(tí)供了(le)另(lìng)一(yī)个(gè)值得探究的(de)解(jiě)決方(fāng)案(àn)。日(rì)漸流行的(de)FPGA設計(jì)工具使其对(duì)深度(dù)学習領域經(jīng)常使用(yòng)的(de)上(shàng)层软(ruǎn)件(jiàn)兼容性(xìng)更(gèng)強(qiáng),使得FPGA更(gèng)容易为(wèi)模型搭建和(hé)部(bù)署(shǔ)者(zhě)所(suǒ)用(yòng)。FPGA架構靈活,使得研究者(zhě)能(néng)够在(zài)诸如(rú)GPU的(de)固定(dìng)架構之外(wài)進(jìn)行模型优化(huà)探究。同(tóng)时(shí),FPGA在(zài)單位能(néng)耗下(xià)性(xìng)能(néng)更(gèng)強(qiáng),这(zhè)对(duì)大規模服(fú)务器部(bù)署(shǔ)或(huò)資源有(yǒu)限的(de)嵌入(rù)式應(yìng)用(yòng)的(de)研究而(ér)言至(zhì)關(guān)重(zhòng)要(yào)。本(běn)文(wén)從硬(yìng)件(jiàn)加速的(de)視角(jiǎo)考察深度(dù)学習與(yǔ)FPGA,指出(chū)有(yǒu)哪些趨勢和(hé)創新使得这(zhè)些技術(shù)相互匹(pǐ)配,并激發(fà)对(duì)FPGA如(rú)何幫助深度(dù)学習領域發(fà)展(zhǎn)的(de)探讨。

1.簡介

機(jī)器学習对(duì)日(rì)常生(shēng)活影響深遠(yuǎn)。无論是(shì)在(zài)网(wǎng)站上(shàng)點(diǎn)擊个(gè)性(xìng)化(huà)推薦內(nèi)容、在(zài)智能(néng)手(shǒu)機(jī)上(shàng)使用(yòng)語(yǔ)音(yīn)沟(gōu)通(tòng),或(huò)利用(yòng)面(miàn)部(bù)識别技術(shù)来(lái)拍照,都用(yòng)到(dào)了(le)某種(zhǒng)形式的(de)人(rén)工智能(néng)技術(shù)。这(zhè)股人(rén)工智能(néng)的(de)新潮(cháo)流也(yě)伴随着算法設計(jì)的(de)理念轉(zhuǎn)變(biàn)。过(guò)去(qù)基于(yú)數據(jù)的(de)機(jī)器学習大多(duō)是(shì)利用(yòng)具體(tǐ)領域的(de)專業知識来(lái)人(rén)工地(dì)“塑造”所(suǒ)要(yào)学習的(de)“特(tè)征”,計(jì)算機(jī)從大量(liàng)示例數據(jù)中(zhōng)習得組合特(tè)征提(tí)取(qǔ)系(xì)統的(de)能(néng)力,則使得計(jì)算機(jī)視覺、語(yǔ)音(yīn)識别和(hé)自(zì)然語(yǔ)言处理等關(guān)鍵領域实現(xiàn)了(le)重(zhòng)大的(de)性(xìng)能(néng)突破。对(duì)这(zhè)些數據(jù)驅動(dòng)技術(shù)的(de)研究被(bèi)稱为(wèi)深度(dù)学習,如(rú)今正(zhèng)受到(dào)技術(shù)界两(liǎng)个(gè)重(zhòng)要(yào)群(qún)體(tǐ)的(de)關(guān)注:一(yī)是(shì)希望使用(yòng)并訓練这(zhè)些模型、從而(ér)实現(xiàn)极(jí)高(gāo)性(xìng)能(néng)跨任务計(jì)算的(de)研究者(zhě),二(èr)是(shì)希望为(wèi)現(xiàn)实世界中(zhōng)的(de)新應(yìng)用(yòng)来(lái)部(bù)署(shǔ)这(zhè)些模型的(de)應(yìng)用(yòng)科学家(jiā)。然而(ér),他(tā)们(men)都面(miàn)臨着一(yī)个(gè)限制条(tiáo)件(jiàn),即硬(yìng)件(jiàn)加速能(néng)力仍需加強(qiáng),才可(kě)能(néng)滿足擴大現(xiàn)有(yǒu)數據(jù)和(hé)算法規模的(de)需求。

对(duì)于(yú)深度(dù)学習来(lái)说(shuō),目前(qián)硬(yìng)件(jiàn)加速主(zhǔ)要(yào)靠使用(yòng)图(tú)形处理單元(yuán)(GPU)集群(qún)作为(wèi)通(tòng)用(yòng)計(jì)算图(tú)形处理單元(yuán)(GPGPU)。相比傳統的(de)通(tòng)用(yòng)处理器(GPP),GPU的(de)核心(xīn)計(jì)算能(néng)力要(yào)多(duō)出(chū)幾(jǐ)个(gè)數量(liàng)級,也(yě)更(gèng)容易進(jìn)行并行計(jì)算。尤其是(shì)NVIDIA CUDA,作为(wèi)最(zuì)主(zhǔ)流的(de)GPGPU編写平台(tái),各(gè)个(gè)主(zhǔ)要(yào)的(de)深度(dù)学習工具均用(yòng)其来(lái)進(jìn)行GPU加速。最(zuì)近(jìn),開(kāi)放(fàng)型并行程序設計(jì)标(biāo)準OpenCL作为(wèi)异(yì)構硬(yìng)件(jiàn)編程的(de)替代(dài)性(xìng)工具備受關(guān)注,而(ér)对(duì)这(zhè)些工具的(de)热(rè)情(qíng)也(yě)在(zài)高(gāo)漲。虽然在(zài)深度(dù)学習領域內(nèi),OpenCL獲得的(de)支持(chí)相較CUDA還(huán)略遜一(yī)籌,但OpenCL有(yǒu)两(liǎng)項独特(tè)的(de)性(xìng)能(néng)。首先(xiān),OpenCL对(duì)開(kāi)發(fà)者(zhě)開(kāi)源、免費,不(bù)同(tóng)于(yú)CUDA單一(yī)供應(yìng)商的(de)做法。其次(cì),OpenCL支持(chí)一(yī)系(xì)列硬(yìng)件(jiàn),包(bāo)括GPU、GPP、現(xiàn)场可(kě)編程門(mén)阵(zhèn)列(FPGA)和(hé)數字(zì)信(xìn)号(hào)处理器(DSP)。

1.1. FPGA

作为(wèi)GPU在(zài)算法加速上(shàng)強(qiáng)有(yǒu)力的(de)競争者(zhě),FPGA是(shì)否立即支持(chí)不(bù)同(tóng)硬(yìng)件(jiàn),顯得尤为(wèi)重(zhòng)要(yào)。FPGA與(yǔ)GPU不(bù)同(tóng)之处在(zài)于(yú)硬(yìng)件(jiàn)配置靈活,且FPGA在(zài)運行深入(rù)学習中(zhōng)關(guān)鍵的(de)子程序(例如(rú)对(duì)滑動(dòng)窗(chuāng)口(kǒu)的(de)計(jì)算)时(shí),單位能(néng)耗下(xià)通(tòng)常能(néng)比GPU提(tí)供更(gèng)好(hǎo)的(de)表(biǎo)現(xiàn)。不(bù)过(guò),設置FPGA需要(yào)具體(tǐ)硬(yìng)件(jiàn)的(de)知識,许多(duō)研究者(zhě)和(hé)應(yìng)用(yòng)科学家(jiā)并不(bù)具備,正(zhèng)因(yīn)如(rú)此(cǐ),FPGA經(jīng)常被(bèi)看(kàn)作一(yī)種(zhǒng)行家(jiā)專屬的(de)架構。最(zuì)近(jìn),FPGA工具開(kāi)始采用(yòng)包(bāo)括OpenCL在(zài)內(nèi)的(de)软(ruǎn)件(jiàn)級編程模型,使其越来(lái)越受經(jīng)主(zhǔ)流软(ruǎn)件(jiàn)開(kāi)發(fà)訓練的(de)用(yòng)戶青(qīng)睐。

对(duì)考察一(yī)系(xì)列設計(jì)工具的(de)研究者(zhě)而(ér)言,其对(duì)工具的(de)篩選标(biāo)準通(tòng)常與(yǔ)其是(shì)否具備用(yòng)戶友好(hǎo)的(de)软(ruǎn)件(jiàn)開(kāi)發(fà)工具、是(shì)否具有(yǒu)靈活可(kě)升(shēng)級的(de)模型設計(jì)方(fāng)法以(yǐ)及(jí)是(shì)否能(néng)迅速計(jì)算、以(yǐ)縮減大模型的(de)訓練时(shí)間(jiān)有(yǒu)關(guān)。随着FPGA因(yīn)为(wèi)高(gāo)抽象(xiàng)化(huà)設計(jì)工具的(de)出(chū)現(xiàn)而(ér)越来(lái)越容易編写,其可(kě)重(zhòng)構性(xìng)又使得定(dìng)制架構成(chéng)为(wèi)可(kě)能(néng),同(tóng)时(shí)高(gāo)度(dù)的(de)并行計(jì)算能(néng)力提(tí)高(gāo)了(le)指令執行速度(dù),FPGA将为(wèi)深度(dù)学習的(de)研究者(zhě)带(dài)来(lái)好(hǎo)处。

对(duì)應(yìng)用(yòng)科学家(jiā)而(ér)言,盡管(guǎn)有(yǒu)類(lèi)似的(de)工具級選擇,但硬(yìng)件(jiàn)挑選的(de)重(zhòng)點(diǎn)在(zài)于(yú)最(zuì)大化(huà)提(tí)高(gāo)單位能(néng)耗的(de)性(xìng)能(néng),從而(ér)为(wèi)大規模運行降低成(chéng)本(běn)。所(suǒ)以(yǐ),FPGA凭借(jiè)單位能(néng)耗的(de)強(qiáng)勁性(xìng)能(néng),加上(shàng)为(wèi)特(tè)定(dìng)應(yìng)用(yòng)定(dìng)制架構的(de)能(néng)力,就(jiù)能(néng)讓深度(dù)学習的(de)應(yìng)用(yòng)科学家(jiā)受益。

FPGA能(néng)滿足两(liǎng)類(lèi)受衆的(de)需求,是(shì)一(yī)个(gè)合乎邏輯的(de)選擇。本(běn)文(wén)考察FPGA上(shàng)深度(dù)学習的(de)現(xiàn)狀,以(yǐ)及(jí)目前(qián)用(yòng)于(yú)填補两(liǎng)者(zhě)間(jiān)鴻沟(gōu)的(de)技術(shù)發(fà)展(zhǎn)。因(yīn)此(cǐ),本(běn)文(wén)有(yǒu)三(sān)个(gè)重(zhòng)要(yào)目的(de)。首先(xiān),指出(chū)深度(dù)学習領域存在(zài)探索全(quán)新硬(yìng)件(jiàn)加速平台(tái)的(de)機(jī)会(huì),而(ér)FPGA是(shì)一(yī)个(gè)理想(xiǎng)的(de)選擇。其次(cì),勾勒出(chū)FPGA支持(chí)深度(dù)学習的(de)現(xiàn)狀,指出(chū)潛在(zài)的(de)限制。最(zuì)後(hòu),对(duì)FPGA硬(yìng)件(jiàn)加速的(de)未来(lái)方(fāng)向(xiàng)提(tí)出(chū)關(guān)鍵建議,幫助解(jiě)決今後(hòu)深度(dù)学習所(suǒ)面(miàn)臨的(de)問(wèn)題(tí)。

2. FPGA

傳統来(lái)说(shuō),在(zài)評估硬(yìng)件(jiàn)平台(tái)的(de)加速时(shí),必須考慮到(dào)靈活性(xìng)和(hé)性(xìng)能(néng)之間(jiān)的(de)權衡。一(yī)方(fāng)面(miàn),通(tòng)用(yòng)处理器(GPP)可(kě)提(tí)供高(gāo)度(dù)的(de)靈活性(xìng)和(hé)易用(yòng)性(xìng),但性(xìng)能(néng)相对(duì)缺乏效率。这(zhè)些平台(tái)往往更(gèng)易于(yú)獲取(qǔ),可(kě)以(yǐ)低廉的(de)價格生(shēng)産,并且适用(yòng)于(yú)多(duō)種(zhǒng)用(yòng)途和(hé)重(zhòng)複使用(yòng)。另(lìng)一(yī)方(fāng)面(miàn),專用(yòng)集成(chéng)電(diàn)路(lù)(ASIC)可(kě)提(tí)供高(gāo)性(xìng)能(néng),但代(dài)價是(shì)不(bù)够靈活且生(shēng)産難度(dù)更(gèng)大。这(zhè)些電(diàn)路(lù)專用(yòng)于(yú)某特(tè)定(dìng)的(de)應(yìng)用(yòng)程序,并且生(shēng)産起来(lái)價格昂貴且耗时(shí)。

FPGA是(shì)这(zhè)两(liǎng)个(gè)极(jí)端之間(jiān)的(de)折中(zhōng)。FPGA屬于(yú)一(yī)類(lèi)更(gèng)通(tòng)用(yòng)的(de)可(kě)編程邏輯設備(PLD),并且簡單来(lái)说(shuō),是(shì)一(yī)種(zhǒng)可(kě)重(zhòng)新配置的(de)集成(chéng)電(diàn)路(lù)。因(yīn)此(cǐ),FPGA既能(néng)提(tí)供集成(chéng)電(diàn)路(lù)的(de)性(xìng)能(néng)优勢,又具備GPP可(kě)重(zhòng)新配置的(de)靈活性(xìng)。FPGA能(néng)够簡單地(dì)通(tòng)过(guò)使用(yòng)觸發(fà)器(FF)来(lái)实現(xiàn)順序邏輯,并通(tòng)过(guò)使用(yòng)查找(zhǎo)表(biǎo)(LUT)来(lái)实現(xiàn)組合邏輯。現(xiàn)代(dài)的(de)FPGA還(huán)含有(yǒu)硬(yìng)化(huà)組件(jiàn)以(yǐ)实現(xiàn)一(yī)些常用(yòng)功能(néng),例如(rú)全(quán)处理器內(nèi)核、通(tòng)信(xìn)內(nèi)核、運算內(nèi)核和(hé)块(kuài)內(nèi)存(BRAM)。另(lìng)外(wài),目前(qián)的(de)FPGA趨勢趨向(xiàng)于(yú)系(xì)統芯片(piàn)(SoC)設計(jì)方(fāng)法,即ARM協处理器和(hé)FPGA通(tòng)常位于(yú)同(tóng)一(yī)芯片(piàn)中(zhōng)。目前(qián)的(de)FPGA市(shì)场由(yóu)Xilinx和(hé)Altera主(zhǔ)導,两(liǎng)者(zhě)共(gòng)同(tóng)占有(yǒu)85%的(de)市(shì)场份額。此(cǐ)外(wài),FPGA正(zhèng)迅速取(qǔ)代(dài)ASIC和(hé)應(yìng)用(yòng)專用(yòng)标(biāo)準産品(ASSP)来(lái)实現(xiàn)固定(dìng)功能(néng)邏輯。 FPGA市(shì)场規模預計(jì)在(zài)2016年(nián)将达(dá)到(dào)100亿(yì)美元(yuán)。

对(duì)于(yú)深度(dù)学習而(ér)言,FPGA提(tí)供了(le)优于(yú)傳統GPP加速能(néng)力的(de)顯著潛力。GPP在(zài)软(ruǎn)件(jiàn)层面(miàn)的(de)執行依賴于(yú)傳統的(de)馮·諾依曼架構,指令和(hé)數據(jù)存儲于(yú)外(wài)部(bù)存儲器中(zhōng),在(zài)需要(yào)时(shí)再取(qǔ)出(chū)。这(zhè)推動(dòng)了(le)緩存的(de)出(chū)現(xiàn),大大減輕(qīng)了(le)昂貴的(de)外(wài)部(bù)存儲器操作。該架構的(de)瓶颈是(shì)处理器和(hé)存儲器之間(jiān)的(de)通(tòng)信(xìn),这(zhè)嚴重(zhòng)削弱(ruò)了(le)GPP的(de)性(xìng)能(néng),尤其影響深度(dù)学習經(jīng)常需要(yào)獲取(qǔ)的(de)存儲信(xìn)息技術(shù)。相比較而(ér)言,FPGA的(de)可(kě)編程邏輯原件(jiàn)可(kě)用(yòng)于(yú)实現(xiàn)普通(tòng)邏輯功能(néng)中(zhōng)的(de)數據(jù)和(hé)控制路(lù)徑,而(ér)不(bù)依賴于(yú)馮·諾伊曼結構。它(tā)们(men)也(yě)能(néng)够利用(yòng)分(fēn)布(bù)式片(piàn)上(shàng)存儲器,以(yǐ)及(jí)深度(dù)利用(yòng)流水(shuǐ)線(xiàn)并行,这(zhè)與(yǔ)前(qián)饋性(xìng)深度(dù)学習方(fāng)法自(zì)然契合。現(xiàn)代(dài)FPGA還(huán)支持(chí)部(bù)分(fēn)動(dòng)态重(zhòng)新配置,當FPGA的(de)一(yī)部(bù)分(fēn)被(bèi)重(zhòng)新配置时(shí)另(lìng)一(yī)部(bù)分(fēn)仍可(kě)使用(yòng)。这(zhè)将对(duì)大規模深度(dù)学習模式産生(shēng)影響,FPGA的(de)各(gè)层可(kě)進(jìn)行重(zhòng)新配置,而(ér)不(bù)擾亂其他(tā)层正(zhèng)在(zài)進(jìn)行的(de)計(jì)算。这(zhè)将可(kě)用(yòng)于(yú)无法由(yóu)單个(gè)FPGA容納的(de)模型,同(tóng)时(shí)還(huán)可(kě)通(tòng)过(guò)将中(zhōng)間(jiān)結果(guǒ)保存在(zài)本(běn)地(dì)存儲以(yǐ)降低高(gāo)昂的(de)全(quán)球存儲读(dú)取(qǔ)費用(yòng)。

最(zuì)重(zhòng)要(yào)的(de)是(shì),相比于(yú)GPU,FPGA为(wèi)硬(yìng)件(jiàn)加速設計(jì)的(de)探索提(tí)供了(le)另(lìng)一(yī)个(gè)視角(jiǎo)。GPU和(hé)其它(tā)固定(dìng)架構的(de)設計(jì)是(shì)遵循软(ruǎn)件(jiàn)執行模型,并圍繞自(zì)主(zhǔ)計(jì)算單元(yuán)并行以(yǐ)執行任务搭建結構。由(yóu)此(cǐ),为(wèi)深度(dù)学習技術(shù)開(kāi)發(fà)GPU的(de)目标(biāo)就(jiù)是(shì)使算法适應(yìng)这(zhè)一(yī)模型,讓計(jì)算并行完成(chéng)、确保數據(jù)相互依賴。與(yǔ)此(cǐ)相反(fǎn),FPGA架構是(shì)为(wèi)應(yìng)用(yòng)程序專門(mén)定(dìng)制的(de)。在(zài)開(kāi)發(fà)FPGA的(de)深度(dù)学習技術(shù)时(shí),較少(shǎo)強(qiáng)調使算法适應(yìng)某固定(dìng)計(jì)算結構,從而(ér)留出(chū)更(gèng)多(duō)的(de)自(zì)由(yóu)去(qù)探索算法层面(miàn)的(de)优化(huà)。需要(yào)很多(duō)複雜的(de)下(xià)层硬(yìng)件(jiàn)控制操作的(de)技術(shù)很難在(zài)上(shàng)层软(ruǎn)件(jiàn)語(yǔ)言中(zhōng)实現(xiàn),但对(duì)FPGA執行卻特(tè)别具有(yǒu)吸引力。然而(ér),这(zhè)種(zhǒng)靈活性(xìng)是(shì)以(yǐ)大量(liàng)編譯(定(dìng)位和(hé)回(huí)路(lù))时(shí)間(jiān)为(wèi)成(chéng)本(běn)的(de),对(duì)于(yú)需要(yào)通(tòng)过(guò)設計(jì)循环(huán)快(kuài)速叠代(dài)的(de)研究人(rén)員来(lái)说(shuō)这(zhè)往往会(huì)是(shì)个(gè)問(wèn)題(tí)。

除了(le)編譯时(shí)間(jiān)外(wài),吸引偏好(hǎo)上(shàng)层編程語(yǔ)言的(de)研究人(rén)員和(hé)應(yìng)用(yòng)科学家(jiā)来(lái)開(kāi)發(fà)FPGA的(de)問(wèn)題(tí)尤为(wèi)艱難。虽然能(néng)流利使用(yòng)一(yī)種(zhǒng)软(ruǎn)件(jiàn)語(yǔ)言常常意(yì)味着可(kě)以(yǐ)輕(qīng)松地(dì)学習另(lìng)一(yī)種(zhǒng)软(ruǎn)件(jiàn)語(yǔ)言,但对(duì)于(yú)硬(yìng)件(jiàn)語(yǔ)言翻譯技能(néng)来(lái)说(shuō)卻非(fēi)如(rú)此(cǐ)。針(zhēn)对(duì)FPGA最(zuì)常用(yòng)的(de)語(yǔ)言是(shì)Verilog和(hé)VHDL,两(liǎng)者(zhě)均为(wèi)硬(yìng)件(jiàn)描述語(yǔ)言(HDL)。这(zhè)些語(yǔ)言和(hé)傳統的(de)软(ruǎn)件(jiàn)語(yǔ)言之間(jiān)的(de)主(zhǔ)要(yào)區(qū)别是(shì),HDL只(zhī)是(shì)單純描述硬(yìng)件(jiàn),而(ér)例如(rú)C語(yǔ)言等软(ruǎn)件(jiàn)語(yǔ)言則描述順序指令,并无需了(le)解(jiě)硬(yìng)件(jiàn)层面(miàn)的(de)執行细(xì)节(jié)。有(yǒu)效地(dì)描述硬(yìng)件(jiàn)需要(yào)对(duì)數字(zì)化(huà)設計(jì)和(hé)電(diàn)路(lù)的(de)專業知識,盡管(guǎn)一(yī)些下(xià)层的(de)实現(xiàn)決定(dìng)可(kě)以(yǐ)留給(gěi)自(zì)動(dòng)合成(chéng)工具去(qù)实現(xiàn),但往往无法达(dá)到(dào)高(gāo)效的(de)設計(jì)。因(yīn)此(cǐ),研究人(rén)員和(hé)應(yìng)用(yòng)科学家(jiā)傾向(xiàng)于(yú)選擇软(ruǎn)件(jiàn)設計(jì),因(yīn)其已經(jīng)非(fēi)常成(chéng)熟,擁有(yǒu)大量(liàng)抽象(xiàng)和(hé)便利的(de)分(fēn)類(lèi)来(lái)提(tí)高(gāo)程序員的(de)效率。这(zhè)些趨勢使得FPGA領域目前(qián)更(gèng)加青(qīng)睐高(gāo)度(dù)抽象(xiàng)化(huà)的(de)設計(jì)工具。

FPGA深度(dù)学習研究里(lǐ)程碑

1987VHDL成(chéng)为(wèi)IEEE标(biāo)準

1992GANGLION成(chéng)为(wèi)首个(gè)FPGA神經(jīng)网(wǎng)絡硬(yìng)件(jiàn)实現(xiàn)項目(Cox et al.)

1994Synopsys推出(chū)第(dì)一(yī)代(dài)FPGA行为(wèi)綜合方(fāng)案(àn)

1996VIP成(chéng)为(wèi)首个(gè)FPGA的(de)CNN实現(xiàn)方(fāng)案(àn)(Cloutier et al.)

2005FPGA市(shì)场價值接近(jìn)20亿(yì)美元(yuán)

2006首次(cì)利用(yòng)BP算法在(zài)FPGA上(shàng)实現(xiàn)5 GOPS的(de)处理能(néng)力

2011Altera推出(chū)OpenCL,支持(chí)FPGA

出(chū)現(xiàn)大規模的(de)基于(yú)FPGA的(de)CNN算法研究(Farabet et al.)

2016在(zài)微软(ruǎn)Catapult項目的(de)基礎上(shàng),出(chū)現(xiàn)基于(yú)FPGA的(de)數據(jù)中(zhōng)心(xīn)CNN算法加速(Ovtcharov et al.)

4. 未来(lái)展(zhǎn)望

深度(dù)学習的(de)未来(lái)不(bù)管(guǎn)是(shì)就(jiù)FPGA還(huán)是(shì)總(zǒng)體(tǐ)而(ér)言,主(zhǔ)要(yào)取(qǔ)決于(yú)可(kě)擴展(zhǎn)性(xìng)。要(yào)讓这(zhè)些技術(shù)成(chéng)功解(jiě)決未来(lái)的(de)問(wèn)題(tí),必須要(yào)拓展(zhǎn)到(dào)能(néng)够支持(chí)飛速增长的(de)數據(jù)規模和(hé)架構。FPGA技術(shù)正(zhèng)在(zài)适應(yìng)这(zhè)一(yī)趨勢,而(ér)硬(yìng)件(jiàn)正(zhèng)朝着更(gèng)大內(nèi)存、更(gèng)少(shǎo)的(de)特(tè)征點(diǎn)數量(liàng)、更(gèng)好(hǎo)的(de)互連(lián)性(xìng)發(fà)展(zhǎn),来(lái)适應(yìng)FPGA多(duō)重(zhòng)配置。英特(tè)爾收(shōu)購了(le)Altera,IBM與(yǔ)Xilinx合作,都昭示着FPGA領域的(de)變(biàn)革(gé),未来(lái)也(yě)可(kě)能(néng)很快(kuài)看(kàn)到(dào)FPGA與(yǔ)个(gè)人(rén)應(yìng)用(yòng)和(hé)數據(jù)中(zhōng)心(xīn)應(yìng)用(yòng)的(de)整合。另(lìng)外(wài),算法設計(jì)工具可(kě)能(néng)朝着進(jìn)一(yī)步抽象(xiàng)化(huà)和(hé)體(tǐ)验(yàn)软(ruǎn)件(jiàn)化(huà)的(de)方(fāng)向(xiàng)發(fà)展(zhǎn),從而(ér)吸引更(gèng)廣技術(shù)範圍的(de)用(yòng)戶。

4.1. 常用(yòng)深度(dù)学習软(ruǎn)件(jiàn)工具

在(zài)深度(dù)学習最(zuì)常用(yòng)的(de)软(ruǎn)件(jiàn)工具中(zhōng),有(yǒu)些工具已經(jīng)在(zài)支持(chí)CUDA的(de)同(tóng)时(shí),認識到(dào)支持(chí)OpenCL的(de)必要(yào)性(xìng)。这(zhè)将使得FPGA更(gèng)容易实現(xiàn)深度(dù)学習的(de)目的(de)。虽然據(jù)我(wǒ)们(men)所(suǒ)知,目前(qián)沒(méi)有(yǒu)任何深度(dù)学習工具明(míng)确表(biǎo)示支持(chí)FPGA,不(bù)过(guò)下(xià)面(miàn)的(de)表(biǎo)格列出(chū)了(le)哪些工具正(zhèng)朝支持(chí)OpenCL方(fāng)向(xiàng)發(fà)展(zhǎn):

Caffe,由(yóu)伯克(kè)利視覺與(yǔ)学習中(zhōng)心(xīn)開(kāi)發(fà),其GreenTea項目对(duì)OpenCL提(tí)供非(fēi)正(zhèng)式支持(chí)。Caffe另(lìng)有(yǒu)支持(chí)OpenCL的(de)AMD版本(běn)。

Torch,基于(yú)Lua語(yǔ)言的(de)科学計(jì)算框架,使用(yòng)範圍廣,其項目CLTorch对(duì)OpenCL提(tí)供非(fēi)正(zhèng)式支持(chí)。

Theano,由(yóu)蒙特(tè)利爾大学開(kāi)發(fà),其正(zhèng)在(zài)研發(fà)的(de)gpuarray後(hòu)端对(duì)OpenCL提(tí)供非(fēi)正(zhèng)式支持(chí)。

DeepCL,由(yóu)Hugh Perkins開(kāi)發(fà)的(de)OpenCL庫,用(yòng)于(yú)訓練卷(juǎn)積神經(jīng)网(wǎng)絡。

对(duì)于(yú)刚進(jìn)入(rù)此(cǐ)領域、希望選擇工具的(de)人(rén)来(lái)说(shuō),我(wǒ)们(men)的(de)建議是(shì)從Caffe開(kāi)始,因(yīn)为(wèi)它(tā)十(shí)分(fēn)常用(yòng),支持(chí)性(xìng)好(hǎo),用(yòng)戶界面(miàn)簡單。利用(yòng)Caffe的(de)model zoo庫,也(yě)很容易用(yòng)預先(xiān)訓練好(hǎo)的(de)模型進(jìn)行試验(yàn)。

4.2. 增加訓練自(zì)由(yóu)度(dù)

有(yǒu)人(rén)或(huò)许以(yǐ)为(wèi)訓練機(jī)器学習算法的(de)过(guò)程是(shì)完全(quán)自(zì)動(dòng)的(de),实際上(shàng)有(yǒu)一(yī)些超參數需要(yào)調整。对(duì)于(yú)深度(dù)学習尤为(wèi)如(rú)此(cǐ),模型在(zài)參數量(liàng)上(shàng)的(de)複雜程度(dù)經(jīng)常伴随着大量(liàng)可(kě)能(néng)的(de)超參數組合。可(kě)以(yǐ)調整的(de)超參數包(bāo)括訓練叠代(dài)次(cì)數、学習速率、批梯(tī)度(dù)尺寸(cùn)、隐藏單元(yuán)數和(hé)层數等等。調整这(zhè)些參數,等于(yú)在(zài)所(suǒ)有(yǒu)可(kě)能(néng)的(de)模型中(zhōng),挑選最(zuì)适用(yòng)于(yú)某个(gè)問(wèn)題(tí)的(de)模型。傳統做法中(zhōng),超參數的(de)設置要(yào)麼(me)依照經(jīng)验(yàn),要(yào)麼(me)根(gēn)據(jù)系(xì)統网(wǎng)格搜索或(huò)更(gèng)有(yǒu)效的(de)随機(jī)搜索来(lái)進(jìn)行。最(zuì)近(jìn)研究者(zhě)轉(zhuǎn)向(xiàng)了(le)适應(yìng)性(xìng)的(de)方(fāng)法,用(yòng)超參數調整的(de)嘗試結果(guǒ)为(wèi)配置依據(jù)。其中(zhōng),貝葉(yè)斯优化(huà)是(shì)最(zuì)常用(yòng)的(de)方(fāng)法。

不(bù)管(guǎn)用(yòng)何種(zhǒng)方(fāng)法調整超參數,目前(qián)利用(yòng)固定(dìng)架構的(de)訓練流程在(zài)某種(zhǒng)程度(dù)上(shàng)局(jú)限了(le)模型的(de)可(kě)能(néng)性(xìng),也(yě)就(jiù)是(shì)说(shuō),我(wǒ)们(men)或(huò)许只(zhī)在(zài)所(suǒ)有(yǒu)的(de)解(jiě)決方(fāng)案(àn)中(zhōng)管(guǎn)窺了(le)一(yī)部(bù)分(fēn)。固定(dìng)架構讓模型內(nèi)的(de)超參數設置探究變(biàn)得很容易(比如(rú),隐藏單元(yuán)數、层數等),但去(qù)探索不(bù)同(tóng)模型間(jiān)的(de)參數設置變(biàn)得很難(比如(rú),模型類(lèi)别的(de)不(bù)同(tóng)),因(yīn)为(wèi)如(rú)果(guǒ)要(yào)就(jiù)一(yī)个(gè)并不(bù)簡單符合某个(gè)固定(dìng)架構的(de)模型来(lái)進(jìn)行訓練,就(jiù)可(kě)能(néng)要(yào)花很长时(shí)間(jiān)。相反(fǎn),FPGA靈活的(de)架構,可(kě)能(néng)更(gèng)适合上(shàng)述优化(huà)類(lèi)型,因(yīn)为(wèi)用(yòng)FPGA能(néng)編写一(yī)个(gè)完全(quán)不(bù)同(tóng)的(de)硬(yìng)件(jiàn)架構并在(zài)運行时(shí)加速。

4.3. Low power compute clusters低耗能(néng)計(jì)算节(jié)點(diǎn)集群(qún)

深度(dù)学習模型最(zuì)讓人(rén)着迷的(de)就(jiù)是(shì)其拓展(zhǎn)能(néng)力。不(bù)管(guǎn)是(shì)为(wèi)了(le)從數據(jù)中(zhōng)發(fà)現(xiàn)複雜的(de)高(gāo)层特(tè)征,還(huán)是(shì)为(wèi)數據(jù)中(zhōng)心(xīn)應(yìng)用(yòng)提(tí)升(shēng)性(xìng)能(néng),深度(dù)学習技術(shù)經(jīng)常在(zài)多(duō)节(jié)點(diǎn)計(jì)算基礎架構間(jiān)進(jìn)行拓展(zhǎn)。目前(qián)的(de)解(jiě)決方(fāng)案(àn)使用(yòng)具備Infiniband互連(lián)技術(shù)的(de)GPU集群(qún)和(hé)MPI,從而(ér)实現(xiàn)上(shàng)层的(de)并行計(jì)算能(néng)力和(hé)节(jié)點(diǎn)間(jiān)數據(jù)的(de)快(kuài)速傳輸。然而(ér),當大規模應(yìng)用(yòng)的(de)負载越来(lái)越各(gè)不(bù)相同(tóng),使用(yòng)FPGA可(kě)能(néng)会(huì)是(shì)更(gèng)优的(de)方(fāng)法。FPGA的(de)可(kě)編程行允许系(xì)統根(gēn)據(jù)應(yìng)用(yòng)和(hé)負载進(jìn)行重(zhòng)新配置,同(tóng)时(shí)FPGA的(de)能(néng)耗比高(gāo),有(yǒu)助于(yú)下(xià)一(yī)代(dài)數據(jù)中(zhōng)心(xīn)降低成(chéng)本(běn)。

5. 結語(yǔ)

相比GPU和(hé)GPP,FPGA在(zài)滿足深度(dù)学習的(de)硬(yìng)件(jiàn)需求上(shàng)提(tí)供了(le)具有(yǒu)吸引力的(de)替代(dài)方(fāng)案(àn)。凭借(jiè)流水(shuǐ)線(xiàn)并行計(jì)算的(de)能(néng)力和(hé)高(gāo)效的(de)能(néng)耗,FPGA将在(zài)一(yī)般的(de)深度(dù)学習應(yìng)用(yòng)中(zhōng)展(zhǎn)現(xiàn)GPU和(hé)GPP所(suǒ)沒(méi)有(yǒu)的(de)独特(tè)优勢。同(tóng)时(shí),算法設計(jì)工具日(rì)漸成(chéng)熟,如(rú)今将FPGA集成(chéng)到(dào)常用(yòng)的(de)深度(dù)学習框架已成(chéng)为(wèi)可(kě)能(néng)。未来(lái),FPGA将有(yǒu)效地(dì)适應(yìng)深度(dù)学習的(de)發(fà)展(zhǎn)趨勢,從架構上(shàng)确保相關(guān)應(yìng)用(yòng)和(hé)研究能(néng)够自(zì)由(yóu)实現(xiàn)。

  •   
  •   
  •   
  •  
  • FPGA教育領域第(dì)一(yī)品牌(pái)
  • 咨詢热(rè)線(xiàn):020-39002701
  • 技術(shù)交流Q群(qún):544453837
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨