PyTorch & 分布式框架 Ray :保姆級入門教程

2021-03-02 PyTorch 開發者社區

使用 PyTorch 和 Ray 進行分布式機器學習入門,Ray 是一個流行的分布式Python 框架,可以與 PyTorch 搭配,快速擴展機器學習應用。

來源:官方博客

翻譯:PyTorch 開發者社區(微信公眾號)

今天的機器學習需要分布式計算。無論是訓練網絡、調整超參數、服務模型還是處理數據,機器學習都是計算密集型的,如果沒有訪問集群,速度會非常慢。

Ray 是一個流行的分布式 Python 框架,它可以與 PyTorch 配對,以快速擴展機器學習應用。

本篇文章介紹 Ray 生態系統的各種元素,以及如何與 PyTorch 搭配使用!

Ray 是一個並行和分布式 Python 的開源庫。

從高層次上看,Ray 生態系統由三部分組成:核心 Ray 系統、用於機器學習的可擴展庫(包括原生庫和第三方庫),以及用於在任何集群或雲提供商上啟動集群的工具。

Ray 可以用來在多個核心或機器上擴展 Python 應用。它有幾個主要的優點,包括:

簡單性:你可以擴展你的 Python 應用,而不需要重寫,同樣的代碼可以在一臺機器或多臺機器上運行。

穩健性:應用程式可以優雅地處理機器故障和進程搶佔。

性能:任務以毫秒級的延遲運行,可擴展到數萬個內核,並以最小的序列化開銷處理數值數據。

由於Ray是一個通用框架,社區在它的基礎上建立了許多庫和框架來完成不同的任務。

這些庫和框架絕大多數都支持 PyTorch,只需對代碼進行最小程度的修改,並能相互無縫集成。以下是生態系統中眾多庫中的一部分。

圖註:在 p3dn.24xlarge 實例上,PyTorch 的 DataParallel 與 Ray 的比較(Ray 在下面使用 PyTorch 的分布式 DataParallel)。

RaySGD是一個為數據並行訓練提供分布式訓練包裝的庫。例如,RaySGD TorchTrainer(https://docs.ray.io/en/master/raysgd/raysgd_pytorch.html) 是一個圍繞 torch.distributed.launch 的包裝器。它提供了一個 Python API,可以輕鬆地將分布式訓練納入到一個更大的 Python 應用程式中,而不是需要將你的訓練代碼包裝在 bash 腳本中。

該庫的其他一些優點是:

易用性:您可以擴展 PyTorch 的原生 DistributedDataParallel,而無需監控單個節點。

可擴展性:您可以對 PyTorch 的原生分布式數據並行進行擴展,而無需監控單個節點。您可以向上和向下擴展。從單個 CPU 開始。只需更改兩行代碼,即可擴展到多節點、多 CPU 或多 GPU 集群。

加速訓練:NVIDIA Apex 內置了對混合精度訓練的支持。


容錯功能:支持在雲機被搶佔時自動恢復。

兼容性:支持與其他庫無縫集成,如:NVIDIA Apex。可與其他庫無縫集成,如Ray Tune 和 Ray Serve。

你可以通過安裝 Ray(pip install -U ray torch)並運行下面的代碼,來開始使用 TorchTrainer:

import torchfrom torch.utils.data import DataLoaderfrom torchvision.datasets import CIFAR10import torchvision.transforms as transforms
import rayfrom ray.util.sgd.torch import TorchTrainer# https:from ray.util.sgd.torch.resnet import ResNet18

def cifar_creator(config):    """Returns dataloaders to be used in `train` and `validate`."""    tfms = transforms.Compose([        transforms.ToTensor(),        transforms.Normalize((0.4914, 0.4822, 0.4465),                             (0.2023, 0.1994, 0.2010)),    ])  # meanstd transformation    train_loader = DataLoader(        CIFAR10(root="~/data", download=True, transform=tfms), batch_size=config["batch"])    validation_loader = DataLoader(        CIFAR10(root="~/data", download=True, transform=tfms), batch_size=config["batch"])    return train_loader, validation_loader

def optimizer_creator(model, config):    """Returns an optimizer (or multiple)"""    return torch.optim.SGD(model.parameters(), lr=config["lr"])
ray.init()
trainer = TorchTrainer(    model_creator=ResNet18,  # A function that returns a nn.Module    data_creator=cifar_creator,  # A function that returns dataloaders    optimizer_creator=optimizer_creator,  # A function that returns an optimizer    loss_creator=torch.nn.CrossEntropyLoss,  # A loss function    config={"lr": 0.01, "batch": 64},  # parameters    num_workers=2,  # amount of parallelism    use_gpu=torch.cuda.is_available(),    use_tqdm=True)
stats = trainer.train()print(trainer.validate())
torch.save(trainer.state_dict(), "checkpoint.pt")trainer.shutdown()print("success!")

注釋:該腳本將下載 CIFAR10 並使用 ResNet18 模型進行圖像分類。只需更改一個參數(num_workers=N),就可以利用多個 GPU。


 Ray Tune 

圖註:Ray Tune 實現的優化算法,如基於群體的訓練(如上圖所示),可以與 PyTorch 一起使用,以獲得更高性能的模型。

Ray Tune 是一個 Python 庫,用於任何規模的實驗執行和超參數調整,該庫的一些優點是:

能夠在不到 10 行代碼中啟動多節點分布式超參數掃描。

支持包括 PyTorch 在內的所有主流機器學習框架。

對 GPU 的一流支持。

自動管理檢查點並將日誌記錄到 TensorBoard。

訪問最先進的算法,如基於群體的訓練(PBT)、BayesOptSearch、HyperBand/ASHA。

你可以通過安裝 Ray(pip install ray torch torchvision)並運行下面的代碼,來開始使用 Ray Tune。

import numpy as npimport torchimport torch.optim as optim
from ray import tunefrom ray.tune.examples.mnist_pytorch import get_data_loaders, train, testimport rayimport sys
if len(sys.argv) > 1:    ray.init(redis_address=sys.argv[1])
import torch.nn as nnimport torch.nn.functional as F
class ConvNet(nn.Module):    def __init__(self):        super(ConvNet, self).__init__()        self.conv1 = nn.Conv2d(1, 3, kernel_size=3)        self.fc = nn.Linear(192, 10)
   def forward(self, x):        x = F.relu(F.max_pool2d(self.conv1(x), 3))        x = x.view(-1, 192)        x = self.fc(x)        return F.log_softmax(x, dim=1)

def train_mnist(config):    model = ConvNet()    train_loader, test_loader = get_data_loaders()    optimizer = optim.SGD(        model.parameters(), lr=config["lr"], momentum=config["momentum"])    for i in range(10):        train(model, optimizer, train_loader, torch.device("cpu"))        acc = test(model, test_loader, torch.device("cpu"))        tune.track.log(mean_accuracy=acc)        if i % 5 == 0:            # This saves the model to the trial directory            torch.save(model.state_dict(), "./model.pth")
from ray.tune.schedulers import ASHAScheduler
search_space = {    "lr": tune.choice([0.001, 0.01, 0.1]),    "momentum": tune.uniform(0.1, 0.9)}
analysis = tune.run(    train_mnist,    num_samples=30,    scheduler=ASHAScheduler(metric="mean_accuracy", mode="max", grace_period=1),    config=search_space)

注釋:該腳本向你展示了如何利用最先進的早期停止算法 AHSA,它可以終止那些不太有前途的試驗,並將更多的時間和資源分配給更有前途的試驗。

圖註:Ray Serve 不僅可以用來單獨為模型服務,還可以用來擴展其他服務工具,比如 FastAPI。


Ray Serve 是一個易於使用的可擴展模型服務的庫。該庫的一些優點是:

能夠使用一個工具包來服務從深度學習模型(PyTorch,TensorFlow等)到 scikit-learn 模型,再到任意的 Python 業務邏輯。

可擴展到許多機器,無論是在你的數據中心還是在雲端。

與許多其他庫兼容,如 Ray Tune 和 FastAPI。

如果您想了解如何將 Ray Serve 和 Ray Tune 一起整合到您的 PyTorch 工作流中,您應該查看文檔以獲取完整的代碼示例。

圖註:RLlib提供了幾乎所有訓練方面的定製方法,包括神經網絡模型、動作分布、策略定義、環境和樣本收集過程。


RLlib提供了幾乎所有訓練方面的定製方法,包括神經網絡模型、動作分布、策略定義、環境和樣本收集過程。

RLlib 是一個用於強化學習的庫,它既提供了高擴展性,又為各種應用提供了統一的 API,優勢包括:

圖註:Ray Cluster Launcher簡化了在任何集群或雲提供商上啟動和擴展的過程。

一旦您在筆記本電腦上開發了一個應用程式,並希望將其擴展到雲端(也許有更多的數據或更多的 GPU),接下來的步驟並不總是很清楚。這個過程要麼讓基礎設施團隊為你設置,要麼通過以下步驟:

1. 選擇一個雲提供商(AWS、GCP 或 Azure)。

2. 導航管理控制臺,設置實例類型、安全策略、節點、實例限制等。

3. 弄清楚如何在集群上分發你的 Python 腳本。

一個更簡單的方法是使用 Ray Cluster Launcher 在任何集群或雲提供商上啟動和擴展機器。Cluster Launcher 允許你自動縮放、同步文件、提交腳本、埠轉發等。這意味著您可以在 Kubernetes、AWS、GCP、Azure 或私有集群上運行您的 Ray 集群,而無需了解集群管理的低級細節。

圖註:Ray 為螞蟻金服集團的 Fusion Engine 提供了一個分布式計算基礎。

本文包含了 Ray 在 PyTorch 生態系統中的一些好處。Ray 被廣泛用於各種應用,從螞蟻金服集團使用 Ray 支持其金融業務,到 LinkedIn 在 Yarn 上運行Ray,再到 Pathmind 使用 Ray 將強化學習與模擬軟體連接起來,等等。

如果你有任何關於 Ray 的問題或想法,或者想了解更多關於並行和分布式Python 的信息,請通過 Discourse、Slack 或 GitHub 加入項目的社區。

相關焦點

  • PyTorch官方教程大更新:增加標籤索引,更加新手友好
    標籤索引:哪裡不會點哪裡如果你是PyTorch 24K純萌新,PyTorch官方一如既往地向你推薦他們最受歡迎的教程之一:60分鐘入門PyTorch(Start 60-min blitz)。並且這一次,有了更顯眼的入口,保證你絕對不會錯過。而這一次更新的重點,在於快速標籤索引。
  • PyTorch1.5更新發布,與Python配合使用的C ++前端API奇偶校驗
    PyTorch現在包括對C ++前端的重大更新,用於計算機視覺模型的「通道最後」存儲格式,以及用於模型並行訓練的分布式RPC框架的穩定版本。該發行版還提供了針對粗麻布和雅各布派的autograd的新API,以及一個允許創建受pybind啟發的Custom C ++類的API。
  • Pytorch 中文文檔和中文教程
    筆者獲得了ApacheCN社區的同意,放出該社區的翻譯文檔和官方教程,歡迎大家多去GitHub頁面 fork,star!簡單介紹GitHub項目管理:https://github.com/apachecn/pytorch-doc-zh
  • ORM 框架 Bee v1.8 發布,增加分布式特性
    全新理念的ORM框架Bee, 以應對網際網路時代軟體需求快速變化的代碼編寫。Bee入門簡單,使用方便,功能強大。   AI智能編程,產品原型出來,軟體原型也出來了。工欲善其事必先利其器!——《論語·衛靈公》 Bee V1.8  重磅功能來襲!
  • 破產娘の課堂——Lolita手作裙子/飾品保姆級教程大搜羅!
    在這裡給大家介紹幾個手作娘保姆級教程!包括了裙子/徽章/邊夾/kc/髮帶/bnt/熊包希望大家也能戴上自己設計的獨一無二的飾品~複製AV號到B站就能看啦!(公眾號視頻長度有限)AV號:46249740【Lolita勳章教程】新手向簡單超基礎的勳章教程視頻只有五分鐘但是視頻很清晰步驟也很明確比較簡單能看懂啦
  • Spring全家桶、Dubbo、分布式、消息隊列後端必備全套開源項目
    Spring Boot 專欄基於 Spring Boot 2.X 版本的深度入門教程。市面上的 Spring Boot 基礎入門文章很多,但是深度入門文章卻很少。Spring Boot 分布式事務 Seata 入門》 對應 lab-52安全控制《Spring Boot 安全框架 Spring Security 入門》 對應 lab-01-spring-security《Spring Boot
  • PyTorch 1.6、TensorFlow 2.3、Pandas 1.1 同日發布!都有哪些新...
    所有深度學習研發者都需要同時了解PyTorch和TensorFlow,並精通其中一種,需要同時了解PyTorch和TensorFlow的原因在於:(1) 絕大多數情況下研發人員並沒有太多選擇框架的自由。
  • 大數據入門:流處理框架Spark Streaming與Storm
    眾所周知,大數據計算的第一代框架Hadoop,是致力於解決離線計算的問題而產生的,在離線批處理上性能優異,但是在實時流處理上,一直被詬病。Hadoop之後,Spark和Storm在流處理上成為對手。今天的大數據入門分享,我們就主要來講講,流處理框架Spark Streaming與Storm。
  • 保姆級教程,幫你一招引起迪士尼人物的注意
    先來一款入門款的迪士尼美甲,而且是保姆級教程,不可能有人學不會!
  • 聯邦學習開源框架FATE新版本發布!配套引擎EggRoll煥新登場
    而聯邦學習這門技術,則可以將分布式機器學習、密碼學、基於金融規則的激勵機制和博弈論結合起來,從而解決分散數據的使用問題。正文:近日,全球首個聯邦學習工業級開源框架FATE(Federated AI Technology Enabler)正式迎來了1.4新版本發布。
  • TensorRT 加速 PyTorch 模型基本方法
    一.簡介TensorRT是Nvidia公司出的能加速模型推理的框架,其實就是讓你訓練的模型在測試階段的速度加快,比如你的模型測試一張圖片的速度是50ms,那麼用tensorRT加速的話,可能只需要10ms。當然具體能加速多少也不能保證,反正確實速度能提升不少。
  • 大數據分析中Spark,Hadoop,Hive框架該用哪種開源分布式系統
    打開APP 大數據分析中Spark,Hadoop,Hive框架該用哪種開源分布式系統 算法與數據結構 發表於 2020-09-17 13:17:00
  • 20元搞定手工香薰蠟燭,送人自用兩相宜,保姆級教程在這裡~
    今天周到君就教大家來做一款小天使造型的香薰蠟燭~這樣一款造型蠟燭成本不到20元,而且做的越多,成本越低~一學就會的保姆級教程分享幾個香薰蠟燭的基本知識剛入門的朋友需要搞清楚的幾點:香薰蠟燭中蠟的成分是指不同種類的蠟基,在蠟基的選擇上面,就已經決定了香薰蠟燭的基本價格。
  • 適合小白入門Spark的全面教程
    我們將通過處理企業中的大數據的階段,發現需要一個實時處理框架,那就是Apache Skar的實時處理框架,解決了此問題。首先,首先,讓向大家介紹當今世界使用實時分析的幾個大領域。除此之外,Spark還能夠比Hadoop MapReduce( Hadoop處理框架)快100倍地進行批處理。 因此,Apache Spark是業界大數據處理的首選工具。3.什麼是sparkApache Spark是一個用於實時處理的開源集群計算框架。 它擁有蓬勃發展的開源社區,是目前最活躍的Apache項目。
  • 【mm專欄】神秘信使保姆級入門教程
    所以今天從入門級教起,希望能夠幫對它感興趣的人能夠順利入坑!首先,我來稍微介紹一下mm這個遊戲。mm是一部主打聊天室的乙女遊戲。在遊戲中,你是新加入R.F.A的成員,使用這個app與其他成員交流。遊戲裡的大部分時間,你都是通過類似群聊的聊天室來回復其他人的話,以此提升好感度的。
  • 《我的世界》製作窗戶保姆級教程,再也不做山頂洞人啦
    這不,胖虎近期又學會了《我的世界》24款創意的窗戶設計,並且做好圖解總結出一份保姆級教程。收藏夾:拒絕吃灰!①初級版的窗戶設計就是只搭建框架,無需其他裝飾方塊加以點綴。看,只要掌握了這本《我的世界》製作窗戶保姆級教程,山頂洞人也能住上精緻的火柴盒啦(狗頭)
  • 關於近視眼鏡的保姆級教程
    那麼,近視眼鏡該如何驗配,眼科醫生出品的佩戴眼鏡的保姆級教程,你值得擁有~ 如何選擇一副更適合自己的眼鏡呢?這裡大有學問。
  • 新手入門:Spark 部署實戰入門
    Spark簡介整體認識Apache Spark是一個圍繞速度、易用性和複雜分析構建的大數據處理框架。
  • 前端框架bootstrap4.4入門教程,使用方法實例響應式布局實戰
    bootstrap是我最喜歡的前端框架,沒有之一,當前的最新版本是bootstrap4.4.1,和之前的3.X版本相比較有較大的變化,不過都是屬於各種標籤的分離,方法還是一樣的,在網上各種教程雖多,但是對於入門還不是不夠,很多入門教程講得雲裡霧裡,看不懂到底在說些什麼。我覺得使用具體的實例來結合相關的標籤使用才能真正的加深理解。