開(kāi)發(fā)者分享 – 啟智社區(qū) http://www.hualongw.cn 新一代人工智能開(kāi)源開(kāi)放平臺(tái) Wed, 07 Jul 2021 07:25:10 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.8.1 http://www.hualongw.cn/wp-content/uploads/2025/04/favicon.png 開(kāi)發(fā)者分享 – 啟智社區(qū) http://www.hualongw.cn 32 32 參與啟智社區(qū)開(kāi)源項(xiàng)目心得分享——韓冰杰 http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e9%9f%a9%e5%86%b0%e6%9d%b0/ http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e9%9f%a9%e5%86%b0%e6%9d%b0/#respond Wed, 07 Jul 2021 07:25:10 +0000 https://new.openi.org.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e9%9f%a9%e5%86%b0%e6%9d%b0/ 1. 天璇項(xiàng)目簡(jiǎn)介

2019年3月,第六十八次AVS會(huì)議完成AVS3-P2基準(zhǔn)檔次制定工作,AVS3作為新一代視頻壓縮標(biāo)準(zhǔn),相比上一代標(biāo)準(zhǔn)AVS2和HEVC,可節(jié)省近30%碼率。會(huì)議之后,北京大學(xué)深圳研究生院數(shù)字媒體研究中心王榮剛老師團(tuán)隊(duì)便開(kāi)始著手AVS3解碼器開(kāi)發(fā),并于2019年12月同時(shí)在鵬城實(shí)驗(yàn)室啟智開(kāi)源平臺(tái)和Github開(kāi)源,項(xiàng)目代號(hào)為“天璇”,又名“uAVS3d”。開(kāi)源之時(shí),uAVS3d已成雛形,解碼性能達(dá)業(yè)界領(lǐng)先水平,并覆蓋PC、手機(jī)等常用智能設(shè)備,開(kāi)源之后至今(2021年1月13日),又迭代代碼60余次,性能、平臺(tái)適配和代碼魯棒性進(jìn)一步提升。

uAVS3d支持Android/IOS/Windows/Linux/MacOS等常用系統(tǒng)平臺(tái),并針對(duì)ARMv7/ARMv8/X86架構(gòu)處理器做了深度優(yōu)化,支持高位深(10bit)解碼,具備高效的并發(fā)性能。在PC端可以實(shí)現(xiàn)8K實(shí)時(shí)解碼,在移動(dòng)端可支持4K 30fps視頻實(shí)時(shí)播放。不論是單線程的解碼速度還是解碼并行度,uavs3d均大幅領(lǐng)先AV1的開(kāi)源解碼器dav1d和aomdec。

PC端uAVS3d與AV1和HEVC常用解碼器的解碼性能對(duì)比如下:

2. 開(kāi)發(fā)心得

天璇項(xiàng)目于2019年3月啟動(dòng),5月底即輸出x86優(yōu)化版本,可實(shí)現(xiàn)8K視頻實(shí)時(shí)解碼,之后又快速推出了Android和IOS版本,快節(jié)奏加之高性能引起了業(yè)內(nèi)不少關(guān)注。華為在uAVS3d移動(dòng)版本完成之后的第一時(shí)間(開(kāi)源之前)便與我們接觸,針對(duì)華為手機(jī)做定制性優(yōu)化;騰訊、百度、愛(ài)奇藝、Bigo等視頻服務(wù)商也在開(kāi)源前后相繼測(cè)試跟進(jìn),部分廠商已上線應(yīng)用;uAVS3d的接口文件也已集成至多媒體處理開(kāi)源平臺(tái)FFmpeg的主分支,方便第三方集成驗(yàn)證。

取得如今的成果,著實(shí)不易,技術(shù)層面,uAVS3d之所以能快速成型,與所在團(tuán)隊(duì)多年的積累是分不開(kāi)的,數(shù)字媒體研究中心曾先后研發(fā)AVS+/AVS2編解碼器,已積累大量?jī)?yōu)秀代碼和經(jīng)驗(yàn)。本人作為項(xiàng)目開(kāi)發(fā)者之一,主要負(fù)責(zé)解碼器的關(guān)鍵模塊優(yōu)化,具體貢獻(xiàn)為添加分像素插值、幀內(nèi)預(yù)測(cè)、IDCT中DCT2部分、ALF、Deblock、SAO以及其它部分細(xì)節(jié)模塊的SIMD指令實(shí)現(xiàn),SIMD指令覆蓋SSE/AVX2/ARMv7/ARMv8,并且bitdepth為8和10的兩個(gè)版本獨(dú)立優(yōu)化;數(shù)據(jù)結(jié)構(gòu)方面,調(diào)整UV分量存儲(chǔ)結(jié)構(gòu),以提升SIMD并行效率。本人是15屆北大深研院數(shù)字媒體研究中心畢業(yè)生,讀研期間曾參與AVS2解碼器的模塊優(yōu)化,對(duì)各模塊的SIMD優(yōu)化細(xì)節(jié)有一定了解,17年重新加入團(tuán)隊(duì),之后,因項(xiàng)目需要,曾負(fù)責(zé)AVS2解碼器移動(dòng)端優(yōu)化,對(duì)解碼器部分結(jié)構(gòu)調(diào)整(UV分量重建像素交織存儲(chǔ),熵解碼實(shí)現(xiàn)調(diào)整)、完善ARMv7/ARMv8匯編,使得AVS2解碼器性能追齊業(yè)內(nèi)領(lǐng)先的HEVC解碼器。有了uAVS2d的開(kāi)發(fā)經(jīng)驗(yàn)和代碼積累,uAVS3d的模塊優(yōu)化就順利很多,AVS3的基本框架與AVS2一脈相承,多個(gè)模塊大同小異,只是AVS3的塊尺寸類型比AVS2要多不少,給匯編優(yōu)化帶來(lái)一定挑戰(zhàn)。個(gè)人從uAVS3d項(xiàng)目開(kāi)發(fā)中,收獲很多,加深了對(duì)編解碼框架的理解,移動(dòng)端開(kāi)發(fā)和匯編代碼編碼也更加得心應(yīng)手。

關(guān)于項(xiàng)目社區(qū)的溝通協(xié)作和運(yùn)營(yíng),本人也是受益很大。第一次負(fù)責(zé)開(kāi)源項(xiàng)目的運(yùn)營(yíng),項(xiàng)目說(shuō)明、開(kāi)源協(xié)議選擇、版本維護(hù)都趟過(guò)一些坑,好在選擇的開(kāi)源平臺(tái)(啟智社區(qū)和Github)以及版本管理工具(git)功能完善,服務(wù)穩(wěn)定易用,目前項(xiàng)目維護(hù)已走上正軌。

最后,給開(kāi)源社區(qū)的開(kāi)發(fā)同僚們分享些個(gè)人體會(huì)和建議:

  1. 認(rèn)真對(duì)待每個(gè)開(kāi)發(fā)細(xì)節(jié),項(xiàng)目整體的效能是眾多細(xì)節(jié)實(shí)現(xiàn)的集中體現(xiàn),細(xì)節(jié)實(shí)現(xiàn)水平可能就是項(xiàng)目脫穎而出的關(guān)鍵。

  2. 放平心態(tài),開(kāi)源意在分享,為后來(lái)者鋪路,減少重復(fù)工作,不宜太計(jì)較單個(gè)項(xiàng)目的得失。技術(shù)講究厚積薄發(fā),認(rèn)真寫(xiě)下的每一份代碼終是個(gè)人積累的財(cái)富。

  3. 項(xiàng)目啟動(dòng)之前做好調(diào)研分析,選擇合適的方向,了解現(xiàn)有工作,預(yù)估所能達(dá)到的效果,盡可能少做無(wú)用功。

]]>
http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e9%9f%a9%e5%86%b0%e6%9d%b0/feed/ 0
uavs3d_uavs3e開(kāi)源項(xiàng)目心得——王振宇 http://www.hualongw.cn/uavs3d_uavs3e%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97-%e7%8e%8b%e6%8c%af%e5%ae%87/ http://www.hualongw.cn/uavs3d_uavs3e%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97-%e7%8e%8b%e6%8c%af%e5%ae%87/#respond Wed, 07 Jul 2021 07:22:17 +0000 https://new.openi.org.cn/uavs3d_uavs3e%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97-%e7%8e%8b%e6%8c%af%e5%ae%87/ 項(xiàng)目背景

2018年12月,我有幸參與了“數(shù)字音視頻編解碼技術(shù)標(biāo)準(zhǔn)工作組”(簡(jiǎn)稱AVS工作組)在深圳鵬城實(shí)驗(yàn)室進(jìn)行的AVS3標(biāo)準(zhǔn)封閉開(kāi)發(fā)。封閉開(kāi)發(fā)初步完成了AVS3標(biāo)準(zhǔn)第一階段的制定工作以及參考軟件的開(kāi)發(fā)和測(cè)試。2019年3月的AVS工作組第68次會(huì)議上,AVS3第一階段標(biāo)準(zhǔn)正式公布。當(dāng)時(shí),正是新一代視頻編碼標(biāo)準(zhǔn)制定的關(guān)鍵時(shí)刻。國(guó)際上,AV1標(biāo)準(zhǔn)正在大力推廣,VVC標(biāo)準(zhǔn)也處于緊張制定的過(guò)程中,并在壓縮效率上處于領(lǐng)先地位。與此同時(shí),中美貿(mào)易戰(zhàn)和科技戰(zhàn)也正在火熱進(jìn)行,我國(guó)的科技公司面臨越來(lái)越大的壓力。而視頻編碼標(biāo)準(zhǔn)是視頻數(shù)據(jù)傳輸和存儲(chǔ)的基礎(chǔ)技術(shù)之一,一個(gè)友善的視頻編碼標(biāo)準(zhǔn)對(duì)我國(guó)信息產(chǎn)業(yè)的發(fā)展和安全,具有非常重要的作用。

因此,在標(biāo)準(zhǔn)定稿的第一時(shí)間,我們課題組就啟動(dòng)了AVS3編解碼庫(kù)的軟件開(kāi)發(fā)工作,力爭(zhēng)盡快推出可商用的AVS3編解碼庫(kù),加快AVS3標(biāo)準(zhǔn)的應(yīng)用和推廣。

 

開(kāi)源心得

在我們進(jìn)行AVS3編解碼庫(kù)開(kāi)發(fā)的最初階段,并未考慮以開(kāi)源的形式發(fā)布,更多傾向于以可執(zhí)行庫(kù)的形式發(fā)布,并期待后續(xù)進(jìn)一步的商業(yè)合作。但在接觸了多個(gè)主要的互聯(lián)網(wǎng)廠商之后,我們意識(shí)到了AVS3標(biāo)準(zhǔn)面臨的困難。由于H.264、HEVC等標(biāo)準(zhǔn)具有非常成熟的開(kāi)源編解碼器,國(guó)內(nèi)外行業(yè)內(nèi)的參與度很高,具有非常完整的技術(shù)生態(tài)。因此,AVS3如果不能建立起較好的生態(tài),業(yè)內(nèi)的各個(gè)廠商將始終會(huì)處于觀望態(tài)度,難以下決心投入使用。其次,業(yè)內(nèi)的多數(shù)廠商對(duì)于各自的應(yīng)用,都有不同的定制需求,同時(shí)對(duì)代碼的把控也具有一定的要求。因此,非開(kāi)源的編解碼庫(kù)對(duì)于大家意義有限。

所以最后,為了AVS3標(biāo)準(zhǔn)的推廣,我們選擇了開(kāi)源,一方面希望能夠吸引更多的參與者,包括參與編解碼庫(kù)的開(kāi)發(fā),以及參與標(biāo)準(zhǔn)相關(guān)生態(tài)的完善工作(例如各種系統(tǒng)層封裝的支持等)。另一方面,我們也希望開(kāi)源的編解碼庫(kù)能提供各個(gè)廠商一個(gè)開(kāi)發(fā)的基礎(chǔ)版本,大家可以在這個(gè)基礎(chǔ)上進(jìn)行各種需要的私有的定制化開(kāi)發(fā),而省去基礎(chǔ)編解碼平臺(tái)的開(kāi)發(fā)工作。當(dāng)然,開(kāi)源并不意味著生態(tài)就可以如預(yù)期一樣建立起來(lái),但是我們希望能拋磚引玉,為AVS3標(biāo)準(zhǔn)的推廣開(kāi)一個(gè)頭。

 

項(xiàng)目心得

在項(xiàng)目的開(kāi)發(fā)過(guò)程中,我們也取得了很大的收獲。

首先,項(xiàng)目開(kāi)源后,獲得了很多的關(guān)注,很多業(yè)內(nèi)同行在不同的平臺(tái)上編譯、運(yùn)行和測(cè)試AVS3編解碼庫(kù)。通過(guò)這些測(cè)試,我們積累了很多測(cè)試反饋,對(duì)編解碼庫(kù)的跨平臺(tái)支持、編解碼庫(kù)運(yùn)行的魯棒性提升等,都有很大的幫助。

同時(shí),除了我們自己項(xiàng)目組,還有其他一些廠商或個(gè)人開(kāi)發(fā)者向我們的項(xiàng)目提交了代碼,包括多平臺(tái)的一些支持、編碼算法、以及一些底層優(yōu)化代碼等,幫助項(xiàng)目進(jìn)一步完善。

此外,項(xiàng)目的開(kāi)源,對(duì)項(xiàng)目組的同學(xué)的工作也是一個(gè)認(rèn)可。項(xiàng)目組的同學(xué)的工作可以得到更廣泛的了解,對(duì)同學(xué)們個(gè)人也是一種很好的激勵(lì),能更好地調(diào)動(dòng)大家的積極性。

最后,為了在開(kāi)源過(guò)程中降低各參與者溝通和協(xié)調(diào)的代價(jià),我們?cè)诖a風(fēng)格、框架設(shè)計(jì)、代碼文檔等方面,都做了很多的改進(jìn)和完善,也進(jìn)一步提升了我們團(tuán)隊(duì)自身工程開(kāi)發(fā)的能力。

作者:王振宇

]]>
http://www.hualongw.cn/uavs3d_uavs3e%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97-%e7%8e%8b%e6%8c%af%e5%ae%87/feed/ 0
參與啟智社區(qū)開(kāi)源項(xiàng)目心得分享——方維 http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e6%96%b9%e7%bb%b4/ http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e6%96%b9%e7%bb%b4/#respond Wed, 07 Jul 2021 07:13:12 +0000 https://new.openi.org.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e6%96%b9%e7%bb%b4/ 作為開(kāi)源脈沖神經(jīng)網(wǎng)絡(luò)框架驚蟄(SpikingJelly)的開(kāi)發(fā)者之一,我有幸參加了12月初在北京舉辦的2020年OpenI開(kāi)發(fā)者大會(huì),并獲獎(jiǎng)成為首批啟智社區(qū)優(yōu)秀開(kāi)源開(kāi)發(fā)者。借此機(jī)會(huì),我想分享一下我的開(kāi)源經(jīng)歷和感悟。

參與開(kāi)發(fā)

第三代人工神經(jīng)網(wǎng)絡(luò)脈沖神經(jīng)網(wǎng)絡(luò)(Spiking Neural Network, SNN)具有事件驅(qū)動(dòng)、低功耗、高仿生的特點(diǎn),一直是神經(jīng)科學(xué)領(lǐng)域的研究熱點(diǎn)。近年來(lái)機(jī)器學(xué)習(xí)方法逐漸應(yīng)用于SNN并取得了突破性的性能提升,使用SNN進(jìn)行深度學(xué)習(xí)成為新的前沿交叉研究熱點(diǎn)。我對(duì)于這一新興的研究方向充滿興趣,但在研究中發(fā)現(xiàn):

  1. 傳統(tǒng)的深度學(xué)習(xí)框架并不直接支持SNN,因此許多研究者不得不從零開(kāi)始實(shí)現(xiàn)所需的SNN模塊,造成了大量的重復(fù)勞動(dòng)

  2. SNN從生物神經(jīng)元簡(jiǎn)化而來(lái),不同開(kāi)發(fā)者對(duì)SNN的實(shí)現(xiàn)方式不同,造成了定義的混亂,代碼難以復(fù)用

  3. 絕大多數(shù)代碼都沒(méi)有配套的文檔,給學(xué)習(xí)和使用帶來(lái)了麻煩

這些問(wèn)題是包括我在內(nèi)的所有SNN深度學(xué)習(xí)的研究者面臨的難題。目前這個(gè)領(lǐng)域還沒(méi)有一個(gè)成熟的框架,如果有一個(gè)類似于ANN中Caffe、PyTorch那樣的深度學(xué)習(xí)框架則可以解決上述問(wèn)題。為了我們自己研究的有序進(jìn)行、實(shí)驗(yàn)的順利開(kāi)展,以及方便其他研究者的使用,避免重復(fù)勞動(dòng),實(shí)驗(yàn)室的老師和博士生們討論后決定,自行開(kāi)發(fā)一款全新的開(kāi)源SNN深度學(xué)習(xí)框架,即驚蜇(SpikingJelly)。

 我個(gè)人參與驚蜇的開(kāi)發(fā),主要原因是:

  1. 研究方向與框架的應(yīng)用背景完全契合,在學(xué)習(xí)該領(lǐng)域的前沿知識(shí)時(shí),可以同時(shí)在框架中進(jìn)行代碼實(shí)現(xiàn),理論和實(shí)際實(shí)驗(yàn)可以順利結(jié)合,互為補(bǔ)充

  2. 一個(gè)完善的框架有助于我順利進(jìn)行各種實(shí)驗(yàn)、與他人分享我的研究成果,并確保我的研究成果的可復(fù)現(xiàn)性

  3. 希望能夠繼續(xù)為開(kāi)源社區(qū)做出更多貢獻(xiàn),減少開(kāi)發(fā)者的重復(fù)勞動(dòng),提升科研效率

驚蟄框架的開(kāi)發(fā),在2019年11月正式開(kāi)始,早期主要是由包括我在內(nèi)的北京大學(xué)的幾位博士生,在老師們指導(dǎo)下進(jìn)行開(kāi)發(fā)。開(kāi)發(fā)之初,我們就將此框架完全開(kāi)源在GitHub上,希望能夠吸引其他感興趣的開(kāi)發(fā)者參與貢獻(xiàn)、共同推進(jìn)。

社區(qū)支持

驚蟄框架在開(kāi)發(fā)過(guò)程中逐漸受到脈沖神經(jīng)網(wǎng)絡(luò)領(lǐng)域研究者的關(guān)注,并得到了許多開(kāi)發(fā)者和開(kāi)源社區(qū)的支持,主要包括:

  1. 一些用戶通過(guò)issue的方式提供建議

  2. 開(kāi)發(fā)者報(bào)告bug,或提交pull request來(lái)修復(fù)bug

  3. 鵬城實(shí)驗(yàn)室的開(kāi)發(fā)者提供了CUDA性能優(yōu)化的建議、補(bǔ)充CUDA代碼、補(bǔ)充文檔教程翻譯

  4. OpenI社區(qū)提供了鏡像服務(wù)器,在國(guó)內(nèi)擁有更快的訪問(wèn)速度;提供了無(wú)限存儲(chǔ)空間的公網(wǎng)存儲(chǔ)服務(wù)器,驚蟄框架據(jù)此建立了部分?jǐn)?shù)據(jù)集的下載鏡像

  5. 鵬城云腦提供了強(qiáng)大的算力支持,驚蟄框架在云腦上進(jìn)行了大量性能實(shí)驗(yàn)和代碼調(diào)試

最后,驚蟄項(xiàng)目還成功申請(qǐng)成為首批啟智社區(qū)優(yōu)秀開(kāi)源項(xiàng)目,作為開(kāi)發(fā)者之一,我也很榮幸地參加了2020年OpenI開(kāi)發(fā)者大會(huì),獲益匪淺。

 

開(kāi)源心得

在開(kāi)源社區(qū)的支持下,經(jīng)過(guò)一年的開(kāi)發(fā),驚蟄框架已經(jīng)頗具規(guī)模,開(kāi)發(fā)者可以通過(guò)使用驚蟄框架迅速搭建起高性能脈沖神經(jīng)網(wǎng)絡(luò)并進(jìn)行深度學(xué)習(xí)。回顧這一年的開(kāi)源經(jīng)歷,我的總結(jié)如下:

  1. 積極擁抱開(kāi)源。眾人拾柴火焰高,個(gè)人的能力終究有限,而開(kāi)源社區(qū)的力量是無(wú)窮的。開(kāi)源的項(xiàng)目可以吸引廣大開(kāi)發(fā)者參與貢獻(xiàn),共同開(kāi)發(fā);開(kāi)源的代碼接受所有用戶的審查,有助于敦促開(kāi)發(fā)者提升代碼質(zhì)量;好的項(xiàng)目還能成為新項(xiàng)目的基石,衍生出更為豐富的功能

  2. 注重教程和文檔的編寫(xiě)。好的開(kāi)源項(xiàng)目要吸引用戶的使用和開(kāi)發(fā)者的參與,就必須注重易用性,不能有太高的上手和開(kāi)發(fā)門(mén)檻,因此需要注重教程和文檔的編寫(xiě)。條理清晰、通俗易懂的教程和文檔是對(duì)用戶和開(kāi)發(fā)者的尊重,只有真心尊重用戶和開(kāi)發(fā)者,他們才會(huì)樂(lè)于使用并為項(xiàng)目做出貢獻(xiàn)

 

]]>
http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e6%96%b9%e7%bb%b4/feed/ 0
參與啟智社區(qū)開(kāi)源項(xiàng)目心得分享——丁健豪 http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e4%b8%81%e5%81%a5%e8%b1%aa/ http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e4%b8%81%e5%81%a5%e8%b1%aa/#respond Wed, 07 Jul 2021 03:25:03 +0000 https://new.openi.org.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e4%b8%81%e5%81%a5%e8%b1%aa/ 能夠參加開(kāi)源項(xiàng)目是一個(gè)機(jī)緣巧合,當(dāng)時(shí)我正好在做ANN轉(zhuǎn)換SNN的研究。有一次開(kāi)會(huì)的時(shí)候,老師突然說(shuō),要不你把你現(xiàn)在的工程實(shí)踐整理一下,放到師兄們開(kāi)發(fā)的開(kāi)源項(xiàng)目里面。當(dāng)時(shí)我正好在寫(xiě)相關(guān)的代碼,因?yàn)閷?shí)驗(yàn)不成功,代碼已經(jīng)改版兩次了。所以毫不猶豫地,我就接下了這個(gè)活,因?yàn)槲抑酪亲龊昧诉@個(gè)模塊,就不需要重復(fù)造輪子了。之前其實(shí)也有相關(guān)的ANN轉(zhuǎn)SNN的代碼。在GitHub上有一個(gè)叫做NeuromorphicProcessorProject

/snn_toolbox的項(xiàng)目。但是這個(gè)項(xiàng)目更多地是面向神經(jīng)形態(tài)硬件的,代碼也沒(méi)有PyTorch版本,主框架是拿keras寫(xiě)的。這就更加給了我開(kāi)發(fā)的動(dòng)力。其次,我覺(jué)得我們作為新一代研究者是有義務(wù)去推廣脈沖神經(jīng)網(wǎng)絡(luò)的。人工神經(jīng)網(wǎng)絡(luò)(ANN)就不用說(shuō)了,大家都很熟悉。而SNN則是脈沖神經(jīng)網(wǎng)絡(luò)(”所謂的第三代神經(jīng)網(wǎng)絡(luò)”),在現(xiàn)在的人工智能語(yǔ)境中其實(shí)沒(méi)有那么受到重視。但是它有很多好的特性沒(méi)有被大家注意到,比如說(shuō)脈沖神經(jīng)網(wǎng)絡(luò)相比于GPU運(yùn)行沒(méi)有那么耗能源,而且在理論上的性能也是能夠等同圖靈機(jī)的。

ANN轉(zhuǎn)換SNN的研究能夠給深度學(xué)習(xí)和脈沖神經(jīng)網(wǎng)絡(luò)架起一座橋梁,我覺(jué)得這是一件特別有意思的東西。在師兄們開(kāi)發(fā)好的框架上,我需要的就是利用現(xiàn)有的神經(jīng)元模型,構(gòu)建SNN,并且完成轉(zhuǎn)換的SNN的仿真工作。SpikingJelly中的神經(jīng)元模型,其實(shí)特別好用,我一直都是用PyTorch的,SpikingJelly的神經(jīng)元定義,就和在PyTorch中定義ReLU一樣,特別順滑。如果需要對(duì)神經(jīng)元進(jìn)行重置,也只需要調(diào)用resnet_net就好,特別方便。

盡管如此,開(kāi)發(fā)過(guò)程中也走了挺多彎路。因?yàn)锳NN-SNN轉(zhuǎn)換需要知道底層的PyTorch拓?fù)洌愃芌esNet這樣的),最重要的就是選擇一個(gè)合適的方式來(lái)處理PyTorch模型中的復(fù)雜拓?fù)洹jP(guān)于處理拓?fù)涞姆桨钙鋵?shí)選擇了很久。最終,選擇了基于另一個(gè)開(kāi)源項(xiàng)目,ONNX。PyTorch中有實(shí)現(xiàn)接口可以無(wú)縫轉(zhuǎn)換到ONNX模型。而且ONNX作為一個(gè)通用公用的模型表示方式可以使得今后其他框架的模型通過(guò)轉(zhuǎn)換為onnx表示之后也可以通過(guò)我們的框架轉(zhuǎn)換。這就使得我們的代碼在未來(lái)可以發(fā)揮更加廣泛的作用。

自從框架開(kāi)源后,我們的貢獻(xiàn)得到了更多人的關(guān)注。我想這就是開(kāi)源的意義所在吧。尤其我們的定位是科研。這意味著更多研究脈沖神經(jīng)網(wǎng)絡(luò)的科研院所可以通過(guò)我們的工作、通過(guò)ANN-SNN轉(zhuǎn)換的工作得到收獲。ANN-SNN轉(zhuǎn)換在SNN今后的研究中,可能更多地是一個(gè)baseline的存在,即便這樣,我想能夠做好這一件事情也是我們的榮幸。

作者:丁健豪

]]>
http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e4%b8%81%e5%81%a5%e8%b1%aa/feed/ 0
參與啟智社區(qū)開(kāi)源項(xiàng)目心得分享——陳彥騏 http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e9%99%88%e5%bd%a6%e9%aa%90/ http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e9%99%88%e5%bd%a6%e9%aa%90/#respond Wed, 07 Jul 2021 03:23:27 +0000 https://new.openi.org.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e9%99%88%e5%bd%a6%e9%aa%90/ 開(kāi)源,顧名思義,指的是開(kāi)放源代碼。開(kāi)放意味著任何人都可以自由閱讀每一行代碼,這給開(kāi)發(fā)者無(wú)形中提出了很高的要求。

個(gè)人開(kāi)發(fā)者或者小團(tuán)隊(duì)往往沒(méi)有“我的代碼是要給別人看的”的意識(shí),而是習(xí)慣于自說(shuō)自話。人們?cè)诰W(wǎng)上聊天時(shí)尚且能夠注意言辭,但在將自己的代碼開(kāi)源時(shí)往往忽略了別人的感受。就以往的經(jīng)歷來(lái)看,許多團(tuán)隊(duì)將開(kāi)源變成了任務(wù),為了開(kāi)源而開(kāi)源,一手復(fù)制粘貼就把自己那套沒(méi)什么注釋和說(shuō)明文檔的代碼扔到開(kāi)源平臺(tái)上。這些代碼作者對(duì)于有人提問(wèn)代碼細(xì)節(jié)常常不予回復(fù),而如果指出了代碼漏洞,有禮貌的尚且能感謝并修補(bǔ),更多的是石沉大海,討論也就沉寂了。

因此開(kāi)發(fā)者大抵需要意識(shí)到,開(kāi)源一方面是為了讓他人更好的學(xué)習(xí),另一方面也是為了吸收他人的合理意見(jiàn)而改進(jìn)代碼。一個(gè)代碼量稍大的項(xiàng)目或多或少都存在bug,被指出了問(wèn)題至少說(shuō)明有人在認(rèn)真閱讀代碼,這也是工作被認(rèn)可的標(biāo)志。

就SpikingJelly的開(kāi)發(fā)經(jīng)歷而言,早期的框架是非常不完善的,代碼倉(cāng)庫(kù)也無(wú)人問(wèn)津。這時(shí)候的框架還停留在僅依靠“托管代碼”來(lái)進(jìn)行版本管理的階段。當(dāng)時(shí)的框架定位在自用,完全忽略了社區(qū)的存在。使我們態(tài)度發(fā)生轉(zhuǎn)變的是,在開(kāi)源一段時(shí)間后,我們注意到了另一個(gè)功能定位完全類似的框架,其開(kāi)發(fā)者是同一科研領(lǐng)域的科研人員。他們的人手非常少,只有兩個(gè)來(lái)自不同國(guó)家的開(kāi)發(fā)者主導(dǎo)開(kāi)發(fā),最初開(kāi)源的時(shí)間也與我們很接近。不同的是,他們已經(jīng)累積了一定量的用戶,這些用戶基本也是來(lái)自同一領(lǐng)域的科研人員,以及一部分正在觀望學(xué)習(xí),想要進(jìn)入這個(gè)研究領(lǐng)域的新生血液。這讓我們開(kāi)始思考:開(kāi)源框架是給誰(shuí)看的?亦即目標(biāo)用戶群體究竟是誰(shuí)。一個(gè)基于科研用途的框架要求使用者至少擁有基本的領(lǐng)域知識(shí),這樣的門(mén)檻實(shí)際上已經(jīng)把目標(biāo)用戶刻畫(huà)得十分清楚了。基于此,在開(kāi)發(fā)時(shí),代碼各個(gè)模塊的功能與科研中的研究對(duì)象必須有非常清晰的對(duì)應(yīng)關(guān)系,不然本領(lǐng)域人員都無(wú)法理解的話,就不可能再有人來(lái)使用了。我們重構(gòu)了代碼的層次,使得這個(gè)映射關(guān)系更清晰,同時(shí)也開(kāi)始撰寫(xiě)文檔,提供一些簡(jiǎn)單的范例。

經(jīng)過(guò)這次重構(gòu)之后,的確出現(xiàn)了少數(shù)人來(lái)關(guān)注開(kāi)源倉(cāng)庫(kù),不過(guò)也僅此而已。沒(méi)有人真正使用起來(lái),同時(shí)我們也注意到,有不少研究者在關(guān)注我們的框架時(shí),使用著國(guó)外的同期開(kāi)發(fā)的框架。于是我們又提出了問(wèn)題:我們的框架有什么優(yōu)勢(shì)?就問(wèn)問(wèn)題提出的當(dāng)時(shí),我們無(wú)法作答。因此必須設(shè)法給框架制造一個(gè)亮點(diǎn)。這也是迄今為止我們一直在努力的方向。

對(duì)于基礎(chǔ)性的編程框架而言,不同的框架往往側(cè)重不同,框架功能的多寡往往也與領(lǐng)域自身的發(fā)展息息相關(guān)。回顧TensorFlow和PyTorch這兩個(gè)深度學(xué)習(xí)框架的發(fā)展史,我們能夠清晰的觀察到性能與編程友好性這兩個(gè)指標(biāo)之間的權(quán)衡貫穿始終。深度學(xué)習(xí)社區(qū)中不少人也同時(shí)使用兩種框架并貢獻(xiàn)代碼,這使得兩者能夠互相借鑒,吸收對(duì)方的優(yōu)秀功能。我們也大概會(huì)遵照類似的路線,在打造自身亮點(diǎn)的同時(shí),吸收現(xiàn)有其它框架的成功經(jīng)驗(yàn)。

作為一個(gè)小規(guī)模團(tuán)隊(duì),我們的開(kāi)源之路道阻且長(zhǎng),需要時(shí)間檢驗(yàn)我們的路線是否正確并不斷修正。也期待能有同領(lǐng)域的科研工作者通過(guò)OpenI發(fā)現(xiàn)與試水,為科研領(lǐng)域傾注源源不斷的動(dòng)力。

作者:陳彥騏

]]>
http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e9%99%88%e5%bd%a6%e9%aa%90/feed/ 0
參與啟智社區(qū)開(kāi)源項(xiàng)目心得分享——嚴(yán)翔東 http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e4%b8%a5%e7%bf%94%e4%b8%9c/ http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e4%b8%a5%e7%bf%94%e4%b8%9c/#respond Wed, 07 Jul 2021 03:21:07 +0000 https://new.openi.org.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e4%b8%a5%e7%bf%94%e4%b8%9c/ 2020年期間我有幸參加了啟智開(kāi)源項(xiàng)目,在這個(gè)活動(dòng)中,我主要參加了啟智磐石的開(kāi)發(fā),最終項(xiàng)目順利上線并開(kāi)始提供服務(wù),這次我想分享一下我參與這個(gè)活動(dòng)以及開(kāi)源社區(qū)的感受與收獲。

毫無(wú)疑問(wèn),參加一個(gè)開(kāi)源項(xiàng)目是非常令人激動(dòng)的,看著開(kāi)源項(xiàng)目一步一步完善直到上線,這花費(fèi)了我不少時(shí)間。但我從中也學(xué)到很多。由于以前并沒(méi)有參加開(kāi)源項(xiàng)目的經(jīng)驗(yàn),因此總結(jié)了一些心得,作為一個(gè)開(kāi)源開(kāi)發(fā)和之前工作中的不同之處。

1、在編碼風(fēng)格方面不需要太嚴(yán)格

編碼風(fēng)格的問(wèn)題,當(dāng)項(xiàng)目中設(shè)計(jì)了過(guò)于復(fù)雜的規(guī)則將增加開(kāi)發(fā)的成本,人們會(huì)實(shí)時(shí)關(guān)注空格縮進(jìn)帶來(lái)的困擾,最好的方式是能用腳本自動(dòng)化處理開(kāi)發(fā)中的編碼風(fēng)格問(wèn)題,比如將常用的eslint,go fmt工具封裝為全局腳本。這樣項(xiàng)目合作中可以很方便的進(jìn)行溝通,而不需要經(jīng)常通過(guò)人工來(lái)修改。最終,代碼的提交以pull request的方式進(jìn)行合并,最終我一點(diǎn)都不擔(dān)心編碼風(fēng)格、測(cè)試會(huì)帶來(lái)問(wèn)題。

2、代碼即文檔

在開(kāi)發(fā)的過(guò)程中我經(jīng)常感受到,相比于不知道何時(shí)更新的文檔,編寫(xiě)有清晰結(jié)構(gòu)的代碼和測(cè)試比文檔更有用處。我可以毫不夸張的說(shuō):好的代碼就是好的文檔。當(dāng)需要給系統(tǒng)增加功能時(shí),最好的熟悉現(xiàn)有功能的方式不是找開(kāi)發(fā)文檔和尋找當(dāng)時(shí)開(kāi)發(fā)文檔的開(kāi)發(fā)人員進(jìn)行詢問(wèn),當(dāng)項(xiàng)目足夠健康時(shí)候,最好的方式就是閱讀結(jié)構(gòu)代碼和測(cè)試。此外,別忘了swagger,當(dāng)我們采用swagger時(shí)能夠快速生成api的文檔,這都能很好的提升開(kāi)發(fā)速度。最后也有例外,比如當(dāng)需要和第三方系統(tǒng)對(duì)接時(shí)文檔的重要性就不言而喻。

3、有高效的溝通方式

在項(xiàng)目開(kāi)發(fā)過(guò)程中,項(xiàng)目進(jìn)度的控制時(shí)至關(guān)重要,我們?cè)陧?xiàng)目開(kāi)發(fā)中溝通采用類似github的模式,由開(kāi)發(fā)或測(cè)試人員在項(xiàng)目管理中添加任務(wù),管理人員指派成員,盡量避免無(wú)意義的會(huì)議,如果溝通的越順暢,我們自己就會(huì)越信任自己的項(xiàng)目。

4、多接觸其他的開(kāi)源項(xiàng)目

經(jīng)常關(guān)注開(kāi)源社區(qū)的項(xiàng)目以及他們的issuse和pr,特別是目前Golang社區(qū)里有很多優(yōu)秀的項(xiàng)目。在他們的issue中和pr中很多人對(duì)項(xiàng)目的理解都很高,他們樂(lè)于分享在項(xiàng)目中遇到問(wèn)題,經(jīng)常閱讀別人已經(jīng)合并的pr已經(jīng)代碼能夠拓寬視野,在遇到問(wèn)題的時(shí)候能從多個(gè)角度思考問(wèn)題。

5.收獲

參加這次的開(kāi)源項(xiàng)目帶給我了很多收獲:

第一是讓我完全參與到開(kāi)源之中,之前只在有些項(xiàng)目中提過(guò)一些pr去解決小問(wèn)題,這次明確了開(kāi)發(fā)目的切身體會(huì)了一次開(kāi)源的感受。

第二在工作中也獲得了很多啟發(fā),包括處理分布式大文件時(shí)候的一些項(xiàng)目經(jīng)驗(yàn),使得我可以更好地理解研究問(wèn)題中的一些概念。

作者:嚴(yán)翔東

]]>
http://www.hualongw.cn/%e5%8f%82%e4%b8%8e%e5%90%af%e6%99%ba%e7%a4%be%e5%8c%ba%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae%e5%bf%83%e5%be%97%e5%88%86%e4%ba%ab-%e4%b8%a5%e7%bf%94%e4%b8%9c/feed/ 0
開(kāi)源分享——優(yōu)秀開(kāi)發(fā)者心得 http://www.hualongw.cn/%e5%bc%80%e6%ba%90%e5%88%86%e4%ba%ab-%e4%bc%98%e7%a7%80%e5%bc%80%e5%8f%91%e8%80%85%e5%bf%83%e5%be%97/ http://www.hualongw.cn/%e5%bc%80%e6%ba%90%e5%88%86%e4%ba%ab-%e4%bc%98%e7%a7%80%e5%bc%80%e5%8f%91%e8%80%85%e5%bf%83%e5%be%97/#respond Wed, 07 Jul 2021 03:18:13 +0000 https://new.openi.org.cn/%e5%bc%80%e6%ba%90%e5%88%86%e4%ba%ab-%e4%bc%98%e7%a7%80%e5%bc%80%e5%8f%91%e8%80%85%e5%bf%83%e5%be%97/ 1.初見(jiàn)開(kāi)源

在2013年的時(shí)候,很榮幸在初期就參與了啟智磐石初期版本的開(kāi)發(fā)和維護(hù),它讓我接觸了Linux,Ruby on Rails,也讓我結(jié)識(shí)了Git,讓我對(duì)開(kāi)源,開(kāi)源社區(qū)有了一個(gè)大概的了解和接觸。

圖標(biāo) 描述已自動(dòng)生成

2. 成為開(kāi)源的受益者

畢業(yè)后的初始幾年,參與了很多不通的項(xiàng)目,各種開(kāi)源的組件給不通的項(xiàng)目的不通需求帶來(lái)了很大便利性,去使用,閱讀開(kāi)元組件的源代碼,查看實(shí)現(xiàn)邏輯,極大的提升了編碼能力。基于豐富的組件和成熟的框架,MVC已經(jīng)簡(jiǎn)化了大部分工作,我們慢慢的向前端轉(zhuǎn)移,JS是開(kāi)源社區(qū)最為活躍的語(yǔ)言,沒(méi)有之一。從Jquery 一路到開(kāi)源的React Native,雖然框架不在變化,解決問(wèn)題的思路也在轉(zhuǎn)變,到虛擬dom 的廣泛應(yīng)用,讓交互的操作也變得簡(jiǎn)單,是各種各樣的開(kāi)源,使得開(kāi)發(fā)變得簡(jiǎn)單和多樣化。

在這期間我也加入了各種開(kāi)源社區(qū),參與了不同的線下開(kāi)發(fā)者大會(huì)。擴(kuò)充了我對(duì)知識(shí)的了解,由于參與過(guò)不同的項(xiàng)目,也嘗試過(guò)TDD,CI。以及使用過(guò)各種敏捷開(kāi)發(fā)工具如Slack以及Trello,他們?yōu)殚_(kāi)源的交流提供了便利性。

3. 開(kāi)源認(rèn)識(shí)和收獲

這些年參與了很多項(xiàng)目,對(duì)于開(kāi)源社區(qū)貢獻(xiàn)遠(yuǎn)遠(yuǎn)小于開(kāi)源社區(qū)對(duì)我的幫助,這正是開(kāi)源社區(qū)的力量,從微小的PR開(kāi)始,從細(xì)小的功能出發(fā),在自己的使用中總結(jié)并貢獻(xiàn)開(kāi)源。最后感謝啟智磐石,引導(dǎo)我走進(jìn)開(kāi)源,參與開(kāi)源,并最終貢獻(xiàn)開(kāi)源。

作者:譚顯波

 

]]>
http://www.hualongw.cn/%e5%bc%80%e6%ba%90%e5%88%86%e4%ba%ab-%e4%bc%98%e7%a7%80%e5%bc%80%e5%8f%91%e8%80%85%e5%bf%83%e5%be%97/feed/ 0
AI算子標(biāo)準(zhǔn)參考實(shí)現(xiàn)優(yōu)秀開(kāi)發(fā)者獲獎(jiǎng)心得 http://www.hualongw.cn/ai%e7%ae%97%e5%ad%90%e6%a0%87%e5%87%86%e5%8f%82%e8%80%83%e5%ae%9e%e7%8e%b0%e4%bc%98%e7%a7%80%e5%bc%80%e5%8f%91%e8%80%85%e8%8e%b7%e5%a5%96%e5%bf%83%e5%be%97/ http://www.hualongw.cn/ai%e7%ae%97%e5%ad%90%e6%a0%87%e5%87%86%e5%8f%82%e8%80%83%e5%ae%9e%e7%8e%b0%e4%bc%98%e7%a7%80%e5%bc%80%e5%8f%91%e8%80%85%e8%8e%b7%e5%a5%96%e5%bf%83%e5%be%97/#respond Wed, 07 Jul 2021 03:14:16 +0000 https://new.openi.org.cn/ai%e7%ae%97%e5%ad%90%e6%a0%87%e5%87%86%e5%8f%82%e8%80%83%e5%ae%9e%e7%8e%b0%e4%bc%98%e7%a7%80%e5%bc%80%e5%8f%91%e8%80%85%e8%8e%b7%e5%a5%96%e5%bf%83%e5%be%97/

在鵬城實(shí)驗(yàn)室實(shí)習(xí)的時(shí)候,主要的工作是開(kāi)發(fā)AI算子標(biāo)準(zhǔn)參考實(shí)現(xiàn)。參考實(shí)現(xiàn)是對(duì)算子標(biāo)準(zhǔn)的補(bǔ)充,旨在提供代碼級(jí)別的語(yǔ)義的規(guī)范,因此正確性是它的最重要屬性。

開(kāi)發(fā)一個(gè)新的算子接口是比較繁瑣的,雖然標(biāo)準(zhǔn)文檔中對(duì)算子接口已有比較明確的定義,但是為了給予標(biāo)準(zhǔn)實(shí)現(xiàn)者最大的優(yōu)化空間,它沒(méi)有規(guī)定實(shí)現(xiàn)的細(xì)節(jié),這也給參考實(shí)現(xiàn)的開(kāi)發(fā)增加了一點(diǎn)難度,因?yàn)槲以陂_(kāi)發(fā)新算子的時(shí)候常常要對(duì)這個(gè)算子重新調(diào)研,找到它的具體實(shí)現(xiàn)邏輯,再開(kāi)發(fā)對(duì)應(yīng)的接口。為了滿足正確性的要求,在開(kāi)發(fā)完一個(gè)新算子后,需要對(duì)它進(jìn)行單元測(cè)試。這時(shí)候應(yīng)盡可能給出不同情況的樣例,然后將參考實(shí)現(xiàn)的結(jié)果與tensorflow、pytorch等框架的結(jié)果進(jìn)行對(duì)比。

開(kāi)發(fā)了一些算子接口以后,我發(fā)現(xiàn)不同算子之間會(huì)存在大量重復(fù)代碼,經(jīng)常有復(fù)雜算子包含了簡(jiǎn)單算子代碼的情況出現(xiàn),比如maxpool會(huì)重復(fù)max的代碼。為了減少代碼開(kāi)發(fā)的工作量、降低代碼維護(hù)難度,我先開(kāi)發(fā)簡(jiǎn)單算子,然后讓復(fù)雜算子中重復(fù)了簡(jiǎn)單算子的代碼的部分替換成直接調(diào)用簡(jiǎn)單算子的方式。這種開(kāi)發(fā)方式可能對(duì)性能要求高的算子庫(kù)不適用,但是參考實(shí)現(xiàn)追求的是正確性,不考慮性能,因此參考實(shí)現(xiàn)的所有算子都可以采取這種方法進(jìn)行開(kāi)發(fā)。后來(lái),參考實(shí)現(xiàn)的維護(hù)難度也降低了不少。

除了參考實(shí)現(xiàn),我們還開(kāi)發(fā)了一套自動(dòng)化測(cè)試框架。對(duì)于不同的算子庫(kù)來(lái)說(shuō),只要遵循了算子標(biāo)準(zhǔn),那么它們對(duì)應(yīng)的算子接口應(yīng)該是差不多的:返回值是狀態(tài)碼,輸入輸出都在參數(shù)列表中,參數(shù)之間的前后順序也一致。對(duì)算子進(jìn)行正確性測(cè)試的邏輯也是一致的,即生成輸入樣例、算子運(yùn)算、對(duì)比結(jié)果。對(duì)于計(jì)算機(jī)來(lái)說(shuō),不同的地方在于數(shù)據(jù)結(jié)構(gòu)(張量等)和函數(shù)名。那么,我們只要把測(cè)試樣例和測(cè)試流程代碼提前寫(xiě)好,讓用戶把自行開(kāi)發(fā)的算子的函數(shù)名和創(chuàng)建張量等數(shù)據(jù)結(jié)構(gòu)的接口注冊(cè)到自動(dòng)化測(cè)試框架中,框架就可以自動(dòng)地對(duì)算子進(jìn)行正確性測(cè)試了。所以,自動(dòng)化測(cè)試框架的關(guān)鍵技術(shù)就是接口注冊(cè)機(jī)制。我們調(diào)研以后發(fā)現(xiàn),Google Test的“類型參數(shù)化”機(jī)制可以讓用戶在觸發(fā)測(cè)試的時(shí)候才指定測(cè)試代碼中某些變量的數(shù)據(jù)類型。我們就把“類型參數(shù)化”作為接口注冊(cè)機(jī)制的原型,通過(guò)宏把用戶的接口封裝到一個(gè)類中,用戶的接口就“假扮”成了一種數(shù)據(jù)類型,然后我們?cè)跍y(cè)試代碼中從對(duì)應(yīng)的變量里提取出用戶的接口,就可以實(shí)現(xiàn)接口注冊(cè)了。

完成以上工作以后,我發(fā)現(xiàn)最大的工作量不是寫(xiě)代碼,而是寫(xiě)代碼之前的調(diào)研和設(shè)計(jì)。我也曾試過(guò)草草調(diào)研之后就著手寫(xiě)代碼,短期內(nèi)似乎是可行的,但是在后期只要遇到一個(gè)bug,我就得花大量時(shí)間去調(diào)試、調(diào)研,得不償失。運(yùn)籌帷幄之中,決勝千里之外。

作者:黎子毅

]]>
http://www.hualongw.cn/ai%e7%ae%97%e5%ad%90%e6%a0%87%e5%87%86%e5%8f%82%e8%80%83%e5%ae%9e%e7%8e%b0%e4%bc%98%e7%a7%80%e5%bc%80%e5%8f%91%e8%80%85%e8%8e%b7%e5%a5%96%e5%bf%83%e5%be%97/feed/ 0
參加啟智開(kāi)發(fā)社區(qū)“人工智能算子開(kāi)發(fā)接口標(biāo)準(zhǔn)參考實(shí)現(xiàn)”項(xiàng)目的心得與收獲 http://www.hualongw.cn/%e5%8f%82%e5%8a%a0%e5%90%af%e6%99%ba%e5%bc%80%e5%8f%91%e7%a4%be%e5%8c%ba%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bd%e7%ae%97%e5%ad%90%e5%bc%80%e5%8f%91%e6%8e%a5%e5%8f%a3%e6%a0%87%e5%87%86%e5%8f%82/ http://www.hualongw.cn/%e5%8f%82%e5%8a%a0%e5%90%af%e6%99%ba%e5%bc%80%e5%8f%91%e7%a4%be%e5%8c%ba%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bd%e7%ae%97%e5%ad%90%e5%bc%80%e5%8f%91%e6%8e%a5%e5%8f%a3%e6%a0%87%e5%87%86%e5%8f%82/#respond Wed, 07 Jul 2021 03:11:35 +0000 https://new.openi.org.cn/%e5%8f%82%e5%8a%a0%e5%90%af%e6%99%ba%e5%bc%80%e5%8f%91%e7%a4%be%e5%8c%ba%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bd%e7%ae%97%e5%ad%90%e5%bc%80%e5%8f%91%e6%8e%a5%e5%8f%a3%e6%a0%87%e5%87%86%e5%8f%82/

在過(guò)去一年的時(shí)間里,我有幸參與了“人工智能算子開(kāi)發(fā)接口標(biāo)準(zhǔn)參考實(shí)現(xiàn)”在啟智社區(qū)的開(kāi)源和研發(fā)工作。從項(xiàng)目有大致雛形、到順利開(kāi)源在OpenI啟智社區(qū)、再到預(yù)期功能模塊不斷迭代完善,這段時(shí)間我們進(jìn)行了大量的調(diào)研和開(kāi)發(fā),克服了很多困難。2020年12月,我們的項(xiàng)目成功獲得了社區(qū)評(píng)選的“優(yōu)秀開(kāi)源項(xiàng)目”榮譽(yù),我個(gè)人也獲評(píng)首屆“優(yōu)秀開(kāi)發(fā)者”和“突出貢獻(xiàn)者”。這些榮譽(yù)對(duì)于團(tuán)隊(duì)來(lái)說(shuō)是巨大的肯定,而對(duì)于我個(gè)人來(lái)言更是一種別樣的經(jīng)歷和收獲。

實(shí)際上,我從研一入學(xué)就開(kāi)始接觸“人工智能算子開(kāi)發(fā)接口標(biāo)準(zhǔn)參考實(shí)現(xiàn)”相關(guān)的工作了。為了盡早確定自己研究生期間的方向,我在完成本科畢業(yè)答辯之后,向研究生導(dǎo)師申請(qǐng)?zhí)崆耙粋€(gè)月來(lái)實(shí)驗(yàn)室實(shí)習(xí)。那時(shí)組里“人工智能算子開(kāi)發(fā)接口標(biāo)準(zhǔn)參考實(shí)現(xiàn)”的預(yù)研工作剛剛起步,項(xiàng)目中“國(guó)產(chǎn)化”、“人工智能”和“標(biāo)準(zhǔn)化”等標(biāo)簽在中美貿(mào)易戰(zhàn)的背景下顯得十分不同尋常,也給我留下了非常深刻的印象,經(jīng)過(guò)一番爭(zhēng)取,我順利的加入到項(xiàng)目中來(lái)。

本以為帶著本科積累的基礎(chǔ)進(jìn)組,我能夠在項(xiàng)目中游刃有余,真正做起來(lái)才發(fā)現(xiàn),標(biāo)準(zhǔn)參考實(shí)現(xiàn)的研發(fā)并不是一件容易的事。特別是在項(xiàng)目開(kāi)源到啟智社區(qū)之后,我們更加意識(shí)到這事情的難度,以及把它做好的重要性。“人工智能算子開(kāi)發(fā)接口標(biāo)準(zhǔn)參考實(shí)現(xiàn)”是“人工智能算子開(kāi)發(fā)接口標(biāo)準(zhǔn)”中非常重要的一部分,它的目的是為標(biāo)準(zhǔn)提供一份基于特定語(yǔ)言的參考實(shí)現(xiàn),從而能夠保證標(biāo)準(zhǔn)語(yǔ)義的完整性。由于同時(shí)涉及到上層AI計(jì)算框架和底層硬件實(shí)現(xiàn),因此完成一個(gè)接口的標(biāo)準(zhǔn)化和實(shí)現(xiàn),往往要對(duì)已有的計(jì)算框架和算子庫(kù)進(jìn)行深入的調(diào)研和總結(jié),必要時(shí)還需研讀算子對(duì)應(yīng)的論文,嘗試對(duì)其進(jìn)行復(fù)現(xiàn)和重構(gòu)。從一個(gè)功能的吃力摸索,到逐漸上手熟練,再到下一個(gè)功能的艱難探索,這樣的認(rèn)知循環(huán)從項(xiàng)目開(kāi)始一直持續(xù)到現(xiàn)在。其中最讓我沉迷的環(huán)節(jié),就是對(duì)一個(gè)功能模塊逐漸熟練之后再對(duì)其進(jìn)行思考和重構(gòu),過(guò)程中我常常發(fā)現(xiàn)自己之前看過(guò)的一些的開(kāi)源代碼思路竟然神奇的解決了現(xiàn)有代碼的關(guān)鍵問(wèn)題,便忍不住為其拍案叫絕。

當(dāng)然,項(xiàng)目并不總是順利的,我也遇到了很多阻礙。比如進(jìn)行項(xiàng)目重構(gòu)時(shí)因?yàn)閷?duì)CMake一竅不通而花費(fèi)數(shù)周時(shí)間啃下《CMake Cookbook》;比如閱讀Eigen和MShadow代碼時(shí)被其中出神入化的C++表達(dá)式模板技術(shù)數(shù)次勸退;再比如數(shù)據(jù)布局中的物理順序和邏輯順序之間的差異區(qū)分,這些問(wèn)題的難度與本科接觸到的項(xiàng)目難度完全不可同日而語(yǔ)。非常幸運(yùn)的是,我的導(dǎo)師楊超老師和師兄敖玉龍都十分盡心盡責(zé),他們會(huì)在每次組會(huì)交流時(shí)從不同角度分析所遇到的問(wèn)題,討論項(xiàng)目的發(fā)展方向,并給我鼓勵(lì)和肯定,讓我得以快速突破瓶頸,獲得成長(zhǎng)。在這里我要特別感謝我的導(dǎo)師和師兄在整個(gè)項(xiàng)目過(guò)程中給我的鼓勵(lì)和幫助。除此之外,我還要感謝我的“戰(zhàn)友”黎子毅同學(xué)、李雨芮師妹以及范睿博師弟,他們做事情認(rèn)真負(fù)責(zé),項(xiàng)目中很多關(guān)鍵功能的實(shí)現(xiàn)都是我們一起經(jīng)過(guò)無(wú)數(shù)次調(diào)研、討論和迭代的結(jié)果,“優(yōu)秀開(kāi)源項(xiàng)目”的榮譽(yù)與他們的努力息息相關(guān)。

除了榮譽(yù),這個(gè)項(xiàng)目也給我?guī)?lái)許多其他收獲。第一是讓我意識(shí)到,復(fù)雜的功能往往是從最簡(jiǎn)單的樣例慢慢拓展迭代而來(lái),一蹴而就是不現(xiàn)實(shí)的。我們的參考實(shí)現(xiàn)前后就經(jīng)歷了好幾次大規(guī)模的重構(gòu),每次重構(gòu)之后再回過(guò)頭對(duì)比上個(gè)版本,都簡(jiǎn)直如云壤之別。第二是在項(xiàng)目中有許多機(jī)會(huì)與專家進(jìn)行交流,這對(duì)于個(gè)人視野的拓展是大有裨益的。不管是線上社區(qū)互動(dòng),還是線下分享提問(wèn),將自己做的事情分享出去,在增強(qiáng)自信心的同時(shí)也學(xué)到了很多新的東西,幫助自己直面不足之處,進(jìn)而有動(dòng)力去做迭代和完善;最后是在這個(gè)過(guò)程中,我逐漸養(yǎng)成了從整個(gè)項(xiàng)目層面進(jìn)行獨(dú)立思考和計(jì)劃的習(xí)慣,這也將為我畢業(yè)后參加工作打下了良好的職業(yè)基礎(chǔ)。

啟智開(kāi)源社區(qū)作為國(guó)家面向新一代人工智能開(kāi)源共性技術(shù)的平臺(tái),為大家提供了同等的機(jī)會(huì)進(jìn)行開(kāi)源項(xiàng)目創(chuàng)作和交流。我很榮幸作為社區(qū)首批開(kāi)發(fā)者,為社區(qū)建設(shè)貢獻(xiàn)一份力量并且獲得認(rèn)可。衷心希望未來(lái)自己有更多機(jī)會(huì)參與進(jìn)來(lái),一起讓啟智社區(qū)越來(lái)越好,讓國(guó)內(nèi)人工智能開(kāi)源生態(tài)越來(lái)越好。

作者:李克森

]]>
http://www.hualongw.cn/%e5%8f%82%e5%8a%a0%e5%90%af%e6%99%ba%e5%bc%80%e5%8f%91%e7%a4%be%e5%8c%ba%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bd%e7%ae%97%e5%ad%90%e5%bc%80%e5%8f%91%e6%8e%a5%e5%8f%a3%e6%a0%87%e5%87%86%e5%8f%82/feed/ 0