ABOUT ME

Today
-
Total
-
  • [Do it! 강화 학습 입문]6장. 분산 강화 학습 공부하기
    도서 정리/Do it! 강화 학습 입문 2023. 8. 23. 15:15
    본문의 모든 내용과 이미지의 저작권은 이지스퍼블리싱의 Do it! 강화 학습 입문 도서에 있습니다.

    6-1. 분산 학습 기초 공부하기

    1. 분산 학습은 왜 필요할까?

    • 강화 학습을 포함하여 인공지능을 개발하는 데 필요한 데이터 양은 기하급수로 증가
    • 데이터 양의 증가는 학습 시간의 증가로 연결, 학습 계산 자원이 더 필요하다는 것을 의미
    공개 데이터 세트 데이터 양
    Kinetics-700(사람 행동 위주의 유튜브 Video URL) URL 70만 개
    Google’s Open Images Dataset(구글에서 공개한 이미지 모음) 이미지 1,000만 장
    SNAP - Amazon Review(스탠퍼드 대학에서 수집한 아마존 리뷰) 리뷰 3,468만 6,770개
    The Blog Authorship Corpus(blogger.com 블로거 2만여 명의 포스터 모음) 포스팅 68만 1,288개, 단어 140만 개

    2. 분산 학습 환경이란?

    • 분산 학습은 분산 컴퓨팅을 기반으로 함
    • 분산 컴퓨팅이란, 여러 컴퓨터를 연결하여 문제를 빠르게 해결하는 방법

    분산 학습 환경의 기술 계층

    • 분산 학습 환경의 큰 축은 다음의 3가지
      • 클러스터 컴퓨팅과 클라우드 컴퓨팅: 컴퓨터를 여러대 연결하여 컴퓨팅 자원을 늘려 줌
      • 멀티스레드와 멀티코어: 한번에 여러 작업을 진행할 수 있게 해 줌
      • 하드웨어 가속기: 그래픽 카드(GPU) 등

    클러스터 컴퓨팅과 클라우드 컴퓨팅

    • 클러스터 컴퓨팅(Cluster computing)컴퓨터 여러 대를 하나의 커다란 그룹으로 묶어 연산력을 높이는 컴퓨팅 환경
      • 컴퓨터 자원 하나는 노드(node)라고 칭함
      • 클러스터 컴퓨팅은 클라우드 컴퓨팅(Cloud computing)으로 발전
    • 클라우드 컴퓨팅은 원하는 자원을 주문한 즉시 바로 사용하고, 비용을 사용한 시간과 자원만큼만 지불하는 매우 유연한 컴퓨팅 환경
    • 두 컴퓨팅 환경 모두 네트워크 구조에 따라 성능에 영향을 끼침

    멀티스레드와 멀티코어

    • 멀티스레드(Multi thread)는 한 CPU 안에서 여러 연산이 병렬로 진행되는 기술
    • 멀티코어(Multi core)는 CPU 코어를 여러 개 사용하는 기술
    • 두 기술 모두 애플리케이션의 병렬 처리 모델에 따라 성능이 좌우됨

    하드웨어 가속기

    • 하드웨어 가속기에는 GPU, TPU(Tensor Processing Unit), FPGA(Field Programmable Gate Array)가 있음
      • 모두 컴퓨터의 연산 자원인 CPU, 메모리를 사용하지 않음
      • 연산 유닛과 메모리 구조를 따로 가지고 있음
    • 하드웨어 가속기는 SIMD(Single Intruction Multiple Data)를 극대화한 장치
      • 특정 연산을 하드웨어로 직접 구현하거나 명령어 하나를 대량의 데이터에 적용하는 기술

    3. 분산 학습을 위한 소프트웨어 알아보기

    분산 학습을 위한 소프트웨어 스택 설치 모습

    CPU SIMD 라이브러리와 하드웨어 가속기 라이브러리

    • 멀티스레드와 멀티코어를 활용하려면 하드웨어 가속기에 명령어를 직접 전달해 주는 소프트웨어가 필요
      • CPU 제조사에서 제공하는 컴파일러나 명령어가 호환되는 컴파일러가 필요
    • 또한, 하드웨어 가속기를 사용하는 소프트웨어를 만들려면 해당 하드웨어 제조사에서 제공하는 CUDA와 같은 저수준 툴킷과 관련된 프레임 워크가 필요

    분산 컴퓨팅 라이브러리

    • 여러 컴퓨터를 네트워크로 연결하여 통신을 하려면 별도의 소프트웨어가 필요
      • 가장 간단한 통신 라이브러리는 소켓(Socket)
    • 소켓은 컴퓨터끼리 직접 통신을 하는 기능만 제공
      • 분산 학습에는 컴퓨터 간 통신뿐 아니라 다양한 데이터를 교환할 때 발생하는 오버헤드가 제거된 고수준의 통신을 갖춰야 함
    • 즉, 분산 컴퓨팅 라이브러리가 필요
    분산 컴퓨팅 라이브러리 설명
    MPI 라이브러리 - TCP/IP 기반 라이브러리로 가장 오래되었음
    - 머신러닝을 위한 분산 컴퓨팅이 아닌, 범용 분산 컴퓨팅을 위한 라이브러리
    - 개발자가 머신러닝 알고리즘을 직접 구현해야 함
    NCCL 라이브러리 - MPI API 기반으로 만들어진 다중 GPU를 사용할 수 있는 라이브러리
    - 개발자가 머신러닝 알고리즘을 직접 구현해야 함
    Horovod 라이브러리 - 분산 머신러닝을 위한 추상화 제공
    - 강화 학습에 특화된 내용은 개발자가 구현해야 함
    RLlib 라이브러리 - Ray 아키텍처를 기반으로 만든 라이브러리
    - 분산 강화 학습에 특화되었음

    머신러닝 프레임워크

    • 머신러닝 프레임워크로 잘 알려진 텐서플로, 파이토치, 카페 등은 다양한 라이브러리를 쉽게 사용할 수 있도록 지원
      • 분산 학습을 할 때 직접 해야 할 일이 많지 않다는 것

    분산 학습을 위한 소프트웨어를 모두 포함하고 있는 머신러닝 프레임워크

    6-2. 분산 강화 학습을 위한 RLlib 라이브러리

    • RLlib 라이브러리는 Ray 아키텍처의 일부 기능을 그대로 사용
      • Ray 아키텍처도 알아야 함

    1. Ray 아키텍처 살펴보기

    • RLlib을 이해하는 데 필요한 내용 위주로 살펴봄

    분산 학습 모델에서 사용하는 Ray 아키텍처의 구조 살펴보기

    • Ray 아키텍처에서는 분산 학습을 유연하게 구현하도록 실행 코드를 그래프화
    • 그래프 노드를 드라이버(driver), 태스크(task), 액터(actor)로 분류하여 분산된 서버에 적절히 배치
    • 실행 코드의 그래프화 및 분산 서버에 대한 배치는 은닉되어 있어 사용자는 알지 못함
      • Ray 아키텍처를 사용하는 개발자는 이런 구조를 자세히 알 필요가 없음

    Ray 아키텍처(Moritz et al. 2018 인용 및 재구성)

    1. GCS(Global Control State)
      • 실행 코드와 데이터의 중앙 통로 역할, 장애 대응을 위해 여러 객체로 구성 됨
    2. 전역 스케쥴러(Global Scheduler)
      • 각 노드에 존재하는 지역 스케쥴러(Local Scheduler)와 협력해서 가장 적합한 노드에 드라이버, 태스크, 액터를 배치하고 실행
      • 개발자는 태스크나 액터로 분류된 함수가 어느 노드에서 실해되는지 알 수 없으며, 함수의 위치에 따라 실행 알고리즘이 달라지진 않음
    3. 노드(서버)
      • 실제 학습 코드가 동작할 노드
      • 드라이버가 학습 코드를 최초로 실행하면 태스크, 액터가 적절한 노드에 배치되어 학습 수행
      • 노드 사이의 자료 교환은 GCS의 Object 테이블(Object Table)에서 이루어 짐

    2. RLlib 자세히 살펴보기

    RLlib 구조 살펴보기

    • RLlib의 전체 계층은 4단계로 구성되며, RLlib의 구성과 동작을 중심으로 알아봄

    RLlib의 구조(RLlib 문서 인용 및 재구성)

    분산 학습 프레임워크

    • 아키텍처의 가장 아래쪽에 있는 것이 Ray 아키텍처의 분산 학습 프레임워크
      • 태스크, 액터 기반의 프로그래밍 모델을 활용하여 분산 강화 학습에 필요한 프레임워크 제공
    ℹ️ 분산 학습 프레임워크에 Ray 아키텍처를 선택한 이유

    RLlib 개발자들은 Ray 아키텍처를 선택한 이유로 분산 학습 모델과 태스크와 액터로 구성된 프로그래밍 모델이 대규모 학습을 잘 분산할 수 있으며 계층 제어(Hierarchical Control)에 적합하기 때문이라고 설명했습니다.

    강화 학습 추상화 계층

    • 분산 학습 프레임워크 바로 위에는 강화 학습 추상화 계층이 있음
      • 정책과 같은 강화 학습을 위한 클래스가 정의되어 있음
      • 또한, 이런 클래스를 활용하여 구현한 강화 학습과 분산 강화 학습 알고리즘도 정의
      • RLlib을 잘 이해하고 사용하려면 이 계층의 사용 방법을 알아야 함

    RLlib의 강화 학습 기본 구성(RLlib 문서 인용 및 재구성)

    • RLlib은 강화 학습에 필요한 전체 흐름을 모두 클래스로 정의
    • 개발자가 필요한 부분을 상속받아 수정할 수 있도록 구성
      • 단, 점선으로 표현한 박스는 RLlib에서 제공하는 클래스나 함수를 그대로 사용해야 함
    • RLlib은 많이 알려진 강화 학습 알고리즘을 미리 구현하여 제공

    강화 학습 알고리즘 머신러닝 프레임워크 다중 에이전트 모델

    강화 학습 알고리즘 머신러닝 프레임워크 다중 에이전트 모델
    A2C, A3C 텐서플로, 토치 지원 RNN, LSTM auto-wrapping, Transformer, autoreg
    ARS 텐서플로, 토치 미지원  
    BC 텐서플로, 토치 지원 RNN
    ES 텐서플로, 토치 미지원  
    DDPG, TD3 텐서플로, 토치 지원  
    APEX-DDPG 텐서플로, 토치 지원  
    Dreamer 토치 미지원 RNN
    DQN, Rainbow 텐서플로, 토치 지원  
    APEX-DQN 텐서플로, 토치 지원  
    IMPALA 텐서플로, 토치 지원 RNN, LSTM auto-wrapping, Transformer, autoreg
    MAML 텐서플로, 토치 미지원  
    MARWIL 텐서플로, 토치 지원 RNN
    MBMPO 토치 미지원  
    PG 텐서플로, 토치 지원 RNN, LSTM auto-wrapping, Transformer, autoreg
    PPO, APPO 텐서플로, 토치 지원 RNN, LSTM auto-wrapping, Transformer, autoreg
    SAC 텐서플로, 토치 지원  
    LinUCB, LinTS 토치 지원  
    AlphaZero 토치 미지원  
    QMIX 토치 다중 에이전트 전용 RNN
    MADDPG 텐서플로 다중 에이전트 전용  
    Parameter Sharing 알고리즘에 따라 다름 다중 에이전트 전용  
    Fully Independent Learning 알고리즘에 따라 다름 다중 에이전트 전용  
    Centralized Critic Methods 알고리즘에 따라 다름 다중 에이전트 전용  

    강화 학습 지원 라이브러리

    • 그림의 가장 위쪽에 위치, 강화 학습에 필요한 라이브러리
    • RLlib은 강화 학습 환경으로 OpenAI Gym, 다중 에이전트, 배치 시뮬레이터, 사용자 정의 에이전트를 지원
    • 또한, 환경에 정책을 실시간으로 반영하는 REST API도 사용자 정의 에이전트에서 제공
    ℹ️ REST API를 사용하면 학습을 진행하는 도중에도 정책 방향을 변경할 수 있음
Designed by Tistory.