<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          PyTorch Lightning 1.0 正式發(fā)布!從0到1,有這9大特點(diǎn)

          共 7646字,需瀏覽 16分鐘

           ·

          2020-10-25 21:30

          ↑ 點(diǎn)擊藍(lán)字?關(guān)注極市平臺(tái)

          作者丨PyTorch Lightning team
          來(lái)源丨PyVision
          編輯丨極市平臺(tái)

          極市導(dǎo)讀

          ?

          PyTorch可以構(gòu)建復(fù)雜的AI模型,但一旦研究變得復(fù)雜,就很可能會(huì)引入錯(cuò)誤。PyTorch Lightning完全解決了這個(gè)問(wèn)題。本文譯自Pytorch官方團(tuán)隊(duì),介紹了PyTorch Lightning V1.0.0的九大特點(diǎn)。?>>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺(jué)的最前沿


          在過(guò)去的幾個(gè)月里,我們一直在努力工作,微調(diào) API,改進(jìn)文檔,錄制教程,現(xiàn)在終于是時(shí)候與大家分享 PyTorch Lightning 的 V1.0.0版了。想要云上縮放模型的極速方案嗎?請(qǐng)繼續(xù)閱讀。

          Lightning DNA

          AI 研究的發(fā)展速度遠(yuǎn)遠(yuǎn)超過(guò)任何單一框架所能跟上的速度。深度學(xué)習(xí)的領(lǐng)域不斷發(fā)展,主要是在復(fù)雜性和規(guī)模。Lightning 提供了一個(gè)為復(fù)雜模型交互世界設(shè)計(jì)的用戶體驗(yàn),同時(shí)抽象出所有令人分心的工程細(xì)節(jié),如多 GPU 和多 TPU 訓(xùn)練,early stopping,日志等......

          像 PyTorch 這樣的框架是為 AI 研究主要關(guān)注網(wǎng)絡(luò)架構(gòu)的時(shí)代而設(shè)計(jì)的。nn.Module 模塊可以定義操作順序。


          VGG16

          這些框架在為研究或生產(chǎn)提供極其復(fù)雜的模型所需的所有部件方面做出了令人難以置信的工作。但是一旦模型開(kāi)始相互作用,比如 GAN,BERT,或者自動(dòng)編碼器,這種模式就會(huì)打破,巨大的靈活性很快就會(huì)變成樣板,項(xiàng)目上了規(guī)模就很難維護(hù)。

          與之前出現(xiàn)的框架不同,PyTorch Lightning 被設(shè)計(jì)成封裝一系列相互作用的模型,我們稱(chēng)之為深度學(xué)習(xí)系統(tǒng)(deep learning systems)。Lightning 是為當(dāng)今世界更復(fù)雜的研究和生產(chǎn)案例而設(shè)計(jì)的,在這些案例中,許多模型使用復(fù)雜的規(guī)則相互作用。


          自編碼器系統(tǒng)

          PyTorch Lightning 的第二個(gè)關(guān)鍵原則是硬件和“科學(xué)”代碼必須分開(kāi)。Lightning 進(jìn)化到可以利用大規(guī)模的計(jì)算,而不需要向用戶展示任何抽象概念。通過(guò)這種分離,你獲得了以前不可能的新能力,比如在筆記本電腦上使用 CPU 調(diào)試你的512 GPU 作業(yè)而不需要更改代碼。


          最后,Lightning 創(chuàng)建的愿景是成為一個(gè)社區(qū)驅(qū)動(dòng)的框架

          構(gòu)建優(yōu)秀的深度學(xué)習(xí)模型需要大量的專(zhuān)業(yè)知識(shí)和使系統(tǒng)工作的小技巧。在世界各地,數(shù)以百計(jì)令人難以置信的工程師和博士們一遍又一遍地實(shí)現(xiàn)相同的代碼。Lightning 現(xiàn)在有一個(gè)不斷增長(zhǎng)的貢獻(xiàn)者社區(qū),其中有超過(guò)300個(gè)極有才華的深度學(xué)習(xí)人員,他們選擇分配相同的能量,做完全相同的優(yōu)化,但是卻有成千上萬(wàn)的人從他們的努力中受益。



          1.0.0的新功能

          Lightning 1.0.0 標(biāo)志著一個(gè)穩(wěn)定的最終版?API。

          這意味著依賴于 Lightning 的主要研究項(xiàng)目可以放心使用,他們的代碼在未來(lái)不會(huì)中斷或改變。

          研究 + 生產(chǎn)

          Lightning 的核心優(yōu)勢(shì)是使最先進(jìn)的 AI 研究可以大規(guī)模擴(kuò)展。這是一個(gè)為專(zhuān)業(yè)研究人員設(shè)計(jì)的框架,在最大的計(jì)算資源上嘗試最難的想法,而不會(huì)失去任何靈活性。

          我們很興奮地宣布,Lightning 1.0.0 現(xiàn)在還可以輕松地大規(guī)模部署這些模型。所有的 Lightning 代碼確保了所有的東西都可以輕松導(dǎo)出到 onnx 和 torchscript。
          # ----------------------------------# torchscript# ----------------------------------autoencoder = LitAutoEncoder()torch.jit.save(autoencoder.to_torchscript(), "model.pt")os.path.isfile("model.pt")
          # ----------------------------------# onnx# ----------------------------------with tempfile.NamedTemporaryFile(suffix='.onnx', delete=False) as tmpfile: autoencoder = LitAutoEncoder() input_sample = torch.randn((1, 28 * 28)) autoencoder.to_onnx(tmpfile.name, input_sample, export_params=True) os.path.isfile(tmpfile.name)
          因此,這意味著你的數(shù)據(jù)科學(xué)家、研究人員等團(tuán)隊(duì)現(xiàn)在還可以成為將模型投入生產(chǎn)的人。他們不需要龐大的機(jī)器學(xué)習(xí)工程師團(tuán)隊(duì)。

          這是領(lǐng)先的公司使用 Lightning?的一個(gè)主要原因:?作為一種幫助他們大大縮短生產(chǎn)時(shí)間而不失去任何研究所需的靈活性的方法。

          這正是我們企業(yè)級(jí)服務(wù)提供的: Grid AI 是我們?cè)谠粕线M(jìn)行規(guī)模訓(xùn)練的原生平臺(tái)。Grid 允許任何構(gòu)建深度學(xué)習(xí)模型的人在大規(guī)模計(jì)算資源上迭代,然后立即將這些模型部署到一個(gè)可伸縮的環(huán)境中,能夠處理你扔給深度學(xué)習(xí)系統(tǒng)的最大流量。

          Grid 訓(xùn)練

          網(wǎng)站

          你還會(huì)注意到,我們已經(jīng)整合了所有的博客文章,極速的視頻教程,社區(qū)項(xiàng)目和其他資源在我們的全新主頁(yè)下,展示所有的東西快如閃電!

          度量(Metrics)

          pytorch_lightning.metrics 是一個(gè)為了在 PyTorch 和 PyTorch Lightning 中方便度量開(kāi)發(fā)和使用而創(chuàng)建的度量 API。更新的 API 提供了一種內(nèi)置方法,可以跨多個(gè) GPU (進(jìn)程)計(jì)算每步的度量,同時(shí)存儲(chǔ)統(tǒng)計(jì)信息,允許你在一個(gè) epoch 結(jié)束時(shí)計(jì)算度量,而不必?fù)?dān)心與分布式后端相關(guān)的任何復(fù)雜性。

          它對(duì)所有的邊緣情況都進(jìn)行了嚴(yán)格的測(cè)試,并且包含了越來(lái)越多的常用度量實(shí)現(xiàn),比如 Accuracy、 Precision、 Recall、 Fbeta、 MeanSquaredError 等等。
          class LitModel(pl.LightningModule): def __init__(self): ... self.train_acc = pl.metrics.Accuracy() self.valid_acc = pl.metrics.Accuracy()
          def training_step(self, batch, batch_idx): logits = self(x) ... self.train_acc(logits, y) # log step metric self.log('train_acc_step', self.train_acc)
          def validation_step(self, batch, batch_idx): logits = self(x) ... self.valid_acc(logits, y) # logs epoch metrics self.log('valid_acc', self.valid_acc)

          要實(shí)現(xiàn)自定義度量,只需子類(lèi)化基本 Metric 類(lèi)并實(shí)現(xiàn) __init__()、 update() 和 compute()方法。你所需要做的就是正確調(diào)用 add _ state () ,以便使用 DDP 實(shí)現(xiàn)自定義度量。使用 add_state()添加的度量狀態(tài)變量調(diào)用 reset()。
          from pytorch_lightning.metrics import Metric
          class MyAccuracy(Metric):
          def __init__(self, dist_sync_on_step=False): super().__init__(dist_sync_on_step=dist_sync_on_step) self.add_state("correct", default=torch.tensor(0), dist_reduce_fx="sum") self.add_state("total", default=torch.tensor(0), dist_reduce_fx="sum") def update(self, preds: torch.Tensor, target: torch.Tensor): preds, target = self._input_format(preds, target) assert preds.shape == target.shape self.correct += torch.sum(preds == target) self.total += target.numel() def compute(self): return self.correct.float() / self.total

          手動(dòng)優(yōu)化與自動(dòng)優(yōu)化

          使用 Lightning,你不需要擔(dān)心什么時(shí)候啟用/禁用梯度,做一個(gè)后向傳播,或者更新優(yōu)化器,只要你從 training_step 返回一個(gè)附加圖(graph),Lightning 將自動(dòng)優(yōu)化。
          def training_step(self, batch, batch_idx): loss = self.encoder(batch[0]) return loss

          然而,對(duì)于某些研究,比如 GAN、強(qiáng)化學(xué)習(xí)或者有多個(gè)優(yōu)化器或者內(nèi)部循環(huán)的東西,你可以關(guān)閉自動(dòng)優(yōu)化,自己完全控制訓(xùn)練循環(huán)。

          首先,關(guān)閉自動(dòng)優(yōu)化:?
          trainer?=?Trainer(automatic_optimization=False)

          現(xiàn)在你控制了訓(xùn)練循環(huán)!
          from pytorch_lightning.metrics import Metric
          class MyAccuracy(Metric):
          def __init__(self, dist_sync_on_step=False): super().__init__(dist_sync_on_step=dist_sync_on_step) self.add_state("correct", default=torch.tensor(0), dist_reduce_fx="sum") self.add_state("total", default=torch.tensor(0), dist_reduce_fx="sum") def update(self, preds: torch.Tensor, target: torch.Tensor): preds, target = self._input_format(preds, target) assert preds.shape == target.shape self.correct += torch.sum(preds == target) self.total += target.numel() def compute(self): return self.correct.float() / self.total

          日志(Logging)

          Lightning 使得 loggers 的集成變得非常簡(jiǎn)單——只需在 LightningModule 的任何地方調(diào)用 log()方法,它就會(huì)將記錄的數(shù)量發(fā)送到你選擇的 logger。默認(rèn)情況下我們使用 Tensorboard,但是你可以選擇任何你想用的支持的 logger。
          def training_step(self, batch, batch_idx):   self.log('my_metric', x)

          根據(jù) .log () 的調(diào)用位置,Lightning 自動(dòng)確定何時(shí)應(yīng)該進(jìn)行日志記錄(每步或每個(gè)epoch) ,但是當(dāng)然你可以通過(guò)手動(dòng)使用 on_step 和 on_epoch 選項(xiàng)來(lái)覆蓋默認(rèn)行為。設(shè)置為 on_epoch = True 將在整個(gè)訓(xùn)練 epoch 期間累積你的日志值。
          def training_step(self, batch, batch_idx): self.log('my_loss',?loss,?on_step=True,?on_epoch=True,?prog_bar=True,?logger=True)


          數(shù)據(jù)流

          我們 deprecate 了 EvalResult 和 TrainResult,這有利于簡(jiǎn)化數(shù)據(jù)流,并在訓(xùn)練和驗(yàn)證循環(huán)中將日志與數(shù)據(jù)解耦。每個(gè)循環(huán)(訓(xùn)練、驗(yàn)證、測(cè)試)都有三個(gè)可以實(shí)現(xiàn)的鉤子(hooks):

          • x_step

          • x_step_end

          • x_epoch_end


          為了說(shuō)明數(shù)據(jù)是如何流動(dòng)的,我們將使用訓(xùn)練循環(huán)(即: x = training)
          outs = []for batch in data:  out = training_step(batch)  outs.append(out)training_epoch_end(outs)

          你在 training_step 中返回的任何東西都可以作為 training_epoch_end 的輸入。
          def training_step(self, batch, batch_idx): prediction = … return {'loss': loss, 'preds': prediction}
          def training_epoch_end(self, training_step_outputs): for out in training_step_outputs: prediction = out['preds'] # do something with these

          驗(yàn)證和測(cè)試步驟也是如此: validation_step 或 test_step 中返回的任何內(nèi)容都可以用作{ validation/test }_step_end 或{ validation/test }_epoch_end 的輸入。如果你使用 DP 或 DDP2分布式模式(即: 拆分 batch 到不同的 GPU) ,請(qǐng)使用 x_step_end 手動(dòng)聚合(或者不實(shí)現(xiàn)它,讓 lightning 自動(dòng)聚合)。

          Checkpointing

          Lightning 現(xiàn)在自動(dòng)為你保存一個(gè) checkpoint 在你的當(dāng)前工作目錄,還有你的最后一個(gè)訓(xùn)練 epoch 的狀態(tài)。這樣可以確保在訓(xùn)練被中斷的情況下繼續(xù)進(jìn)行訓(xùn)練。

          你可以自定義 checkpointing 行為來(lái)監(jiān)控任意數(shù)量的訓(xùn)練或驗(yàn)證步驟。例如,如果你想根據(jù)驗(yàn)證損失更新checkpoint:

          1. 計(jì)算你希望監(jiān)控的任何指標(biāo)或其他數(shù)量,例如驗(yàn)證集損失。

          2. 使用 log() 方法記錄數(shù)量,并用一個(gè)鍵如 val_loss。

          3. 初始化 ModelCheckpoint 回調(diào),并設(shè)置監(jiān)視器為你的數(shù)量的鍵。

          4. 回調(diào)傳遞給 checkpoint_callback Trainer flag。


          from pytorch_lightning.callbacks import ModelCheckpoint
          class LitAutoEncoder(pl.LightningModule): def validation_step(self, batch, batch_idx): x, y = batch y_hat = self.backbone(x)
          # 1. calculate loss loss = F.cross_entropy(y_hat, y)
          # 2. log `val_loss` self.log('val_loss', loss)
          # 3. Init ModelCheckpoint callback, monitoring 'val_loss'checkpoint_callback = ModelCheckpoint(monitor='val_loss')
          # 4. Pass your callback to checkpoint_callback trainer flagtrainer = Trainer(checkpoint_callback=checkpoint_callback)

          請(qǐng)?jiān)谖覀兊?release notes (https://github.com/PyTorchLightning/pytorch-lightning/releases)中閱讀所有的 API 變化,其中包括很多 bug 的修復(fù)。

          來(lái)源:https://medium.com/pytorch/pytorch-lightning-1-0-from-0-600k-80fc65e2fab0


          推薦閱讀



          ?ACCV 2020國(guó)際細(xì)粒度網(wǎng)絡(luò)圖像識(shí)別競(jìng)賽正式開(kāi)賽!



          添加極市小助手微信(ID : cvmart2),備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測(cè)-深圳),即可申請(qǐng)加入極市目標(biāo)檢測(cè)/圖像分割/工業(yè)檢測(cè)/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群:月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競(jìng)賽、干貨資訊匯總、與?10000+來(lái)自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺(jué)開(kāi)發(fā)者互動(dòng)交流~

          △長(zhǎng)按添加極市小助手

          △長(zhǎng)按關(guān)注極市平臺(tái),獲取最新CV干貨

          覺(jué)得有用麻煩給個(gè)在看啦~??
          瀏覽 148
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费看国产黄色电影 | 草草永久地址发布页①免费 | 天天日天天肏 | 午夜色色色 | 果冻传媒性爱操逼电影三级片 |