0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Facebook發(fā)布的Pytorch 1.0和新開(kāi)源的圍棋AI項(xiàng)目

zhKF_jqr_AI ? 來(lái)源:未知 ? 作者:李倩 ? 2018-07-02 08:52 ? 次閱讀

編者按:今天是Facebook F8年度開(kāi)發(fā)者大會(huì)的第二天,繼5月2日發(fā)布約會(huì)功能、新隱私保護(hù)功能、Oculus Go VR頭盔等消息后,3日Facebook又帶來(lái)了機(jī)器學(xué)習(xí)方面的一些重大更新,包括即將在夏季末發(fā)布的Pytorch 1.0和新開(kāi)源的圍棋AI項(xiàng)目。以下是論智編譯的Pytorch 1.0公告。

Pytorch源:pytorch.org/2018/05/02/road-to-1.0.html

Caffe2源:caffe2.ai/blog/2018/05/02/Caffe2PyTorch1_0.html

Caffe2公告摘要

構(gòu)建和包

在Pytorch 1.0中,Caffe2和PyTorch的python軟件包(在pip和conda中)會(huì)合并;

繼續(xù)提供本地庫(kù)和python擴(kuò)展作為單獨(dú)的安裝選項(xiàng)(和Caffe2和PyTorch現(xiàn)狀一樣);

所有交叉編譯的構(gòu)建模式均支持Caffe2平臺(tái)(iOS,Android,Raspbian,Tegra等),將繼續(xù)拓展新平臺(tái)支持。

模型生成(前端)

Caffe2的圖形構(gòu)建API(brew,core.Net)繼續(xù)保留,現(xiàn)有的序列化模型NetDefs會(huì)擁有向后兼容性;

nn.Module-like將成為構(gòu)建神經(jīng)網(wǎng)絡(luò)的首選。Pytorch 1.0會(huì)用“混合前端”取代現(xiàn)有前端,它利用跟蹤和編譯功能,能以圖形格式(兼容Caffe2的NetDef和ONNX)提取完全序列化的模型,可用于高效部署。

Caffe2和PyTorch的運(yùn)算符將合并使用;

PyTorch 1.0能本地支持ONNX,連接其他框架或庫(kù)以便提取、傳遞模型。

精簡(jiǎn)和整合

Caffe2高度可擴(kuò)展的執(zhí)行引擎(各種加速后端和庫(kù)集成和可伸縮圖執(zhí)行器)基本保持不變,還能與Python程序段交互操作,以實(shí)現(xiàn)快速原型設(shè)計(jì);

Caffe2現(xiàn)有的predictor支持會(huì)成為本地模型在加速硬件支持上的主要手段(數(shù)據(jù)中心和移動(dòng)設(shè)備可用)。

硬件集成和加速庫(kù)支持

在PyTorch 1.0軟件包的原型環(huán)境中直接提供Caffe2的各種設(shè)備支持和運(yùn)行集成;

保留Caffe2針對(duì)加速硬件或完整圖形運(yùn)行的大部分接口代碼,現(xiàn)有集成仍然有效。對(duì)于圖形運(yùn)行,官方正致力于ONNX的可視化。

Pytorch公告全文

親愛(ài)的Pytorch用戶(hù),

在這篇文章中,我們想帶你預(yù)覽一下Pytorch 1.0的發(fā)展路線(xiàn)。Pytorch 1.0是Pytorch的下一代版本,在過(guò)去一年中,我們陸續(xù)推出了PyTorch0.2、0.3和0.4,并把原先類(lèi)似[Torch + Chainer]的接口轉(zhuǎn)換成了更簡(jiǎn)潔的形式,我們還引入double-backward、類(lèi)似numpy的函數(shù)、高級(jí)索引,同時(shí)刪除了變量樣板。截至目前,我們確信所有API都處于穩(wěn)定合理的狀態(tài),因此現(xiàn)在也是時(shí)候可以放心發(fā)布Pytorch 1.0了。

但是,Pytorch 1.0不僅僅意味著更高的穩(wěn)定性。

Pytorch最大的優(yōu)勢(shì)之一是一流的Python集成水平,強(qiáng)制性的風(fēng)格、簡(jiǎn)單的API選項(xiàng),這些都是它方便用戶(hù)研究和操作的重要因素。但它也有不少缺點(diǎn),其中最大的一點(diǎn)是“production-support”。這意味著為了更高效地大規(guī)模運(yùn)行神經(jīng)網(wǎng)絡(luò),用戶(hù)必須對(duì)模型進(jìn)行大量處理:

做大型項(xiàng)目時(shí),用戶(hù)需要把模型導(dǎo)出到C++;

要針對(duì)iPhone、Android、Qualcomm等其他移動(dòng)設(shè)備系統(tǒng)和硬件進(jìn)行優(yōu)化;

為了更快地推斷,用戶(hù)需要使用更高效的數(shù)據(jù)布局和執(zhí)行內(nèi)核融合(節(jié)省10%地耗時(shí)和內(nèi)存占用已經(jīng)稱(chēng)得上是個(gè)巨大勝利);

量化精度(如8-bit推斷)。

許多初創(chuàng)公司、大公司以及一些想用PyTorch構(gòu)建產(chǎn)品的個(gè)人用戶(hù)都曾向我們要求提供產(chǎn)品支持。在Facebook(PyTorch最大的利益相關(guān)者),我們已經(jīng)有了Caffe2這個(gè)面向移動(dòng)設(shè)備的平臺(tái),它曾在超過(guò)10億部手機(jī)上運(yùn)行,橫跨8代iPhone和6代Android CPU架構(gòu)。為了能更好地支持Intel / ARM、TensorRT,它也優(yōu)化過(guò)服務(wù)器推斷??紤]到PyTorch團(tuán)隊(duì)想開(kāi)發(fā)的內(nèi)容和Caffe2已經(jīng)成熟的功能基本一致,因此我們決定結(jié)合PyTorch和Caffe2,讓后者為PyTorch提供生產(chǎn)支持。

有了它,研究人員和終端用戶(hù)就能在不產(chǎn)生可用性問(wèn)題的基礎(chǔ)上進(jìn)行產(chǎn)品設(shè)計(jì),而這需要?jiǎng)?chuàng)造性的解決方案。

生產(chǎn)!= 研究人員的痛點(diǎn)

提高PyTorch的生產(chǎn)能力意味著要引入更復(fù)雜的API和更多的可配置選項(xiàng)的數(shù)量。詳細(xì)來(lái)說(shuō),就是一個(gè)配置內(nèi)存布局(NCHW vs NHWC vs N、C/32、H、W、32,每個(gè)提供不同的性能特性),量化精度(8-bit?3-bit?),低水平內(nèi)核融合(把Conv + BatchNorm + ReLU融合進(jìn)一個(gè)內(nèi)核),以及分離后端選項(xiàng)(把MKLDNN作為某幾層的后端,NNPACK作為剩余層的后端)等。

PyTorch的核心目標(biāo)是為研究和操作提供一個(gè)良好的平臺(tái),因此除了以上這些優(yōu)化,我們也一直致力于設(shè)計(jì)一個(gè)嚴(yán)格的約束,以避免因完善功能犧牲用戶(hù)體驗(yàn)。

為了做到這一點(diǎn),我們這次推出了torch.jit——一個(gè)即時(shí)(JIT)編譯器,它能在運(yùn)行時(shí)重寫(xiě)用戶(hù)模型并實(shí)現(xiàn)快速產(chǎn)品化。這個(gè)新的JIT編譯器還能把模型遷移到C++上,然后以Caffe2的比特精度運(yùn)行。

對(duì)于Pytorch 1.0,你的代碼可以持續(xù)運(yùn)行,但我們沒(méi)有對(duì)已有API做過(guò)多調(diào)整。

當(dāng)然,這是一個(gè)可選項(xiàng)。用戶(hù)可以使用torch.jit編譯器把自己的模型導(dǎo)出到無(wú)Python環(huán)境并提高其性能。下面讓我們對(duì)它做一下詳細(xì)介紹。

torch.jit:一個(gè)為模型設(shè)計(jì)的即時(shí)編譯器

我們堅(jiān)信一點(diǎn),如果直接用Python代碼寫(xiě)一個(gè)模型來(lái)應(yīng)用,它的適用性太低了。這也是PyTorch為什么這么靈活的原因,但有得必有失,如果用戶(hù)不下指令,PyTorch就不知道接下來(lái)該運(yùn)行哪一段。這對(duì)生產(chǎn)和自動(dòng)性能優(yōu)化來(lái)說(shuō)是個(gè)不小的問(wèn)題,因?yàn)樵趫?zhí)行代碼前,它們需要獲知模型的整體情況。

為了解決這個(gè)問(wèn)題,我們提供了兩種從代碼中恢復(fù)信息的方法,一種基于追蹤本地Python代碼,另一種則基于編譯表示中間形態(tài)的Python語(yǔ)言子集。經(jīng)過(guò)充分討論后,我們認(rèn)為它們?cè)诓煌h(huán)境中都由突出表現(xiàn),因此用戶(hù)可以搭配使用。

追蹤模式

PyTorch tracer是一個(gè)函數(shù)torch.jit.trace,它記錄了當(dāng)前代碼區(qū)執(zhí)行的所有本地PyTorch操作和它們之間的數(shù)據(jù)依賴(lài)關(guān)系。其實(shí)早在PyTorch 0.3時(shí)我們就提供了類(lèi)似功能,它能被用于通過(guò)ONNX導(dǎo)出模型。而Pytorch 1.0的變化在于你可以在C++運(yùn)行過(guò)程中就直接執(zhí)行追蹤,而不需要到別處。C++運(yùn)行期間,Pytorch 1.0將集成Caffe2提供的所有優(yōu)化和硬件集成。

而這種方法的最大好處是它并不關(guān)心你的Python代碼是怎么寫(xiě)的,由于我們只記錄本地的Pytorch操作,這些詳細(xì)信息對(duì)記錄的跟蹤并沒(méi)有影響。但它也是把雙刃劍,如果一個(gè)模型中包含了循環(huán),它會(huì)把循環(huán)展開(kāi),每做一次循環(huán)就插入一個(gè)副本,這樣副本數(shù)量就多得和循環(huán)次數(shù)相等了。但另一方面,這樣做適合和數(shù)據(jù)相關(guān)的一些循環(huán),比如用于處理變化的序列,這種方法能有效地將單個(gè)長(zhǎng)度硬編碼到循環(huán)過(guò)程中。

對(duì)于不包含循環(huán)和if語(yǔ)句的神經(jīng)網(wǎng)絡(luò),追蹤模式是非侵入式的,它能高性能處理各種編碼風(fēng)格,如下所示:

# This will run your nn.Module or regular Python function with the example

# input that you provided. The returned callable can be used to re-execute

# all operations that happened during the example run, but it will no longer

# use the Python interpreter.

from torch.jit import trace

traced_model = trace(model, example_input=input)

traced_fn = trace(fn, example_input=input)

# The training loop doesn't change. Traced model behaves exactly like an

# nn.Module, except that you can't edit what it does or change its attributes.

# Think of it as a "frozen module".

for input, target in data_loader:

loss = loss_fn(traced_model(input), target)

script模式

追蹤是一種好方法,但我們希望能為一些涉及大量循環(huán)的模型,如RNN,提供同樣優(yōu)秀的解決方案。這就是我們接著要介紹的script模式。

在script模式下,除了無(wú)法使用一些特殊的語(yǔ)言功能,用戶(hù)只需寫(xiě)一個(gè)常規(guī)的Python函數(shù)。一旦你隔離其他函數(shù),用@script標(biāo)記出你想要編譯的函數(shù),Pytorch 1.0就會(huì)為這個(gè)python函數(shù)添加注釋并轉(zhuǎn)換成高性能C++代碼運(yùn)行。這就做到了恢復(fù)恢復(fù)所有PyTorch操作及其循環(huán)、條件。它們將嵌入到我們對(duì)此函數(shù)的內(nèi)部表示中,并且每次運(yùn)行此函數(shù)時(shí)都會(huì)計(jì)入它們。

from torch.jit import script

@script

def rnn_loop(x):

hidden = None

forx_tin x.split(1):

x, hidden = model(x, hidden)

return x

優(yōu)化和導(dǎo)出

無(wú)論最終用戶(hù)用的是追蹤模式還是script模式,Pytorch 1.0輸出的都會(huì)是一個(gè)非Python的模型表示。它可用于模型優(yōu)化,或從python中導(dǎo)出模型用于生產(chǎn)環(huán)境。

像這種將大部分模型信息提取為中間表示的做法有助于執(zhí)行復(fù)雜的整體程序優(yōu)化,在這個(gè)背景下,我們可以把計(jì)算分配給專(zhuān)門(mén)用來(lái)計(jì)算圖形的AI加速器,以提高整體效率。事實(shí)上我們也正在這么做,我們已經(jīng)在嘗試融合GPU操作提高小型RNN的性能,成效斐然。

它還意味著用戶(hù)能使用Caffe2現(xiàn)有的高性能后端高效運(yùn)行模型。此外,用@script標(biāo)記的函數(shù)和模塊還可以以動(dòng)態(tài)的方式導(dǎo)出到ONNX,這就意味著它們可以輕松地在非Python語(yǔ)言環(huán)境中運(yùn)行。

可用性

可用性是我們十分關(guān)注的一個(gè)點(diǎn),我們知道,如果不是直接在Python里運(yùn)行代碼,模型后期調(diào)試起來(lái)會(huì)很麻煩,但我們希望能做更多的事,而不是把用戶(hù)局限在一種編程語(yǔ)言上。

首先,這是一項(xiàng)付費(fèi)服務(wù)——如果用戶(hù)不需要優(yōu)化和導(dǎo)出模型,他們就不用在意這些新功能,也不會(huì)看到其中的缺陷。其次,追蹤模式和script模式是可以逐步使用的,例如用戶(hù)可以追蹤部分模型、在大型未追蹤模型中嵌入追蹤模式、對(duì)模型的90%使用追蹤、只對(duì)循環(huán)代碼使用@script……他們可以用@script編寫(xiě)一個(gè)函數(shù),并讓它調(diào)用一個(gè)本地python函數(shù),如果@script函數(shù)中出現(xiàn)錯(cuò)誤,他們也可以刪除注釋。總而言之,用戶(hù)喜歡怎么調(diào)試,就可以怎么調(diào)試。

最重要的是,這些模式將被構(gòu)建到PyTorch的核心中,以便與用戶(hù)現(xiàn)有代碼混合并無(wú)縫運(yùn)行。

其他更新與改進(jìn)

“production-support”是Pytorch 1.0最重要的特征,但作為標(biāo)準(zhǔn)發(fā)布過(guò)程的一部分,我們也會(huì)繼續(xù)優(yōu)化和修復(fù)PyTorch的其他內(nèi)容。

在后端,PyTorch的一些更新可能會(huì)影響用戶(hù)編寫(xiě)C和C ++的擴(kuò)展。因?yàn)槲覀冋谔鎿Q(或重構(gòu))后端ATen庫(kù),以整合來(lái)自Caffe2的功能和優(yōu)化。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1634

    瀏覽量

    49130
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8418

    瀏覽量

    132633
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84688
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    808

    瀏覽量

    13225

原文標(biāo)題:邁向1.0:PyTorch和Caffe2的幸福聯(lián)姻

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Pytorch AI語(yǔ)音助手

    想做一個(gè)Pytorch AI語(yǔ)音助手,有沒(méi)有好的思路呀?
    發(fā)表于 03-06 13:00

    PyTorch 1.0:一個(gè)框架實(shí)現(xiàn)AI從研究到生產(chǎn)的全過(guò)程

    Facebook去年與微軟合作推出開(kāi)放神經(jīng)網(wǎng)絡(luò)交換(ONNX)格式,這是一個(gè)用于表示深度學(xué)習(xí)模型的標(biāo)準(zhǔn),旨在使不同框架之間的移動(dòng)更加簡(jiǎn)單?,F(xiàn)在,Facebook已經(jīng)將ONNX整合到PyTorch
    的頭像 發(fā)表于 05-04 10:13 ?7774次閱讀

    Facebook致力AI開(kāi)源PyTorch 1.0 AI框架

    Facebook近日宣布,將于近期開(kāi)源PyTorch 1.0 AI框架,據(jù)悉,該框架是PyTorch
    的頭像 發(fā)表于 05-08 14:58 ?3410次閱讀

    Facebook致力AI 開(kāi)源PyTorch1.0 AI框架

    導(dǎo)讀: Facebook近日宣布,將于近期開(kāi)源PyTorch 1.0 AI框架,據(jù)悉,該框架是PyTor
    的頭像 發(fā)表于 06-18 10:30 ?3188次閱讀

    Facebook宣布發(fā)布深度學(xué)習(xí)框架 PyTorch 1.0開(kāi)發(fā)者預(yù)覽版

    用戶(hù)共同制作張量處理單元(TPU)。用于預(yù)配置 AI 的 Google Cloud Platform 深度學(xué)習(xí) VM,還將包含 PyTorch 1.0 的 VM 映像。亞馬遜的 SageMaker 將為
    的頭像 發(fā)表于 10-08 14:36 ?3211次閱讀

    PyTorch 1.0 穩(wěn)定版終于正式發(fā)布了!

    PyTorch 1.0 提供了兩種方法使現(xiàn)有代碼與 JIT 兼容的方法,torch.jit.trace 或 torch.jit.script。一旦加上注釋?zhuān)琓orch Script 代碼就可以被積極地優(yōu)化,并且可以序列化,以便在新的 c++ API 中使用。這個(gè) API
    的頭像 發(fā)表于 12-10 09:44 ?4007次閱讀

    2018年,Facebook總共開(kāi)源了153個(gè)新項(xiàng)目

    Facebook開(kāi)源了 Horizon ,這是一個(gè)基于 PyTorch 1.0 構(gòu)建的端到端平臺(tái),也是第一個(gè)使用應(yīng)用強(qiáng)化學(xué)習(xí)(RL)來(lái)優(yōu)化大規(guī)模生產(chǎn)環(huán)境中的系統(tǒng)的平臺(tái)。同時(shí)還擴(kuò)展了
    的頭像 發(fā)表于 01-09 16:12 ?4459次閱讀

    Facebook與CMU聯(lián)手打造開(kāi)源框架PyRobot

    Facebook AI近期對(duì)機(jī)器人技術(shù)非常熱衷,剛剛又開(kāi)源了機(jī)器人框架PyRobot,該框架是與卡內(nèi)基梅隆大學(xué)合作創(chuàng)建,可運(yùn)行由Facebook的機(jī)器學(xué)習(xí)框架
    發(fā)表于 06-24 15:14 ?3858次閱讀

    圍棋高手對(duì)于AI的看法是怎樣的

    AI的出現(xiàn)是一個(gè)機(jī)遇,通過(guò)人工智能,傳統(tǒng)的圍棋項(xiàng)目也有了新活力,脫離了多數(shù)人印象里的刻板、單調(diào)和高深。
    發(fā)表于 07-26 10:04 ?5407次閱讀

    PyTorch版《動(dòng)手學(xué)深度學(xué)習(xí)》開(kāi)源

    目前,該項(xiàng)目在 GitHub 上已獲得超過(guò) 1.1 萬(wàn)星,并且中文版電子書(shū)還發(fā)布了紙質(zhì)版書(shū)籍。不過(guò)雖然書(shū)籍非常優(yōu)秀,但還是有一些讀者不太習(xí)慣用 Gluon 來(lái)寫(xiě)代碼,畢竟開(kāi)源項(xiàng)目大部分
    的頭像 發(fā)表于 09-20 15:25 ?2821次閱讀

    物聯(lián)網(wǎng)電源集線(xiàn)器V1.0開(kāi)源項(xiàng)目

    電子發(fā)燒友網(wǎng)站提供《物聯(lián)網(wǎng)電源集線(xiàn)器V1.0開(kāi)源項(xiàng)目.zip》資料免費(fèi)下載
    發(fā)表于 07-21 10:07 ?3次下載
    物聯(lián)網(wǎng)電源集線(xiàn)器V<b class='flag-5'>1.0</b><b class='flag-5'>開(kāi)源</b><b class='flag-5'>項(xiàng)目</b>

    RFID項(xiàng)目1.0開(kāi)源

    電子發(fā)燒友網(wǎng)站提供《RFID項(xiàng)目1.0開(kāi)源.zip》資料免費(fèi)下載
    發(fā)表于 01-04 10:40 ?0次下載
    RFID<b class='flag-5'>項(xiàng)目</b><b class='flag-5'>1.0</b>版<b class='flag-5'>開(kāi)源</b>

    深度學(xué)習(xí)框架pytorch入門(mén)與實(shí)踐

    的。PyTorch是一個(gè)開(kāi)源的深度學(xué)習(xí)框架,在深度學(xué)習(xí)領(lǐng)域得到了廣泛應(yīng)用。本文將介紹PyTorch框架的基本知識(shí)、核心概念以及如何在實(shí)踐中使用PyTorch框架。 一、
    的頭像 發(fā)表于 08-17 16:03 ?1603次閱讀

    tensorflow和pytorch哪個(gè)更簡(jiǎn)單?

    : TensorFlow和PyTorch都是用于深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的開(kāi)源框架。TensorFlow由Google Brain團(tuán)隊(duì)開(kāi)發(fā),而PyTorchFacebook
    的頭像 發(fā)表于 07-05 09:45 ?870次閱讀

    真格基金宣布捐贈(zèng)開(kāi)源AI項(xiàng)目vLLM

    開(kāi)源技術(shù)處于 AI 革命的中心。Llama 3、Mistral 等開(kāi)源大模型迅速追趕 GPT-4,TensorFlow、Pytorch開(kāi)源
    的頭像 發(fā)表于 09-24 16:13 ?391次閱讀