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

          共 3956字,需瀏覽 8分鐘

           ·

          2021-04-23 23:19

          ↑ 點擊藍字 關(guān)注極市平臺

          作者丨力元
          來源丨機器之心
          編輯丨極市平臺

          極市導(dǎo)讀

           

          多數(shù) PyTorch 高級庫都支持分布式訓(xùn)練和混合精度訓(xùn)練,但是它們引入的抽象化往往需要用戶學(xué)習(xí)新的 API 來定制訓(xùn)練循環(huán)。許多 PyTorch 用戶希望完全控制自己的訓(xùn)練循環(huán),但不想編寫和維護訓(xùn)練所需的樣板代碼。Hugging Face 最近發(fā)布的新庫 Accelerate 解決了這個問題。 >>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿


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

          項目地址:https://github.com/huggingface/accelerate

          通過將如下 5 行代碼添加到原始的 PyTorch 訓(xùn)練循環(huán)中,腳本即可在本地以及任何分布式設(shè)置上運行。
           
          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è)備的放置(需要對代碼進行一些更改,但通常更安全)進一步簡化訓(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 還提供了一個 CLI 工具,方便啟動腳本之前快速配置和測試訓(xùn)練環(huán)境,然后啟動腳本。指令如下所示: 

          accelerate config

          accelerate launch my_script.py --args_to_my_script

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

          Accelerate 的運作原理


          accelerator = Accelerator()

          除了提供要使用的主要對象之外,此行還將從環(huán)境中分析分布式訓(xùn)練運行的類型并執(zhí)行必要的初始化。用戶可以通過將 cpu = True 或 fp16 = True 傳遞給此 init 來強制進行 CPU 訓(xùn)練或混合精度訓(xù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)練一樣,進行保存或訪問其特定的方法時,需要先通過 accelerator.unwrap_model(model)解開模型。
           

          優(yōu)化器


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

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


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

          accelerator.backward(loss)

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

          Accelerate 支持的集成包括:

          • CPU

          • 單 GPU

          • 單一節(jié)點多 GPU

          • 多節(jié)點多 GPU

          • TPU

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

          如果覺得有用,就請分享到朋友圈吧!△點擊卡片關(guān)注極市平臺,獲取最新CV干貨


          推薦閱讀


          硬盤告急!沒想到礦工開始用硬盤挖幣,電商庫存幾乎被一掃而空

          2021-04-21

          七天近千星!哈佛小哥這個github倉庫從零開始教你計算機圖形學(xué)

          2021-04-20

          一位中科院博士的畢業(yè)論文致謝:求學(xué)22載,計算機終成一生的事業(yè)與希望

          2021-04-19



          # CV技術(shù)社群邀請函 #

          △長按添加極市小助手
          添加極市小助手微信(ID : cvmart2)

          備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測-深圳)


          即可申請加入極市目標(biāo)檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強/OCR/視頻理解等技術(shù)交流群


          每月大咖直播分享、真實項目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~


          覺得有用麻煩給個在看啦~  
          瀏覽 26
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  亚洲一级在线免费视频 | 欧美操逼视频有吗? | 天天舔天天射天天干 | 有免费片视频吗 日日爱866 | 色日本黄色视频 |