<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>

          Hugging Face發(fā)布PyTorch新庫「Accelerate」:適用于多GPU、TPU、混合精度訓(xùn)練

          共 3760字,需瀏覽 8分鐘

           ·

          2021-04-24 22:07

          來自:機(jī)器之心    作者:力元

          多數(shù) PyTorch 高級(jí)庫都支持分布式訓(xùn)練和混合精度訓(xùn)練,但是它們引入的抽象化往往需要用戶學(xué)習(xí)新的 API 來定制訓(xùn)練循環(huán)。許多 PyTorch 用戶希望完全控制自己的訓(xùn)練循環(huán),但不想編寫和維護(hù)訓(xùn)練所需的樣板代碼。Hugging Face 最近發(fā)布的新庫 Accelerate 解決了這個(gè)問題。


          「Accelerate」提供了一個(gè)簡單的 API,將與多 GPU 、 TPU 、 fp16 相關(guān)的樣板代碼抽離了出來,保持其余代碼不變。PyTorch 用戶無須使用不便控制和調(diào)整的抽象類或編寫、維護(hù)樣板代碼,就可以直接上手多 GPU 或 TPU。

          項(xiàng)目地址:https://github.com/huggingface/accelerate

          通過將如下 5 行代碼添加到原始的 PyTorch 訓(xùn)練循環(huán)中,腳本即可在本地以及任何分布式設(shè)置上運(yùn)行。
           
          import torch  import torch.nn.functional as F  from datasets import load_dataset+ from accelerate import Accelerator
          + accelerator = Accelerator()- device = 'cpu'+ device = accelerator.device
          model = torch.nn.Transformer().to(device) optim = torch.optim.Adam(model.parameters())
          dataset = load_dataset('my_dataset') data = torch.utils.data.DataLoader(dataset, shuffle=True)
          + model, optim, data = accelerator.prepare(model, optim, data)
          model.train() for epoch in range(10): for source, targets in data: source = source.to(device)          targets = targets.to(device)
          optimizer.zero_grad()
          output = model(source) loss = F.cross_entropy(output, targets)
          + accelerator.backward(loss)- loss.backward()
          optimizer.step()

          Accelerate 甚至可以通過處理設(shè)備的放置(需要對代碼進(jìn)行一些更改,但通常更安全)進(jìn)一步簡化訓(xùn)練循環(huán),代碼如下所示: 

          import torch  import torch.nn.functional as F  from datasets import load_dataset+ from accelerate import Accelerator
          + accelerator = Accelerator()- device = 'cpu'
          + model = torch.nn.Transformer()- model = torch.nn.Transformer().to(device)  optim = torch.optim.Adam(model.parameters())
          dataset = load_dataset('my_dataset') data = torch.utils.data.DataLoader(dataset, shuffle=True)
          + model, optim, data = accelerator.prepare(model, optim, data)
          model.train() for epoch in range(10): for source, targets in data:- source = source.to(device)- targets = targets.to(device)
                    optimizer.zero_grad()
          output = model(source) loss = F.cross_entropy(output, targets)
          + accelerator.backward(loss)- loss.backward()
          optimizer.step()

          除了 API,Accelerate 還提供了一個(gè) CLI 工具,方便啟動(dòng)腳本之前快速配置和測試訓(xùn)練環(huán)境,然后啟動(dòng)腳本。指令如下所示: 

          accelerate config

          accelerate launch my_script.py --args_to_my_script

          如果不想自己編寫訓(xùn)練循環(huán), PyTorch 之上有許多可以替代 Accelerate 的高級(jí)庫。

          Accelerate 的運(yùn)作原理

          accelerator = Accelerator()

          除了提供要使用的主要對象之外,此行還將從環(huán)境中分析分布式訓(xùn)練運(yùn)行的類型并執(zhí)行必要的初始化。用戶可以通過將 cpu = True 或 fp16 = True 傳遞給此 init 來強(qiáng)制進(jìn)行 CPU 訓(xùn)練或混合精度訓(xùn)練。這兩個(gè)選項(xiàng)都可以使用腳本的啟動(dòng)器進(jìn)行設(shè)置。

          model, optim, data = accelerator.prepare(model, optim, data)

          這是 API 的主體,將準(zhǔn)備三種主要類型的對象:models (torch.nn.Module)、optimizers (torch.optim.Optimizer)、dataloaders (torch.data.dataloader.DataLoader)。

          模型

          模型的準(zhǔn)備包括將其包裝在適當(dāng)?shù)娜萜鳎ɡ?DistributedDataParallel)中,然后將其放置在適當(dāng)?shù)脑O(shè)備上。與普通分布式訓(xùn)練一樣,進(jìn)行保存或訪問其特定的方法時(shí),需要先通過 accelerator.unwrap_model(model)解開模型。
           
          優(yōu)化器

          優(yōu)化器也包裝于一個(gè)為使混合精度訓(xùn)練運(yùn)轉(zhuǎn)執(zhí)行必要操作的特殊容器里。如果狀態(tài) dict 是非空的或從檢查點(diǎn)加載的,它會(huì)準(zhǔn)確地處理狀態(tài) dict 的設(shè)備放置。

          數(shù)據(jù)加載器

          此庫并不依賴于 DistributedSampler,它實(shí)際上可以與傳遞到數(shù)據(jù)加載器的采樣器一起使用。數(shù)據(jù)加載器包裝于僅在采樣器中獲取與當(dāng)前進(jìn)程相關(guān)的索引并將批次放入設(shè)備的容器中。
           
          為此,Accelerate 提供了一種實(shí)用程序功能來同步更多 RNGs。該功能將在分布式訓(xùn)練期間運(yùn)行的每個(gè)進(jìn)程上同步隨機(jī)數(shù)生成器。默認(rèn)情況下,它僅同步采樣器的生成器,因此在每個(gè)進(jìn)程中數(shù)據(jù)擴(kuò)充都將不同,但是隨機(jī)改組將是相同的。

          accelerator.backward(loss)

          此行代碼為向后傳遞添加了必要的步驟來提高混合精度,但對于其他集成則需要進(jìn)行一些自定義。

          Accelerate 支持的集成包括:

          • CPU

          • 單 GPU

          • 單一節(jié)點(diǎn)多 GPU

          • 多節(jié)點(diǎn)多 GPU

          • TPU

          • 帶有本地 AMP 的 FP16(路線圖上的頂點(diǎn))


           End 


          聲明:部分內(nèi)容來源于網(wǎng)絡(luò),僅供讀者學(xué)術(shù)交流之目的,文章版權(quán)歸原作者所有。如有不妥,請聯(lián)系刪除。

          猜您喜歡:


          等你著陸!【GAN生成對抗網(wǎng)絡(luò)】知識(shí)星球!

          超100篇!CVPR 2020最全GAN論文梳理匯總!

          附下載 | 《Python進(jìn)階》中文版

          附下載 | 經(jīng)典《Think Python》中文版

          附下載 | 《Pytorch模型訓(xùn)練實(shí)用教程》

          附下載 | 最新2020李沐《動(dòng)手學(xué)深度學(xué)習(xí)》

          附下載 | 《可解釋的機(jī)器學(xué)習(xí)》中文版

          附下載 |《TensorFlow 2.0 深度學(xué)習(xí)算法實(shí)戰(zhàn)》

          附下載 | 超100篇!CVPR 2020最全GAN論文梳理匯總!

          附下載 |《計(jì)算機(jī)視覺中的數(shù)學(xué)方法》分享


          瀏覽 77
          點(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>
                  婷婷国产成人精品视频 | 亚洲无码中文字幕在线播放 | 西西人体大胆4444w 6 2w | 中文字幕在线无码视频 | IPX-811桃乃木かな无码破解 |