飞桨全新发布,核心框架首次完整公开解读
生活随笔
收集整理的這篇文章主要介紹了
飞桨全新发布,核心框架首次完整公开解读
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
導讀:11 月 5 日,在 Wave Summit+2019 深度學習開發者峰會上,飛槳全新發布和重要升級了最新的 21 項進展,在深度學習開發者社區引起了巨大的反響。很多未到場的開發者覺得遺憾,希望可以了解飛槳發布會背后的更多技術細節,因此本號特別策劃了一個系列稿件,分別從核心框架、基礎模型庫、端到端開發套件、工具組件和服務平臺五個層面分別詳細解讀飛槳的核心技術與最新進展,敬請關注。
今天給大家帶來的是飛槳系列解讀文章之核心框架揭秘,本文公布了大量珍貴的資料內容,很多飛槳核心框架的關鍵性內容屬于首次深度解讀,全文 4973 字,預計閱讀時間 8 分鐘。
▲?飛槳全景圖,本文主要針對核心框架部分進行深度解讀第一部分,首先看一下最新版本核心框架的重要升級:
用戶體驗和易用性專項提升,包含全面的文檔優化、報錯信息優化、配置項優化、接口優化、編譯優化、多平臺支持以及編程易用性提升等各方面。?
1.2. 訓練-速度優化
1.3. 預測-部署能力強化
從 Release note 中可以看到,本次的升級點還是比較多的。而且從字里行間也可以看得出,每一個幾十字的點,背后其實是非常重的工作量。但是畢竟缺少細節,我們再來詳細解讀一下發布會 PPT 的重點內容。
本次發布,核心框架在易用性方面全面提升。首先是算子的全面性,對于任何一個算法,基本算子庫是基礎,對于完善和全面性都有很高的要求。飛槳通過這次新版本的發布,基本上可以保證支持全部 AI 主流領域的模型。其次是 API 接口的升級,這里有兩個層面:一是數據層,飛槳本次升級把 IO 的接口做了非常全面的梳理和進一步的呈現,易用性大幅提升。二是分布式訓練的易用性。在單機上開發好的算法,在訓練時面對非常大規模數據時需要進行分布式訓練,代碼也需要調整,對于不了解分布式訓練的開發者困難很大。通過本次發布,只需要新增 5 行代碼再加上對于執行語句的少量修改,就可以把單機版改成分布式并行訓練。
最后,根據開發者持續以來的反饋,飛槳不斷的完善文檔的內容,并且提供中英雙語文檔。本次發布,飛槳在中文的文檔上進行了非常多的升級和完善,本著打造藝術品的標準來打磨 API 文檔。可以為開發者提供更清晰,有示例,甚至有時候會得到一些靈感的文檔。
2.2.分布式訓練的高性能
分布式訓練的高性能,是飛槳的核心優勢技術之一,這也與飛槳本身就是源于大數據的產業實踐分不開的,在 CPU 和 GPU 方向分布式性能都有很好的性能優勢。通過 GPU 分布式訓練下的 Benchmark,可以看到在 8x8 v100 硬件條件下,相比其他主流實現可以獲得 20%-100% 的速度提升。通過多機分布式 CPU 訓練 Benchmark 比較,基于飛槳自研的高性能異步訓練算法 Geo-SGD,可以看到分布式訓練在 Word2Vec 和 CTR 任務中,飛槳吞吐量最大可達對標產品的 6 倍以上。
同時飛槳與英特爾也開展密切合作,在最新的英特爾至強可擴展處理器上,在保證精度基本不變的情況下,通過 INT8 的量化訓練,性能的提升也能達到 2 到 3.7 倍,非常適合實際業務使用。
2.3. 打通端到端的部署全流程除了開發的易用性和訓練的高性能,飛槳在打通端到端部署方面,也發布了一些最新進展。
從整個端到端部署涉及到的工作內容上看,需要做的工作還是非常多的,首先就是要適配不同的硬件。在最新的版本里面,飛槳新增了對于華為 NPU 的適配,以及對于邊緣設備上 FPGA 的適配。后續還會進一步發布跟寒武紀和比特大陸適配,敬請期待。從整個打通端到端部署的流程來看,在搭建模型和訓練模型之后,會根據部署環境的特點,對模型做壓縮處理,其目標包括壓縮模型存儲體積和提升推理速度。
目前針對移動設備端環境常見的一個常用且比較成熟的壓縮策略是 INT8 量化,該方法可以大幅壓縮模型的體積,并提升預測效率。飛槳在上一個版本已經支持了剪枝、量化、蒸餾等壓縮方法。這次的升級重點是優化和增強自動化網絡結構設計,我們直接把候選模型在具體硬件上的推理速度作為搜索的一個約束條件。基于這種策略,搜索到的模型可能更好的適配目標硬件,在保證精度的情況下獲得更多的速度收益。
在 ImageNet1000 類分類任務上,通過 Light-NAS 搜索到的模型,精度無損,在某款移動端硬件上的實際推理速度提升了 20%。除了模型壓縮策略增強之外,PaddleSlim 通過打通檢測庫提供了更豐富的模型支持,同時保證了壓縮產出的模型支持用 Paddle Lite 直接部署。了解完 PaddleSlim 的升級點之后,Paddle Lite 2.0 版本也是正式發布。主要特點:
一是非常高的易用性。在移動端開發應用程序或者是在邊緣設備上開發應用程序涉及到非常多的設備環境的連調工作,Paddle Lite 里面提供大量的示例代碼,以及操作的指南,方便大家能夠快速的去實現在不同的設備場景上進行部署。二是非常廣泛的硬件支持。Paddle Lite 目前已經支持了 8 種主流的硬件,同時還支持華為的 NPU 和邊緣設備的 FPGA。而且 Paddle Lite 整個架構設計非常便于新硬件的擴展。新的硬件適配,只要去 Paddle Lite 里面新增這個硬件相關的 Kernel 就可以了,與框架代碼是高度解耦的。可以非常便捷的適配新硬件。三是性能優勢。Paddle Lite 一個非常顯著的優勢是在性能方面處在領先狀態。性能的優勢不僅僅是在 FP32 這種場景下,尤其是在現在移動端已經廣泛普及的 INT8 上,領先優勢會更加明顯。??
對比不同的推理框架使用 MobileNetV1 在 ARM-v8 上面推理延時,在 FP32 上大家可以看到,Paddle Lite 2.0 已經具備全面領先的優勢。而右側 INT8 的條件下,性能優勢更加顯著。在真正的移動端下的推理場景,真正達到的性能的優勢對于實際的應用是至關重要的,時延上的優勢直接關系到最終開發產品的用戶體驗。
飛槳深度學習框架核心技術,主要包括前端語言、組網編程范式、核心架構、算子庫以及高效率計算核心五部分。
3.1. 核心架構
飛槳核心架構采用分層設計,如圖 3 所示。前端應用層考慮靈活性,采用 Python 實現,包括了組網 API、IO API、OptimizerAPI 和執行 API 等完備的開發接口;框架底層充分考慮性能,采用 C++ 來實現。框架內核部分,主要包含執行器、存儲管理和中間表達優化;內部表示方面,包含網絡表示(ProgramDesc)、數據表示(Variable)和計算表示(Operator)幾個層面。框架向下對接各種芯片架構,可以支持深度學習模型在不同異構設備上的高效運行。
3.2. 關鍵技術
“Program”的定義過程就像在寫一段通用程序。使用聲明式編程時,相當于將“Program”先編譯再執行,可類比靜態圖模式。首先根據網絡定義代碼構造“Program”,然后將“Program”編譯優化,最后通過執行器執行“Program”,具備高效性能;同時由于存在靜態的網絡結構信息,能夠方便地完成模型的部署上線。而命令式編程,相當于將“Program”解釋執行,可視為動態圖模式,更加符合用戶的編程習慣,代碼編寫和調試也更加方便。飛槳后面會增強靜態圖模式下的調試功能,方便開發調試;同時提升動態圖模式的運行效率,加強動態圖自動轉靜態圖的能力,快速完成部署上線;同時更加完善接口的設計和功能,整體提升框架易用性。
顯存分配機制:原生的 CUDA 系統調用(cudaMalloc)和釋放(cudaFree)均是同步操作,非常耗時。為了加速顯存分配,飛槳實現了顯存預分配的策略,具體方式如圖 4 所示。設置一個顯存池 chunk,定義其大小為 chunk_size。若分配需求 requested_size 不超過 chunk_size,則框架會預先分配 chunk_size 大小的顯存池 chunk,并從中分出 requested_size 大小的塊返回。之后每次申請顯存都會從 chunk 中分配。若 requested_size 大于 chunk_size,則框架會調用 cudaMalloc 分配 requested_size 大小的顯存。chunk_size 一般依據初始可用顯存大小按比例確定。同時飛槳也支持按實際顯存占用大小的動態自增長的顯存分配方式,可以更精準地控制顯存使用,以節省對顯存占用量,方便多任務同時運行。
顯存垃圾及時回收機制:顯存垃圾及時回收機制 GC(Garbage Collection)的原理是在網絡運行階段釋放無用變量的顯存空間,達到節省顯存的目的。GC 策略會積攢一定大小的顯存垃圾后再統一釋放。GC 內部會根據變量占用的顯存大小,對變量進行降序排列,且僅回收前面滿足占用大小閾值以上的變量顯存。GC 策略默認生效于使用 Executor 或 Parallel Executor 做模型訓練預測時。
Operator 內部顯存復用機制:Operator 內部顯存復用機制(Inplace)的原理是 Operator 的輸出復用 Operator 輸入的顯存空間。例如,數據整形(reshape)操作的輸出和輸入可復用同一片顯存空間。Inplace 策略可通過構建策略(BuildStrategy)設置生效于 Parallel Executor 的執行過程中。
飛槳的算子庫除了在數量上進行擴充之外,還在功能性、易用性、便捷開發上持續增強:例如針對圖像生成任務,支持生成算法中的梯度懲罰功能,即支持算子的二次反向能力;而對于復雜網絡的搭建,將會提供更高級的模塊化算子,使模型構建更加簡單的同時也能獲得更好的性能;對于創新型網絡結構的需求,將會進一步簡化算子的自定義實現方式,支持 Python 算子實現,對性能要求高的算子提供更方便的、與框架解耦的 C++ 實現方式,可使得開發者快速實現自定義的算子,驗證算法。
Operator 粒度層面:飛槳提供了大量不同粒度的 Operator(Op)實現。細粒度的 Op 能夠提供更好的靈活性,而粗粒度的 Op 則能提供更好的計算性能。飛槳提供了諸如 softmax_with_cross_entropy 等組合功能 Op,也提供了像 fusion_conv_inception、fused_elemwise_activation 等融合類 Operator。其中大部分普通 Op,用戶可以直接通過 Python API 配置使用,而很多融合的 Op,執行器在計算圖優化的時候將會自動進行子圖匹配和替換。
核函數實現層面:飛槳主要通過兩種方式來實現對不同硬件的支持:人工調優的核函數實現和集成供應商優化庫。
針對 CPU 平臺,飛槳一方面提供了使用指令 Intrinsic 函數和借助于 xbyak JIT 匯編器實現的原生 Operator,深入挖掘編譯時和運行時性能;另一方面,飛槳通過引入 OpenBLAS、Intel? MKL、Intel? MKL-DNN 和 nGraph,對 Intel CXL 等新型芯片提供了性能保證。
針對 GPU 平臺,飛槳既為大部分 Operator 用 CUDA C 實現了經過人工精心優化的核函數,也集成了 cuBLAS、cuDNN等供應商庫的新接口、新特性。
注:以上核心框架解讀部分內容已經正式發表在中英文期刊《數據與計算發展前沿》(CN 10-1649/TP,ISSN 2096-742X)本文對于飛槳核心框架的深度解讀,也是飛槳全新發布完整解讀的系列文章之(一),后續還會繼續推出五篇系列文章,敬請期待。想與更多的深度學習開發者交流,請加入飛槳官方 QQ 群:796771754。
如果您想詳細了解更多飛槳 PaddlePaddle 的相關內容,請參閱以下文檔。
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
今天給大家帶來的是飛槳系列解讀文章之核心框架揭秘,本文公布了大量珍貴的資料內容,很多飛槳核心框架的關鍵性內容屬于首次深度解讀,全文 4973 字,預計閱讀時間 8 分鐘。
▲?飛槳全景圖,本文主要針對核心框架部分進行深度解讀第一部分,首先看一下最新版本核心框架的重要升級:
本次核心框架重要升級
1.1. 開發-易用性提升用戶體驗和易用性專項提升,包含全面的文檔優化、報錯信息優化、配置項優化、接口優化、編譯優化、多平臺支持以及編程易用性提升等各方面。?
1.2. 訓練-速度優化
訓練框架進一步優化了速度,完善了顯存優化機制,并支持在框架外部自定義 C++/CUDA OP。新增了大量 OP,并從多個維度優化了大量存量 OP,包括兼容性、行為一致性、功能提升等方面。?
分布式訓練新增 LocalSGD、GEO-SGD 等策略,大規模同步訓練、異步訓練速度繼續提升,并支持 K8S + Volcano 任務提交。?
1.3. 預測-部署能力強化
發布 Paddle Lite 2.0,定位高性能、多平臺、輕量化的端側預測引擎,并可作為服務器端預測庫的加速庫。
PaddleSlim 強化了量化訓練功能,增加了基于硬件的小模型搜索功能。?
從 Release note 中可以看到,本次的升級點還是比較多的。而且從字里行間也可以看得出,每一個幾十字的點,背后其實是非常重的工作量。但是畢竟缺少細節,我們再來詳細解讀一下發布會 PPT 的重點內容。
飛槳核心框架升級重點圖文解讀
2.1.核心框架易用性的全面提升本次發布,核心框架在易用性方面全面提升。首先是算子的全面性,對于任何一個算法,基本算子庫是基礎,對于完善和全面性都有很高的要求。飛槳通過這次新版本的發布,基本上可以保證支持全部 AI 主流領域的模型。其次是 API 接口的升級,這里有兩個層面:一是數據層,飛槳本次升級把 IO 的接口做了非常全面的梳理和進一步的呈現,易用性大幅提升。二是分布式訓練的易用性。在單機上開發好的算法,在訓練時面對非常大規模數據時需要進行分布式訓練,代碼也需要調整,對于不了解分布式訓練的開發者困難很大。通過本次發布,只需要新增 5 行代碼再加上對于執行語句的少量修改,就可以把單機版改成分布式并行訓練。
最后,根據開發者持續以來的反饋,飛槳不斷的完善文檔的內容,并且提供中英雙語文檔。本次發布,飛槳在中文的文檔上進行了非常多的升級和完善,本著打造藝術品的標準來打磨 API 文檔。可以為開發者提供更清晰,有示例,甚至有時候會得到一些靈感的文檔。
2.2.分布式訓練的高性能
分布式訓練的高性能,是飛槳的核心優勢技術之一,這也與飛槳本身就是源于大數據的產業實踐分不開的,在 CPU 和 GPU 方向分布式性能都有很好的性能優勢。通過 GPU 分布式訓練下的 Benchmark,可以看到在 8x8 v100 硬件條件下,相比其他主流實現可以獲得 20%-100% 的速度提升。通過多機分布式 CPU 訓練 Benchmark 比較,基于飛槳自研的高性能異步訓練算法 Geo-SGD,可以看到分布式訓練在 Word2Vec 和 CTR 任務中,飛槳吞吐量最大可達對標產品的 6 倍以上。
同時飛槳與英特爾也開展密切合作,在最新的英特爾至強可擴展處理器上,在保證精度基本不變的情況下,通過 INT8 的量化訓練,性能的提升也能達到 2 到 3.7 倍,非常適合實際業務使用。
2.3. 打通端到端的部署全流程除了開發的易用性和訓練的高性能,飛槳在打通端到端部署方面,也發布了一些最新進展。
從整個端到端部署涉及到的工作內容上看,需要做的工作還是非常多的,首先就是要適配不同的硬件。在最新的版本里面,飛槳新增了對于華為 NPU 的適配,以及對于邊緣設備上 FPGA 的適配。后續還會進一步發布跟寒武紀和比特大陸適配,敬請期待。從整個打通端到端部署的流程來看,在搭建模型和訓練模型之后,會根據部署環境的特點,對模型做壓縮處理,其目標包括壓縮模型存儲體積和提升推理速度。
目前針對移動設備端環境常見的一個常用且比較成熟的壓縮策略是 INT8 量化,該方法可以大幅壓縮模型的體積,并提升預測效率。飛槳在上一個版本已經支持了剪枝、量化、蒸餾等壓縮方法。這次的升級重點是優化和增強自動化網絡結構設計,我們直接把候選模型在具體硬件上的推理速度作為搜索的一個約束條件。基于這種策略,搜索到的模型可能更好的適配目標硬件,在保證精度的情況下獲得更多的速度收益。
在 ImageNet1000 類分類任務上,通過 Light-NAS 搜索到的模型,精度無損,在某款移動端硬件上的實際推理速度提升了 20%。除了模型壓縮策略增強之外,PaddleSlim 通過打通檢測庫提供了更豐富的模型支持,同時保證了壓縮產出的模型支持用 Paddle Lite 直接部署。了解完 PaddleSlim 的升級點之后,Paddle Lite 2.0 版本也是正式發布。主要特點:
一是非常高的易用性。在移動端開發應用程序或者是在邊緣設備上開發應用程序涉及到非常多的設備環境的連調工作,Paddle Lite 里面提供大量的示例代碼,以及操作的指南,方便大家能夠快速的去實現在不同的設備場景上進行部署。二是非常廣泛的硬件支持。Paddle Lite 目前已經支持了 8 種主流的硬件,同時還支持華為的 NPU 和邊緣設備的 FPGA。而且 Paddle Lite 整個架構設計非常便于新硬件的擴展。新的硬件適配,只要去 Paddle Lite 里面新增這個硬件相關的 Kernel 就可以了,與框架代碼是高度解耦的。可以非常便捷的適配新硬件。三是性能優勢。Paddle Lite 一個非常顯著的優勢是在性能方面處在領先狀態。性能的優勢不僅僅是在 FP32 這種場景下,尤其是在現在移動端已經廣泛普及的 INT8 上,領先優勢會更加明顯。??
對比不同的推理框架使用 MobileNetV1 在 ARM-v8 上面推理延時,在 FP32 上大家可以看到,Paddle Lite 2.0 已經具備全面領先的優勢。而右側 INT8 的條件下,性能優勢更加顯著。在真正的移動端下的推理場景,真正達到的性能的優勢對于實際的應用是至關重要的,時延上的優勢直接關系到最終開發產品的用戶體驗。
飛槳核心框架技術完整公開解讀
飛槳深度學習框架核心技術,主要包括前端語言、組網編程范式、核心架構、算子庫以及高效率計算核心五部分。
3.1. 核心架構
飛槳核心架構采用分層設計,如圖 3 所示。前端應用層考慮靈活性,采用 Python 實現,包括了組網 API、IO API、OptimizerAPI 和執行 API 等完備的開發接口;框架底層充分考慮性能,采用 C++ 來實現。框架內核部分,主要包含執行器、存儲管理和中間表達優化;內部表示方面,包含網絡表示(ProgramDesc)、數據表示(Variable)和計算表示(Operator)幾個層面。框架向下對接各種芯片架構,可以支持深度學習模型在不同異構設備上的高效運行。
3.2. 關鍵技術
(1)前端語言
為了方便用戶使用,選擇 Python 作為模型開發和執行調用的主要前端語言,并提供了豐富的編程接口 API。Python 作為一種解釋型編程語言,代碼修改不需要重新編譯就可以直接運行,使用和調試非常方便,并且擁有豐富的第三方庫和語法糖,擁有眾多的用戶群體。同時為了保證框架的執行效率,飛槳底層實現采用 C++。對于預測推理,為方便部署應用,則同時提供了 C++ 和 Java API。
(2)組網編程范式
飛槳中同時兼容命令式編程(動態圖)與聲明式編程(靜態圖)兩種編程范式,飛槳以程序化“Program”的形式動態描述神經網絡模型計算過程,并提供對順序、分支和循環三種執行結構的支持,可以組合描述任意復雜的模型,并可在內部自動轉化為中間表示的描述語言。
“Program”的定義過程就像在寫一段通用程序。使用聲明式編程時,相當于將“Program”先編譯再執行,可類比靜態圖模式。首先根據網絡定義代碼構造“Program”,然后將“Program”編譯優化,最后通過執行器執行“Program”,具備高效性能;同時由于存在靜態的網絡結構信息,能夠方便地完成模型的部署上線。而命令式編程,相當于將“Program”解釋執行,可視為動態圖模式,更加符合用戶的編程習慣,代碼編寫和調試也更加方便。飛槳后面會增強靜態圖模式下的調試功能,方便開發調試;同時提升動態圖模式的運行效率,加強動態圖自動轉靜態圖的能力,快速完成部署上線;同時更加完善接口的設計和功能,整體提升框架易用性。
(3)顯存管理
飛槳為用戶提供技術領先、簡單易用、兼顧顯存回收與復用的顯存優化策略,在很多模型上的表現優于其他開源框架。
顯存分配機制:原生的 CUDA 系統調用(cudaMalloc)和釋放(cudaFree)均是同步操作,非常耗時。為了加速顯存分配,飛槳實現了顯存預分配的策略,具體方式如圖 4 所示。設置一個顯存池 chunk,定義其大小為 chunk_size。若分配需求 requested_size 不超過 chunk_size,則框架會預先分配 chunk_size 大小的顯存池 chunk,并從中分出 requested_size 大小的塊返回。之后每次申請顯存都會從 chunk 中分配。若 requested_size 大于 chunk_size,則框架會調用 cudaMalloc 分配 requested_size 大小的顯存。chunk_size 一般依據初始可用顯存大小按比例確定。同時飛槳也支持按實際顯存占用大小的動態自增長的顯存分配方式,可以更精準地控制顯存使用,以節省對顯存占用量,方便多任務同時運行。
顯存垃圾及時回收機制:顯存垃圾及時回收機制 GC(Garbage Collection)的原理是在網絡運行階段釋放無用變量的顯存空間,達到節省顯存的目的。GC 策略會積攢一定大小的顯存垃圾后再統一釋放。GC 內部會根據變量占用的顯存大小,對變量進行降序排列,且僅回收前面滿足占用大小閾值以上的變量顯存。GC 策略默認生效于使用 Executor 或 Parallel Executor 做模型訓練預測時。
Operator 內部顯存復用機制:Operator 內部顯存復用機制(Inplace)的原理是 Operator 的輸出復用 Operator 輸入的顯存空間。例如,數據整形(reshape)操作的輸出和輸入可復用同一片顯存空間。Inplace 策略可通過構建策略(BuildStrategy)設置生效于 Parallel Executor 的執行過程中。
(4)算子庫
飛槳算子庫目前提供了 500 余個算子,并在持續增加,能夠有效支持自然語言處理、計算機視覺、語音等各個方向模型的快速構建。同時提供了高質量的中英文文檔,更方便國內外開發者學習使用。文檔中對每個算子都進行了詳細描述,包括原理介紹、計算公式、論文出處,詳細的參數說明和完整的代碼調用示例。飛槳的算子庫覆蓋了深度學習相關的廣泛的計算單元類型。比如提供了多種循環神經網絡(Recurrent Neural Network,RNN),多種卷積神經網絡(Convolutional Neural Networks, CNN)及相關操作,如深度可分離卷積(Depthwise Deparable Convolution)、空洞卷積(Dilated Convolution)、可變形卷積 (Deformable Convolution)、池化興趣區域池化及其各種擴展、分組歸一化、多設備同步的批歸一化,另外涵蓋多種損失函數和數值優化算法,可以很好地支持自然語言處理的語言模型、閱讀理解、對話模型、視覺的分類、檢測、分割、生成、光學字符識別(Optical Character Recognition,OCR)、OCR 檢測、姿態估計、度量學習、人臉識別、人臉檢測等各類模型。飛槳的算子庫除了在數量上進行擴充之外,還在功能性、易用性、便捷開發上持續增強:例如針對圖像生成任務,支持生成算法中的梯度懲罰功能,即支持算子的二次反向能力;而對于復雜網絡的搭建,將會提供更高級的模塊化算子,使模型構建更加簡單的同時也能獲得更好的性能;對于創新型網絡結構的需求,將會進一步簡化算子的自定義實現方式,支持 Python 算子實現,對性能要求高的算子提供更方便的、與框架解耦的 C++ 實現方式,可使得開發者快速實現自定義的算子,驗證算法。
(5)高效率計算核心
飛槳對核心計算的優化,主要體現在以下兩個層面。Operator 粒度層面:飛槳提供了大量不同粒度的 Operator(Op)實現。細粒度的 Op 能夠提供更好的靈活性,而粗粒度的 Op 則能提供更好的計算性能。飛槳提供了諸如 softmax_with_cross_entropy 等組合功能 Op,也提供了像 fusion_conv_inception、fused_elemwise_activation 等融合類 Operator。其中大部分普通 Op,用戶可以直接通過 Python API 配置使用,而很多融合的 Op,執行器在計算圖優化的時候將會自動進行子圖匹配和替換。
核函數實現層面:飛槳主要通過兩種方式來實現對不同硬件的支持:人工調優的核函數實現和集成供應商優化庫。
針對 CPU 平臺,飛槳一方面提供了使用指令 Intrinsic 函數和借助于 xbyak JIT 匯編器實現的原生 Operator,深入挖掘編譯時和運行時性能;另一方面,飛槳通過引入 OpenBLAS、Intel? MKL、Intel? MKL-DNN 和 nGraph,對 Intel CXL 等新型芯片提供了性能保證。
針對 GPU 平臺,飛槳既為大部分 Operator 用 CUDA C 實現了經過人工精心優化的核函數,也集成了 cuBLAS、cuDNN等供應商庫的新接口、新特性。
注:以上核心框架解讀部分內容已經正式發表在中英文期刊《數據與計算發展前沿》(CN 10-1649/TP,ISSN 2096-742X)本文對于飛槳核心框架的深度解讀,也是飛槳全新發布完整解讀的系列文章之(一),后續還會繼續推出五篇系列文章,敬請期待。想與更多的深度學習開發者交流,請加入飛槳官方 QQ 群:796771754。
如果您想詳細了解更多飛槳 PaddlePaddle 的相關內容,請參閱以下文檔。
官網地址:https://www.paddlepaddle.org.cn/
核心框架:https://github.com/PaddlePaddle/Paddle
分布式訓練:https://github.com/PaddlePaddle/Fleet
PaddleLite:https://github.com/PaddlePaddle/Paddle-Lite
PaddleSlim:https://github.com/PaddlePaddle/models/tree/release/1.6/PaddleSlim
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的飞桨全新发布,核心框架首次完整公开解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么买科创板的股票
- 下一篇: 无人驾驶板块股票一览 诸多机构看多的行业