婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Pytorch distributed 多卡并行載入模型操作

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

熱門標簽:打電話機器人營銷 聊城語音外呼系統 孝感營銷電話機器人效果怎么樣 ai電銷機器人的優勢 南陽打電話機器人 地圖標注自己和別人標注區別 商家地圖標注海報 騰訊地圖標注沒法顯示 海外網吧地圖標注注冊

一、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進行單機多卡訓練

One_導入庫:

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)
# 添加必要參數
# local_rank:系統自動賦予的進程編號,可以利用該編號控制打印輸出以及設置device

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

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

Three_數據分發:

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

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,因此訓練過程默認執行shuffle

Four_網絡模型:

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

D = Model()
D = torch.nn.SyncBatchNorm.convert_sync_batchnorm(D).to(device)
# 由于在訓練過程中各卡的前向后向傳播均獨立進行,因此無法進行統一的批歸一化,如果想要將各卡的輸出統一進行批歸一化,需要將模型中的BN轉換成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設置當前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為所使用的卡數,batchsize設置為每張卡各自的批大小

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

您可能感興趣的文章:
  • pytorch DistributedDataParallel 多卡訓練結果變差的解決方案
  • PyTorch 多GPU下模型的保存與加載(踩坑筆記)
  • pytorch多GPU并行運算的實現

標簽:楊凌 六盤水 撫州 聊城 迪慶 揚州 南寧 牡丹江

巨人網絡通訊聲明:本文標題《Pytorch distributed 多卡并行載入模型操作》,本文關鍵詞  Pytorch,distributed,多卡,并行,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Pytorch distributed 多卡并行載入模型操作》相關的同類信息!
  • 本頁收集關于Pytorch distributed 多卡并行載入模型操作的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 龙州县| 原平市| 平定县| 卢龙县| 凤山市| 丹江口市| 桦川县| 海安县| 永丰县| 莲花县| 苗栗市| 临高县| 遂宁市| 苏尼特右旗| 定结县| 横峰县| 江都市| 保定市| 高陵县| 宿松县| 库车县| 调兵山市| 临城县| 景洪市| 蒙阴县| 六安市| 四川省| 新龙县| 宁城县| 固镇县| 黄浦区| 洛阳市| 文成县| 罗山县| 南漳县| 沁水县| 泰来县| 腾冲县| 周宁县| 商南县| 老河口市|