最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PyTorch 分布式訓(xùn)練的實(shí)現(xiàn)

 更新時間:2025年05月15日 10:27:48   作者:handsomeboysk  
本文主要介紹了PyTorch 分布式訓(xùn)練的實(shí)現(xiàn),包括數(shù)據(jù)并行、模型并行、混合并行和流水線并行等模式,感興趣的可以了解一下

在深度學(xué)習(xí)模型變得日益龐大之后,單個 GPU 的顯存已經(jīng)無法滿足高效訓(xùn)練的需求。此時,“分布式訓(xùn)練(Distributed Training)”技術(shù)應(yīng)運(yùn)而生,成為加速訓(xùn)練的重要手段。

本文將圍繞以下三行典型的 PyTorch 分布式訓(xùn)練代碼進(jìn)行詳細(xì)解析,并擴(kuò)展介紹分布式訓(xùn)練的核心概念和實(shí)踐方法:

local_rank = int(os.getenv('LOCAL_RANK', -1))  # https://pytorch.org/docs/stable/elastic/run.html
global_rank = int(os.getenv('RANK', -1))
world_size = int(os.getenv('WORLD_SIZE', 1))

一、什么是分布式訓(xùn)練?

分布式訓(xùn)練是指將模型訓(xùn)練過程劃分到多個計算設(shè)備(通常是多個 GPU,甚至是多臺機(jī)器)上進(jìn)行協(xié)同處理,目標(biāo)是加速訓(xùn)練速度擴(kuò)展模型容量。

分布式訓(xùn)練可以分為以下幾種模式:

  • 數(shù)據(jù)并行(Data Parallelism):每個 GPU 處理不同的數(shù)據(jù)子集,同步梯度。
  • 模型并行(Model Parallelism):將模型拆成多個部分,分別部署到不同的 GPU。
  • 混合并行(Hybrid Parallelism):結(jié)合模型并行和數(shù)據(jù)并行。
  • 流水線并行(Pipeline Parallelism):按層切分模型,不同 GPU 處理不同階段。

二、理解分布式訓(xùn)練的核心概念

1. World Size(全局進(jìn)程數(shù))

world_size = int(os.getenv('WORLD_SIZE', 1))
  • 含義:分布式訓(xùn)練中,所有參與訓(xùn)練的進(jìn)程總數(shù)。通常等于 GPU 總數(shù)。
  • 作用:用于初始化進(jìn)程組(torch.distributed.init_process_group()),讓每個進(jìn)程知道集群的規(guī)模。

比如你有兩臺機(jī)器,每臺 4 塊 GPU,那么 world_size = 8。

2. Rank(全局進(jìn)程編號)

global_rank = int(os.getenv('RANK', -1))
  • 含義:標(biāo)識每個訓(xùn)練進(jìn)程在所有進(jìn)程中的唯一編號(從 0 開始)。
  • 作用:常用于標(biāo)記主節(jié)點(diǎn)(rank == 0),控制日志輸出、模型保存等。

例如:

  • rank=0:負(fù)責(zé)打印日志、保存模型
  • rank=1,2,…:只做訓(xùn)練

3. Local Rank(本地進(jìn)程編號)

local_rank = int(os.getenv('LOCAL_RANK', -1))
  • 含義:當(dāng)前訓(xùn)練進(jìn)程在本地機(jī)器上的 GPU 編號。一般與 CUDA_VISIBLE_DEVICES 配合使用。

  • 作用:用于指定該進(jìn)程應(yīng)該使用哪塊 GPU,如:

    torch.cuda.set_device(local_rank)
    

三、環(huán)境變量的設(shè)置方式

這些環(huán)境變量通常由 分布式啟動器 設(shè)置。例如使用 torchrun

torchrun --nproc_per_node=4 --nnodes=2 --node_rank=0 \
    --master_addr=192.168.1.1 --master_port=12345 train.py

torchrun 會自動為每個進(jìn)程設(shè)置:

  • LOCAL_RANK
  • RANK
  • WORLD_SIZE

也可以手動導(dǎo)出:

export WORLD_SIZE=8
export RANK=3
export LOCAL_RANK=3

四、分布式訓(xùn)練初始化流程(PyTorch 示例)

在 PyTorch 中,典型的初始化流程如下:

import os
import torch
import torch.distributed as dist

def setup_distributed():
    local_rank = int(os.getenv('LOCAL_RANK', -1))
    global_rank = int(os.getenv('RANK', -1))
    world_size = int(os.getenv('WORLD_SIZE', 1))

    torch.cuda.set_device(local_rank)

    dist.init_process_group(
        backend='nccl',  # GPU 用 nccl,CPU 用 gloo
        init_method='env://',
        world_size=world_size,
        rank=global_rank
    )
  • init_method='env://':表示從環(huán)境變量中讀取初始化信息。
  • nccl 是 NVIDIA 的高性能通信庫,支持 GPU 間高速通信。

五、分布式訓(xùn)練的代碼結(jié)構(gòu)

使用 PyTorch 實(shí)現(xiàn)分布式訓(xùn)練的基本框架:

def train():
    setup_distributed()

    model = MyModel().cuda()
    model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[local_rank])

    dataset = MyDataset()
    sampler = torch.utils.data.distributed.DistributedSampler(dataset)
    dataloader = DataLoader(dataset, sampler=sampler, batch_size=64)

    for epoch in range(epochs):
        sampler.set_epoch(epoch)
        for batch in dataloader:
            # 正常訓(xùn)練流程

六、Elastic Training(彈性訓(xùn)練)

值得注意的是,示例代碼中注釋中提到的鏈接:https://pytorch.org/docs/stable/elastic/run.html

這是指 PyTorch 的 彈性分布式訓(xùn)練(Elastic Training),支持在訓(xùn)練過程中動態(tài)增加或移除節(jié)點(diǎn),具備高容錯性。

  • 工具:torch.distributed.elastic
  • 啟動命令:torchrun --standalone --nnodes=1 --nproc_per_node=4 train.py

該特性對于大規(guī)模、長時間訓(xùn)練任務(wù)非常重要。

七、總結(jié)

變量名含義來源典型用途
WORLD_SIZE全局進(jìn)程數(shù)量torchrun 設(shè)置初始化進(jìn)程組,全局通信
RANK當(dāng)前進(jìn)程的全局編號torchrun 設(shè)置控制主節(jié)點(diǎn)行為
LOCAL_RANK當(dāng)前進(jìn)程在本地的 GPU 編號torchrun 設(shè)置顯卡綁定:torch.cuda.set_device

這三行代碼雖然簡單,卻是 PyTorch 分布式訓(xùn)練的入口。理解它們,就理解了 PyTorch 在分布式場景下的通信機(jī)制和訓(xùn)練框架。

如果你想要進(jìn)一步深入了解 PyTorch 分布式訓(xùn)練,推薦官方文檔:

到此這篇關(guān)于PyTorch 分布式訓(xùn)練的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)PyTorch 分布式訓(xùn)練內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • python去重,一個由dict組成的list的去重示例

    python去重,一個由dict組成的list的去重示例

    今天小編就為大家分享一篇python去重,一個由dict組成的list的去重示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python序列解包應(yīng)用示例詳解

    python序列解包應(yīng)用示例詳解

    這篇文章主要為大家介紹了python序列解包應(yīng)用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Flask框架信號用法實(shí)例分析

    Flask框架信號用法實(shí)例分析

    這篇文章主要介紹了Flask框架信號用法,結(jié)合實(shí)例形式分析了Blinker的安裝及信號的接收等相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • 如何使用Python實(shí)現(xiàn)一個簡易的ORM模型

    如何使用Python實(shí)現(xiàn)一個簡易的ORM模型

    ORM(Object Relational Mapping)是一種程序設(shè)計技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。本文將介紹如何使用Python實(shí)現(xiàn)一個簡易的ORM
    2021-05-05
  • 16個python常用魔法函數(shù)小結(jié)

    16個python常用魔法函數(shù)小結(jié)

    本文主要介紹了16個python常用魔法函數(shù)小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Python制作一個PPT文本提取工具

    Python制作一個PPT文本提取工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Python開發(fā)一個帶圖形界面的PPT文本提取工具,可以從PPTX文件中提取所有文本內(nèi)容,有需要的小伙伴可以了解下
    2025-01-01
  • Python 隨機(jī)生成測試數(shù)據(jù)的模塊:faker基本使用方法詳解

    Python 隨機(jī)生成測試數(shù)據(jù)的模塊:faker基本使用方法詳解

    這篇文章主要介紹了Python 隨機(jī)生成測試數(shù)據(jù)的模塊:faker基本使用方法,結(jié)合實(shí)例形式詳細(xì)分析了Python 隨機(jī)生成測試數(shù)據(jù)的模塊faker基本功能、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • Python 閉包的使用方法

    Python 閉包的使用方法

    這篇文章主要介紹了Python 閉包的使用方法的相關(guān)資料,了解閉包及定義方法和使用,需要的朋友可以參考下
    2017-09-09
  • 如何利用python將一個py文件變成一個軟件詳解

    如何利用python將一個py文件變成一個軟件詳解

    在我們完成一個Python項(xiàng)目或一個程序時,希望將Python的py文件打包成在Windows系統(tǒng)下直接可以運(yùn)行的exe程序,下面這篇文章主要給大家介紹了關(guān)于如何利用python將一個py文件變成一個軟件的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • python如何刪除文件夾下的所有文件

    python如何刪除文件夾下的所有文件

    文章介紹了如何使用Python刪除文件夾下的所有文件,如果要刪除特定文件,可以使用類似的方法,作者分享了個人經(jīng)驗(yàn),并鼓勵大家支持腳本之家
    2026-01-01

最新評論

宿松县| 昌黎县| 棋牌| 焉耆| 田林县| 南京市| 张家界市| 平遥县| 威宁| 淮安市| 德安县| 衡南县| 滨海县| 鹤岗市| 武功县| 正定县| 云龙县| 来凤县| 南通市| 读书| 岫岩| 常德市| 五台县| 花垣县| 丹寨县| 遂溪县| 泉州市| 河东区| 巴中市| 游戏| 保康县| 中山市| 城口县| 安阳县| 弥勒县| 安图县| 蓬莱市| 南江县| 增城市| 延寿县| 合水县|