多GPU、Parallel|用語および概念単純コード[PyTorch]
今回は,マルチgpuを用いた場合に出現する用語と概念を整理した.
複数のGPUの並列をデータとモデルで整理した.
コード#コード#
Multi-GPU
多GPUに分散する2つの方法 モデル分割/データ分割 alexnetからモデル並列化が研究されている. 型ボトルネックラインの困難などは,高難度の課題とされている.
minbatchとはあまり差がないような気がします.
minbatchのようにデータをスライス並列処理し、
これは後で加算して平均値を求める方法です.
データは各GPUに配信される. 並列演算. が全て完了した後、1 GPUで結果を収集する. を持って1つの場所に集中した各損失は、それぞれ勾配を求める. は、これらの勾配を再び各GPUに送り返す. は、各GPU上で並列に後方に実行される. が再収集され、GPUに送信され、それらの平均値が更新される. は単純なデータ配分と平均によりGPUの使用が不均衡になる. GIL(Global Interpreter Lock)
CPUも各GPUに割り当てられ、各CPUはプロセスを生成し、各GPUに割り当てられる.
◆基本的にはDataParallelで1つの演算の平均値を個別に与える.
複数のGPUの並列をデータとモデルで整理した.
コード#コード#
Multi-GPU
以前、GPUを少なくするにはどうすればいいかずっと考えていました.
最近、性能に重点を置き、GPUを大量に使用している.
クリーンアップ用語
シングル:1つの使用と複数の使用:複数の使用
GPU VS Node:Nodeはコンピュータを指します.
シングルノードシングルGPU:1台のコンピュータ上で1つのGPUを使用する
シングルノードマルチGPU:1台のコンピュータ上で複数のGPUを使用する
マルチノードマルチGPU:サーバルームで複数のGPUを使用
Model parallel
学習を
class ModelParallelResNet(ResNet):
def __init__():
...
self.seq1 = nn.Sequential(
self.conv2,...
).to('cuda:0') # cuda0에 할당
self.seq2 = nn.Sequential(
self.conv2,...
).to('cuda:1') # cuda1에 할당
...
def forward(self,x):
x = self.seq2(self.seq1(x).to('cuda:1')) # cuda0에서 cuda1로 복사한다
Data parallel
いわゆるData Parallel
minbatchとはあまり差がないような気がします.
minbatchのようにデータをスライス並列処理し、
これは後で加算して平均値を求める方法です.
Forwardレッスン
バックアッププロセス
特長
PyTorchコード
parallel_model = torch.nn.DataParallel(model)
...
# backward 할 때 Average GPU-losses + backward pass
loss.mean().backward()
Distributed Data Parallel
CPUも各GPUに割り当てられ、各CPUはプロセスを生成し、各GPUに割り当てられる.
◆基本的にはDataParallelで1つの演算の平均値を個別に与える.
train_sampler = torch.utils.data.distributed.DistributedSampler(data)
loader = torch.utils.data.DataLoader(data,batch_size=20,shuffle = False,
pin_memory = True,sampler=train_sampler)
def main():
n_gpus = torch.cuda.device_count()
torch.multiprocessing.spawn(main_worker,nprocs=n_gpus,args=(n_gpus,)
def main_worker(gpu,n_gpus):
...
# 멀티프로세싱 통신 규약 정의
torch.distributed.init_process_group(backend='nccl',
init_method='tcpL//~',world_size=n_gpus,rank=gpu)
# Distributed DataParallel 정의
torch.nn.parallel.DistributedDataParallel(model,device_idx=[gpu])
またnum workersではGPU x 4がよく使われています.Reference
この問題について(多GPU、Parallel|用語および概念単純コード[PyTorch]), 我々は、より多くの情報をここで見つけました https://velog.io/@bo-lim/Multi-GPU-Parallel-용어와-개념-간단한-코드PyTorch-와-함께-한방에-정리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol