Pytorch Distributed 초기화

3879 단어

Pytorch Distributed 초기화 방법


참고 문헌


https://pytorch.org/docs/master/distributed.html
코드https://github.com/overfitover/pytorch-distributed어서 오세요.

초기화

torch.distributed.init_process_group(backend, init_method='env://', **kwargs)

매개변수 설명
  • backend(str): 백엔드 선택, tcp mpi gloo
  • 포함
  • init_method(str, optional): 패키지를 초기화하는 URL, 병렬 제어를 위한 공유 방식
  • world_size (int, optional): 작업에 참여하는 프로세스 수
  • rank(int,optional): 현재 프로세스의rank
  • group_name (str, optional): 이 프로세스를 표시하는 데 사용합니다.

  • init_method()


    다음과 같은 세 가지 방법이 있습니다.
  • file://공유 파일 시스템
  • tcp://IP 그룹 방송
  • env://환경 변수(기본값은 이거)
  • env

    #!/usr/bin/env python
    import os
    import torch
    import torch.distributed as dist
    from torch.multiprocessing import Process
    import time
    
    def run(rank, size):
        pass
    
    
    def init_processes(rank, size, fn, backend='gloo'):
        """ Initialize the distributed environment. """
        os.environ['MASTER_ADDR'] = '162.128.0.22'
        os.environ['MASTER_PORT'] = '29555'
        dist.init_process_group(backend, rank=rank, world_size=size)
        torch.cuda.manual_seed(1)
        fn(rank, size)
        print("MM")
        print(dist.get_rank())
        print(dist.get_world_size())
        print(dist.is_available())
    
    
    def main():
    
        size = 2
        processes=[]
        for i in range(size):
            p = Process(target=init_processes, args=(i, size, run))
            p.start()
            processes.append(p)
    
        for p in processes:
            p.join()
    
    if __name__ == "__main__":
        start_time = time.time()
        main()
    
        end_time = time.time()
        print("  :", end_time-start_time)
    
    

    162.128.0.22를 자신의 IP 주소로 바꾸십시오.

    tcp

    import torch
    import torch.distributed as dist
    import argparse
    from time import sleep
    from random import randint
    from torch.multiprocessing import Process
    
    
    def initialize(rank, world_size, ip, port):
        dist.init_process_group(backend='tcp', init_method='tcp://{}:{}'.format(ip, port), rank=rank, world_size=world_size)
        print("MM")
    
    def main():
        parser = argparse.ArgumentParser()
        parser.add_argument('--ip', type=str, default='162.128.0.22')
        parser.add_argument('--port', type=str, default='20000')
        parser.add_argument('--rank', '-r', type=int)
        parser.add_argument('--world-size', '-s', type=int)
        args = parser.parse_args()
        print(args)
        # initialize(args.rank, args.world_size, args.ip, args.port)
    
        size = 2
        processes = []
        for i in range(size):
            p = Process(target=initialize, args=(i, size, args.ip, args.port))
            p.start()
            processes.append(p)
    
        for p in processes:
            p.join()
    
    
    if __name__ == '__main__':
        main()
    

    162.128.0.22를 자신의 IP 주소로 바꾸십시오.

    파일 공유

    import argparse
    from time import sleep
    from random import randint
    from torch.multiprocessing import Process
    
    
    def initialize(rank, world_size):
        dist.init_process_group(backend='gloo', init_method='file:///home/yxk/Documents/Deeplearningoflidar139/overfitover/share', rank=rank, world_size=world_size)
        print("MM")
    
    def main():
    
        size = 2
        processes = []
        for i in range(size):
            p = Process(target=initialize, args=(i, size))
            p.start()
            processes.append(p)
    
        for p in processes:
            p.join()
    
    
    if __name__ == '__main__':
        main()
    

    주의 initmethod: file://로 시작해서 공유 파일 시스템에 존재하지 않는 파일 (기존 디렉터리에 있는) 의 경로를 포함해야 합니다.파일이 없는 경우 파일 시스템 초기화는 자동으로 생성되지만 삭제되지는 않습니다.다음 init에서process_그룹이 호출하기 전에 이 파일을 잘 알고 있습니다.
    전재 대상:https://www.cnblogs.com/o-v-o/p/9975355.html

    좋은 웹페이지 즐겨찾기