Posts

Thursday, 4 July 2019

자율주행을 위한 클라이언트 시스템




자율주행시스템 = 소프트웨어 + 하드웨어
다양한 컴포넌트들이 상호작용하려면 OS가 필요한데, 우리가 쓰는 ROS를 중심으로 알아보자.

< 복잡한 자율주행시스템 >


  1. 센싱 - GPS/ LiDAR/ Camera
    1. 센서는 주변 환경에서 데이터를 수집
    2. 인지와 동작 연산을 수행하는 컴퓨터 플랫폼으로 전달
  2. 인지 - 로컬라이제이션/ 개체 인식/ 개체 추적
  3. 의사결정 - 예측/ 경로 계획/ 장애물 회피
    1. 동작 계획 생성
    2. 제어 플랫폼으로 전달
이 전체를 통합하는 것은 클라이언트 시스템 위에서 이뤄지며, 클라이언트 시스템은 다시 OS와 하드웨어 플랫폼으로 구성된다. OS가 무엇을 하느냐? 데이터가 증가할 수록 시스템 자원을 할당하기 힘들어지는데 OS가 각 컴포넌트마다 사용할 수 있는 자원의 양을 제한해준다.


<자율 주행을 위한 OS>

  • OS의 두 가지 핵심 기능
  1. 통신
  2. 자원할당
  • ROS
  1. 노드 node: 노드는 어떤 일을 수행하는 과정이다. ex. 모터 제어 노드는 모터에 대한 정보를 읽어서 모터의 회전을 제어한다. 경로 계획 노드는 모바일 플랫폼의 동작 계획(motion planning)을 구현하는데 사용된다.
  2. 노드 관리자 node manager/ 마스터 master: 다른 노드를 관리한다. 각 노드마다 자신에 대한 정보를 노드 관리자에 등록해야 한다. 노드 관리자는 노드 운영에 관련된 설정 매개변수를 중앙에 저장.
  3. 매개변수 서버 parameter server: 매개변수 서버는 시스템에 있는 노드의 운영에 관련된 설정 매개변수를 중앙에 저장
  4. 메시지 message: 노드끼리 주고받는 정보
  5. 토픽 topic: 발행-구독 방식의 통신 메커니즘, 어떤 노드가 특정 토픽에 메시지를 발행하면 이 토픽을 구독하던 다른 노드는 그 노드가 발행한 메시지를 받게 됨.
  6. 서비스 service:1 대 1 통신 메커니즘, 노드가 서비스 노드에서 제공하는 서비스를 요청하면 두 노드 사이의 통신 채널을 만들어줌.

  • 시스템 신뢰성
    • 시스템의 견고성 robustness와 신뢰성을 높이도록 마스터 노드를 분산하는 것이 필요
    • 어떻게? 주키퍼 ZooKeeper 활용
      • 여러 개의 마스터 노드를 구동해 하나는 액티브 마스터 노드로 작동하고 나머지는 백업용으로 구동
      • 액티브 마스터 노드가 뻗을 경우, 백업 마스터 노드 중 하나를 새로운 액티브 마스터 노드로 선정해서 작동시키면 됨! -> 견고성 확보
      • 모든 노드의 상태를 감시하는 모니터 노드를 추가해야 함.
        • 각 시스템에 있는 노드는 ZooKeeper에게 심박Heartbeat message를 주기적으로 보내는데, 일정 시간동안 심박 메시지를 받지 못했다면 그 노드는 죽었다고 간주
        • 그러면 ZooKeeper는 모니터 노드에게 그 노드가 죽었으니 새로 구동하라고 알려줌
        • 상태 / 무상태 두 경우가 있고, 상태를 저장하면 재구동 시 마지막 저장 상태를 이어서 시작 (-> 심박메시지를 보낼 때 상태 정보를 함께 보내기도 함)
  • 자원 관리 및 보완
    • 노드 중 하나가 공격을 당했다! -> 

<컴퓨팅 플랫폼>

자율 주행 자동차에 장착된 센서들은 초당 2GB 이상의 데이터를 생성 및 전송
-> 컴퓨팅 플랫폼의 설계 방식이 실시간 성능뿐만 아니라 자율 주행 시스템의 견고성에 직접적인 영향을 미침
* 문제는: 비용, 전력 소비량, 방열heat dissipation

  • 컴퓨팅 플랫폼 구현 [4]
    • 기존 컴퓨팅 플랫폼
여기서 사용한 컴퓨팅 플랫폼은 1세대에 해당하며, 2개의 컴퓨팅 박스로 구성되는데, 각각 인텔 제온 E5프로세서와4~8개의엔비디아 K80GPU 가속기를 장착하고 이들을 PCI-E 버스로 연결했다. 이렇게구성한 플랫폼을 통해 최대로 발휘히는 성능은 (12개의 코어로 구성된) CPU를 통해 400GOPS/s 수준으로 400W의 전력을 사용한다. 각각의 GPU마다 8TOPS/s를 내며 전력은 300W를 소비한다. 이들을 모두 합해서 전체 시스템이 발휘하는 성능은 3,000W 전력 소비량으로 64.5TOPS/s의 성능을 발휘한다. 이렇게 구성한 컴퓨팅박스는 차량 주위에 설치된 12개의 고해상도 카메라와 연결하여 개체 감지 및 개체추적 태스크를 수행한다. 라이다 장치는 차량의 꼭대기에 장착해 차량에 대한 로컬라이제이션과 장애물 회피 기능을 담당한다. 두 번째 컴퓨팅 박스는 첫 번째 박스와 동일한 태스크를 수행하며, 시스템의 신뢰성을 보장하기 위한 용도로 장착한다. 즉, 첫 번째 박스가 죽으면 두 번째 박스가 즉시 역할을 넘겨받는다. 두 박스 모두 최고로 작동하는 최악의 경우, 5,000W의 전력을 소비하면서 엄청난 열을 발산한다. 또한 한 박스를 구축하는 데 드는 비용은 미화 20,000~30,000달러에 육박해서, 일반소비자가 솔루션을 구성하는 데 있어 감당할 수 없는 수준이다.
    • 기존 컴퓨팅 솔루션
      • 자율 주행을 위한 GPU 솔루션 중 가장 대표적인 엔비디아 PX 솔루션
        • PX2에는 2개의 테그라 Tegra SoC와 2개의 파스칼 Pascal 그래픽스 프로세서 장착
        • AlexNet을 구동할 때 초당 2800개 이미지 처리 가능
      • DSP 기반 솔루션인 텍사스 인스트러먼츠 Texas Instuments의 TDA
      • TPGA기반 솔루션
      • ASIC 기반 솔루션

  • 컴퓨터 아키텍쳐 설계 분석
    1. 부하 workload 종류에 따라 가장 적합한 컴퓨팅 장치
    2. 극단적인 경우 자율 주행에 관련된 태스크를 수행하는 데 있어 모바일 프로세서로도 충분한지 여부
    3. 자율 주행을 위한 효율적인 컴퓨팅 플랫폼을 설계하는 방법
이 세 가지를 고려해 컴퓨팅 플랫폼을 구성해야 한다.
  • 부하 workload 종류에 따라 가장 적합한 컴퓨팅 장치
    • = convolution과 feature extration에 적합한 장치
    • CPU, GPU, DSP에서 convolution, feature extraction을 수행해보고 성능과 에너지 소비량을 비교해보겠음

      • 컨볼루션) GPU가 가장 성능이 좋고(빠름), 에너지 소비량도 적음
      • 특징 추출) DSP가 가장 성능이 좋고(빠름), 에너지 소비량도 적음
    • 로컬라이제이션, 계획, 장애물 회피같은 자율 주행 관련 태스크에 대해서는 실험하지 않았는데, 이것들은 주로 제어 연산이라 CPU가 당연히 좋을 듯
  • 모바일 프로세서 기반의 자율 주행
    • 자율주행 시스템의 한계를 알아보자. ARM모바일 SoC에서 어느 정도 성능을 보여주는지

      • 센서 데이터 처리 (특징 추출, 옵티컬 플로우) -> DSP
      • 딥러닝 (개체 인식) -> GPU
      • 로컬라이제이션 -> 2개의 CPU 스레드
        • 1 -> 실시간 경로 계획
        • 2 -> 장애물 회피
    • ARM SoC에서 그럭저럭 잘 됨
      • 로컬라이제이션 -> 25개 이미지/s
      • 딥 러닝 -> 2~3개/s
      • 계획 및 제어 -> 하나의 경로를 계획하는데 6ms 이내에 처리
      • 전체 시스템의 평균 에너지 소비량 = 11W

  • 컴퓨팅 플랫폼 설계
    • 각 태스크마다 에너지 소비량과 성능 측면에서 가장 효율적인 컴퓨팅 장치를 적용하도록 이종 컴퓨팅 자원을 최대한 활용했기 때문에 >>>좋은 성능을 낼 수 있었다.<<<

    • 컴퓨팅 플랫폼
      • I/O 서브시스템: SoC 아키텍쳐와 프론트엔드 센서 상호작용
      • DSP: 특징 추출을 위해 이미지 스트림을 전처리
      • GPU: 개체 인식과 몇 가지 딥 러닝 태스크 수행
      • CPU: 계획 및 제어와 상호작용 태스크를 수행하는 멀티코어
      • FPGA: 데이터 압축과 업로드, 개체 추적, 트래픽 예측 등을 위한 동적 재설정/ 시분할 지원










No comments:

Post a Comment

[ new blog ]

new blog https://jihyo-jeon.github.io/