嘉興網(wǎng)站搜索優(yōu)化成都最新動(dòng)態(tài)
????????我一直是這樣以為的:pytorch的底層實(shí)現(xiàn)是c++(這一點(diǎn)沒有問題,見下邊的pytorch結(jié)構(gòu)圖),然后這個(gè)部分順理成章的被命名為torch,并提供c++接口,我們在python中常用的是帶有python接口的,所以被稱為pytorch。昨天無意中看到Torch是由lua語言寫的,這讓我十分震驚,完全顛覆了我的想象。所以今天準(zhǔn)備查找并記錄一下pytorch的發(fā)展歷史,與其他框架的聯(lián)系。當(dāng)然以下列舉的部分難以面面俱到,如果您知道哪些有意思的相關(guān)知識(shí),請?jiān)谠u論區(qū)評論。
pytorch結(jié)構(gòu)圖
- 圖片來源 https://golden.com/wiki/PyTorch-NMGD4Y4,如果你想了解有關(guān)PyTorch 中的自動(dòng)微分,PyTorch 基金會(huì)的相關(guān)信息,可以點(diǎn)進(jìn)去看一下。
發(fā)展歷史
????????pytiorch ,如果您想了解pytorch的技術(shù)新聞可點(diǎn)擊pytorch的官方博客。2016年10月,PyTorch開始作為Adam Paszke的實(shí)習(xí)項(xiàng)目。
Torch (基礎(chǔ))
????????Torch 是一個(gè)Facebook的開源機(jī)器學(xué)習(xí)庫、一個(gè)科學(xué)計(jì)算框架和一種基于 Lua 編程語言的腳本語言。它于2002年10月首次發(fā)布。Torch的開發(fā)于2017年轉(zhuǎn)移到PyTorch。
????????同時(shí)期的學(xué)習(xí)框架還有MATL AB和OpenNN等。MATL AB是由美國MathWorks公司出品的一種用于算法開發(fā)、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級技術(shù)計(jì)算語言和交互式環(huán)境。OpenNN開發(fā)于2003年在國際工程數(shù)值方法中心的名為RAMFLOOD的項(xiàng)目中是一個(gè)使用C++編寫的開源類庫。OpenNN的主要優(yōu)點(diǎn)是其高性能。該庫在執(zhí)行速度和內(nèi)存分配方面非常出色。它不斷優(yōu)化和并行化,以最大限度地提高其效率。并且Torch的論文中也提到了Matlab:Torch7: A Matlab-like Environment for Machine Learning,Neural Information Processing Systems. 2011.。
Caffe(聲明式編程風(fēng)格)
????????Caffe(https://github.com/BVLC/caffe)是以C++/CUDA代碼為主的深度學(xué)習(xí)框架,需要進(jìn)行編譯安裝,支持命令行、Python和MATLAB接口、單機(jī)多卡、多機(jī)多卡使用。Caffe的全稱是:Convolutional architecture forfast feature embedding,它是一個(gè)清晰、高效的深度學(xué)習(xí)框架。
????????Caffe是一款知名的深度學(xué)習(xí)框架,由加州大學(xué)伯克利分校的賈揚(yáng)清博士于2013年在Github上發(fā)布。Caffe2018 于 21 年 2022 月底并入 PyTorch。并且在pytorch的開源項(xiàng)目中可以看到名為caffe2的文件夾。
????????Caffe 遵循了神經(jīng)網(wǎng)絡(luò)的一個(gè)簡單假設(shè)——所有的計(jì)算都是以layer(如relu_layer:https://github.com/BVLC/caffe/blob/2a1c552b66f026c7508d390b526f2495ed3be594/src/caffe/layers/relu_layer.cpp)的形式表示的,layer做的事情就是處理一些數(shù)據(jù),然后輸出一些計(jì)算以后的結(jié)果。比如說卷積,就是輸入一個(gè)圖像,然后和這一層的參數(shù)(filter)做卷Captain Jack積,然后輸出卷積的結(jié)果。每一個(gè)layer需要做兩個(gè)計(jì)算:1,Forward是從輸入計(jì)算輸出。2,Backward是從上面給的gradient來計(jì)算相對于輸入的gradient。只要這兩個(gè)函數(shù)實(shí)現(xiàn)了以后,我們就可以把很多層連接成一個(gè)網(wǎng)絡(luò),這個(gè)網(wǎng)絡(luò)做的事情就是輸入我們的數(shù)據(jù)(圖像或者語音等),然后來計(jì)算我們需要的輸出(比如說識(shí)別的label),在training的時(shí)候,我們可以根據(jù)已有的label來計(jì)算loss和gradient,然后用gradient來update網(wǎng)絡(luò)的參數(shù),這個(gè)就是Caffe的一個(gè)基本流程。
????????????????這是一個(gè)官方的caffee的例子:https://github.com/BVLC/caffe/tree/master/examples/mnist ,需要用我們熟悉并使用Google Protobuf定義網(wǎng)絡(luò),定義 MNIST 求解器。Caffe通過“blobs”即以4維數(shù)組的方式存儲(chǔ)和傳遞數(shù)據(jù)。Blobs提供了一個(gè)統(tǒng)一的內(nèi)存接口,用于批量圖像(或其它數(shù)據(jù))的操作,參數(shù)或參數(shù)更新。Models是以Google Protocol Buffers的方式存儲(chǔ)在磁盤上。大型數(shù)據(jù)存儲(chǔ)在LevelDB數(shù)據(jù)庫中。Caffe保留所有的有向無環(huán)層圖,確保正確的進(jìn)行前向傳播和反向傳播。Caffe模型是終端到終端的機(jī)器學(xué)習(xí)系統(tǒng)。一個(gè)典型的網(wǎng)絡(luò)開始于數(shù)據(jù)層,結(jié)束于loss層。通過一個(gè)單一的開關(guān),使其網(wǎng)絡(luò)運(yùn)行在CPU或GPU上。在CPU或GPU上,層會(huì)產(chǎn)生相同的結(jié)果。在使用上,caffe(c++)的使用需要進(jìn)行復(fù)雜的編譯操作(相比后來的pytorch),所以在caffe流行的時(shí)期,有時(shí)一個(gè)實(shí)驗(yàn)室中使用的caffe還是上一屆的師兄安裝的。但是現(xiàn)在仍有許多論文使用caffee框架,知乎上也有問題:caffe停更這么多年,為何現(xiàn)在還有一些論文開源代碼還是使用caffe?
這里引用一下Captain Jack的回答:經(jīng)典的數(shù)據(jù)結(jié)構(gòu)先行的程序架構(gòu)。
- 整個(gè)caffe都是圍繞那個(gè) prototxt 定義來實(shí)現(xiàn)的。
- 沒有太多額外的系統(tǒng)方向的代碼,項(xiàng)目結(jié)構(gòu)清晰,比如:分布式、跨平臺(tái)、通訊、動(dòng)態(tài)dispatch等等。
- 和現(xiàn)在的框架比,那就是最小可用產(chǎn)品。
- 歷史占用率高。
所以,
- 改代碼容易,你改改 PyTorch、掏糞 試試。
- 作為一個(gè)數(shù)據(jù)格式的標(biāo)準(zhǔn),轉(zhuǎn)換比較容易,到現(xiàn)在 onnx 也就和 caffe 的 prototxt 打平手。很多私有、商業(yè)實(shí)現(xiàn)還是以 caffe 格式支持為準(zhǔn)。
- 可能是最重要的:熟悉了懶得學(xué)新的,改改caffe又不是不能用。
Theano(創(chuàng)新觀點(diǎn))
????????Theano(https://github.com/Theano/Theano)是一個(gè)Python庫和優(yōu)化編譯器的開源項(xiàng)目, 用于操作和評估數(shù)學(xué)表達(dá)式,尤其是矩陣值表達(dá)式。其計(jì)算是使用NumPy語法表示,并且編譯后可在CPU/GPU架構(gòu)上高效運(yùn)行。
????????Theano多年來引入很多創(chuàng)新并已被其他框架采用和完善。例如,能夠?qū)⒛P捅硎緸閿?shù)學(xué)表達(dá)式,重寫計(jì)算圖以獲得更好的性能和內(nèi)存使用,在GPU上透明執(zhí)行,高階自動(dòng)微分都已成為主流思想。
????????Keras是一個(gè)由Python編寫的開源人工神經(jīng)網(wǎng)絡(luò)庫,可以作為Tensorflow、Microsoft-CNTK和Theano的高階應(yīng)用程序接口。
CG
-
深度學(xué)習(xí)軟件比較https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software
-
[源碼解析] PyTorch 分布式(1)------歷史和概述 https://www.cnblogs.com/rossiXYZ/p/15496268.html
-
https://alexmoltzau.medium.com/pytorch-governance-and-history-2e5889b79dc1
-
宣布成立 PyTorch 基金會(huì):尖端 AI 框架的新時(shí)代 2022.12 https://ai.meta.com/blog/pytorch-foundation/
-
LUA Torch 回憶錄 https://zhuanlan.zhihu.com/p/380924980?utm_id=0
-
https://en.wikipedia.org/wiki/Torch_(machine_learning)
-
如何評價(jià) Theano?
h ttps://www.zhihu.com/question/35485591 -
Chainer是一個(gè)開源的深度學(xué)習(xí)框架, 完全在NumPy和CuPy Python庫
的基礎(chǔ)上用Python編寫,因其采用邊運(yùn)行邊定義方案以及在大型系統(tǒng)上的性 -
Theano實(shí)現(xiàn)了非常先進(jìn)的優(yōu)化技術(shù)來優(yōu)化完整的計(jì)算圖。它將代數(shù)的各個(gè)方面與優(yōu)化編譯器的各個(gè)方面相結(jié)合。圖形的一部分可以編譯成 C 語言代碼。對于重復(fù)計(jì)算,評估速度至關(guān)重要,Theano通過生成非常有效的代碼來達(dá)到此目的。 https://www.tutorialspoint.com/theano/theano_computational_graph.htm
-
深度學(xué)習(xí)框架——自動(dòng)求導(dǎo) https://www.cnblogs.com/wolfling/p/14919024.html
-
大模型:
-
OneFlow的大模型分片保存和加載策略
-
一塊GPU訓(xùn)練TB級推薦模型不是夢,OneEmbedding性能一騎絕塵
-
大模型訓(xùn)練難于上青天?效率超群、易用的“李白”模型庫來了
-
深度學(xué)習(xí)利器之自動(dòng)微分(1)