欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pytorch distributed 多卡并行載入模型操作

 更新時間:2021年06月05日 10:09:20   作者:orientliu96  
這篇文章主要介紹了Pytorch distributed 多卡并行載入模型操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、Pytorch distributed 多卡并行載入模型

這次來介紹下如何載入模型。

目前沒有找到官方的distribute 載入模型的方式,所以采用如下方式。

大部分情況下,我們在測試時不需要多卡并行計算。

所以,我在測試時只使用單卡。

from collections import OrderedDict
device = torch.device("cuda")
model = DGCNN(args).to(device)  #自己的模型
state_dict = torch.load(args.model_path)    #存放模型的位置

new_state_dict = OrderedDict()
for k, v in state_dict.items():
    name = k[7:] # remove `module.`
    new_state_dict[name] = v
    # load params
model.load_state_dict (new_state_dict)

二、pytorch DistributedParallel進行單機多卡訓(xùn)練

One_導(dǎo)入庫:

import torch.distributed as dist
from torch.utils.data.distributed import DistributedSampler

Two_進程初始化:

parser = argparse.ArgumentParser()
parser.add_argument('--local_rank', type=int, default=-1)
# 添加必要參數(shù)
# local_rank:系統(tǒng)自動賦予的進程編號,可以利用該編號控制打印輸出以及設(shè)置device

torch.distributed.init_process_group(backend="nccl", init_method='file://shared/sharedfile',
rank=local_rank, world_size=world_size)

# world_size:所創(chuàng)建的進程數(shù),也就是所使用的GPU數(shù)量
# (初始化設(shè)置詳見參考文檔)

Three_數(shù)據(jù)分發(fā):

dataset = datasets.ImageFolder(dataPath)
data_sampler = DistributedSampler(dataset, rank=local_rank, num_replicas=world_size)
# 使用DistributedSampler來為各個進程分發(fā)數(shù)據(jù),其中num_replicas與world_size保持一致,用于將數(shù)據(jù)集等分成不重疊的數(shù)個子集

dataloader = DataLoader(dataset, batch_size=batch_size, num_workers=1,drop_last=True, pin_memory=True, sampler=data_sampler)
# 在Dataloader中指定sampler時,其中的shuffle必須為False,而DistributedSampler中的shuffle項默認為True,因此訓(xùn)練過程默認執(zhí)行shuffle

Four_網(wǎng)絡(luò)模型:

torch.cuda.set_device(local_rank)
device = torch.device('cuda:'+f'{local_rank}')
# 設(shè)置每個進程對應(yīng)的GPU設(shè)備

D = Model()
D = torch.nn.SyncBatchNorm.convert_sync_batchnorm(D).to(device)
# 由于在訓(xùn)練過程中各卡的前向后向傳播均獨立進行,因此無法進行統(tǒng)一的批歸一化,如果想要將各卡的輸出統(tǒng)一進行批歸一化,需要將模型中的BN轉(zhuǎn)換成SyncBN
   
D = torch.nn.parallel.DistributedDataParallel(
D, find_unused_parameters=True, device_ids=[local_rank], output_device=local_rank)
# 如果有forward的返回值如果不在計算loss的計算圖里,那么需要find_unused_parameters=True,即返回值不進入backward去算grad,也不需要在不同進程之間進行通信。

Five_迭代:

data_sampler.set_epoch(epoch)
# 每個epoch需要為sampler設(shè)置當(dāng)前epoch

Six_加載:

dist.barrier()
D.load_state_dict(torch.load('D.pth'), map_location=torch.device('cpu'))
dist.barrier()
# 加載模型前后用dist.barrier()來同步不同進程間的快慢

Seven_啟動:

CUDA_VISIBLE_DEVICES=1,3 python -m torch.distributed.launch --nproc_per_node=2 train.py --epochs 15000 --batchsize 10 --world_size 2
# 用-m torch.distributed.launch啟動,nproc_per_node為所使用的卡數(shù),batchsize設(shè)置為每張卡各自的批大小

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pycharm?終端部啟用虛擬環(huán)境詳情

    pycharm?終端部啟用虛擬環(huán)境詳情

    這篇文章主要介紹了pycharm?終端部啟用虛擬環(huán)境詳情,文章圍繞pycharm?終端部啟用虛擬環(huán)境商務(wù)相關(guān)資料展開全文章的詳細內(nèi)容,需要的小伙伴可以參考一下
    2021-12-12
  • 教你如何在Pygame 中移動你的游戲角色

    教你如何在Pygame 中移動你的游戲角色

    Pygame是一組跨平臺的 Python 模塊,專為編寫視頻游戲而設(shè)計,您可以使用 pygame 創(chuàng)建不同類型的游戲,包括街機游戲、平臺游戲等等,今天通過本文給大家介紹Pygame移動游戲角色的實現(xiàn)過程,一起看看吧
    2021-09-09
  • 微信小程序跳一跳游戲 python腳本跳一跳刷高分技巧

    微信小程序跳一跳游戲 python腳本跳一跳刷高分技巧

    這篇文章主要為大家詳細介紹了微信小程序跳一跳游戲,python腳本跳一跳刷高分技巧,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • jupyter運行時左邊一直出現(xiàn)*號問題及解決

    jupyter運行時左邊一直出現(xiàn)*號問題及解決

    這篇文章主要介紹了jupyter運行時左邊一直出現(xiàn)*號問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 如何利用Pandas刪除某列指定值所在的行

    如何利用Pandas刪除某列指定值所在的行

    工作中通常會遇到大量的數(shù)據(jù)集需要處理,其中的一項就是將含有某些數(shù)據(jù)的行刪除掉,下面這篇文章主要給大家介紹了關(guān)于如何利用Pandas刪除某列指定值所在的行的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • python 如何對logging日志封裝

    python 如何對logging日志封裝

    這篇文章主要介紹了python 如何對logging日志封裝,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • django+celery+RabbitMQ自定義多個消息隊列的實現(xiàn)

    django+celery+RabbitMQ自定義多個消息隊列的實現(xiàn)

    本文主要介紹了django+celery+RabbitMQ自定義多個消息隊列的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 安裝ElasticSearch搜索工具并配置Python驅(qū)動的方法

    安裝ElasticSearch搜索工具并配置Python驅(qū)動的方法

    這篇文章主要介紹了安裝ElasticSearch搜索工具并配置Python驅(qū)動的方法,文中還介紹了其與Kibana數(shù)據(jù)顯示客戶端的配合使用,需要的朋友可以參考下
    2015-12-12
  • opencv+python識別七段數(shù)碼顯示器的數(shù)字(數(shù)字識別)

    opencv+python識別七段數(shù)碼顯示器的數(shù)字(數(shù)字識別)

    本文主要介紹了opencv+python識別七段數(shù)碼顯示器的數(shù)字(數(shù)字識別),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 基于Python實現(xiàn)語音識別和語音轉(zhuǎn)文字

    基于Python實現(xiàn)語音識別和語音轉(zhuǎn)文字

    這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)語音識別和語音轉(zhuǎn)文字功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-09-09

最新評論