[12/20] 박상수, Self-Adaptive Reconfigurable Arrays (SARA): Using ML to Assist Scaling GEMM Acceleratio #38
Unanswered
ConstantPark
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Q: 혹시 모바일 디바이스에 모델을 올려서 GPU 등의 하드웨어 가속을 활용해보신 경험이 있으신지 여쭤보고 싶습니다.
A: 학위를 위한 연구보다 CPU/GPU 등의 하드웨어를 사용하여 모델을 가속하는 일이 대학원 생활에서 더 많았던것 같습니다. 가장 기억에 많이 남는 일중 하나로, 빨간색 회사(?)의 가전제품에서 사용하기 위한 딥러닝 프레임워크를 설계하는 일을 3년 정도 진행했습니다. 갤럭시 S1 정도의 프로세서에서 동작하도록 하는 것이 목표 (제한적인 컴퓨팅 성능)라서 C언어로 동작 (학습/추론)하는 딥러닝 프레임워크를 만들고 Transfer Learning, Online/Offline RL이 온디바이스에서 가능하도록 설계하였습니다. 가전제품에 들어가는 오래된 프로세서는 단가 때문에 GPU나 NPU를 사용하는 것이 어렵고, SIMD (NEON 벡터 연산 장치)를 사용하여 모델의 가속을 하드웨어의 성능을 모두 끌어쓰는 수준으로 만들기 위해 밤샘도 많았는데, 이야기 거리가 많을 것 같다는 생각이 듭니다. 오프라인 세미나에서 기화가 되면 이야기 나누면 좋을 것 같습니다. GPU는 Jetson Tx2에서 Kaldi 모델 (ASR)의 추론을 최적화 하기 위한 일을 진행했습니다.
Q: 현재 모바일 기기에 GPU뿐만 아니라 NPU도 같이 탑재되어 나오고 있는 것으로 아는데, 모바일 기기의 NPU를 활용하여 모바일 기기에서 모델을 가속할 수 있는 방법이 있는지 궁금합니다.
A: NPU가 많은 주목을 받고 있지만, 아직까지는 사용이 불편합니다. 대부분의 NPU는 MLIR/ONNX를 사용하여 잘 만들어진 모델을 NPU에서 가속할 수 있도록 합니다. 아이폰의 경우는 잘 만들어진 모델을 CoreML을 통해 아이폰에서 가속할 수 있고, 안드로이드는 NNAPI와 같은 딥러닝 모델을 돌리기 위한 API가 포함되어 있습니다. 스냅드래곤/엑시노스의 경우는 NNAPI에 NPU가 대응되고 있습니다.
Q: 혹시 이번 DAC 22에 SARA 외에 accelerator 관련 페이퍼 중 추천해주실만한 페이퍼가 있을까요.
A: DAC 보다는 MICRO/ASLPLOS/ISCA에서 발표된 논문이 더 좋아서 다른 논문을 추천하여 드립니다. 일단 저는 아래의 사이트에 있는 논문을 중심으로 보고 있습니다 (https://github.com/fengbintu/Neural-Networks-on-Silicon/blob/master/README.md#2017-fpga). 실제 NPU를 End-to-End 수준으로 개발하는 Cambricon 회사에서 최근에 발표한 “Cambricon-P: A Bitflow Architecture for Arbitrary Precision Computing” 페이퍼를 추천드립니다.
Q: 제가 대략 이해하기로는 발표주신 것에서 하드웨어 설계를 리컨피규러블 하게 엮은 부분이 컨트리뷰션 처럼 느껴지기도 하는대요. 이렇게 이해한게 맞을까요? 맞다면은 이 부분에 대해서 좀 더 설명이 가능하실까요? 이렇게 하는 것이 기존 하드웨어 설계와는 어떤 다른 효과를 가져올 수 있을까요.
A: Mux를 사용하여 Reconfigurable하게 한 것도 컨트리뷰션 중 하나 입니다. 하지만 아이디어 자체가 Novelity가 떨어지는 부분이 있어서 발표에서는 간단하게 말씀드렸습니다. 연산 장치 (Processing Element, PE)에 전달되는 데이터의 패스를 Mux를 통해 변경하는 것은 PE가 DNN Workload에 따라서 유리한 성능을 얻을 수 있는 데이터를 전달 받을 수 있도록 합니다. 이는 연산에 참여하는 PE의 갯수가 더 많아지도록 하는데 장점이 있습니다 (발표자료 12페이지 내용). 칩에 많은 PE를 넣고 잘 사용하지 못한다면 효율이 떨어지는 것과 연관이 있다고 생각하시면 될 것 같습니다.
Q: GEMM을 위한 PE들을 구성 할 때 Systolic array 방식이랑 Reduction tree 형태를 소개해 주셨는데, 각각 어떤 형태의 Workload일 때 강점이 있는지 궁금합니다.
A: Workload에 따른 강점보다는 다양한 모델의 가속 여부와 관련되어 생각하는 것이 좋을 것 같습니다. Reduction tree 구조로 PE를 설계한다면 PE에서 연산을 수행할 수 있는 형태가 정해집니다. 3개의 Activation/Weight를 입력으로 하여 연산하는 Reduction tree가 하드웨어로 구현되었는데, 4개의 Activation/Weight 데이터가 들어온다면 생각해야 하는 문제가 많아집니다. 이러한 경우에는 Systolic array 방식 (1개의 Activation/Weight) 방식으로 3번/4번 연산하는 것이 구현 관점에서 현실적인 접근 방법이 될 수도 있습니다. 보통 Reduction tree가 사용되는 구조는 가속하는 모델이 한가지 종류로 정의되었을 때 사용되며, Systolic array는 좀더 많은 모델을 가속의 대상으로 하는 경우에 사용됩니다. 하드웨어 구현 비용에서는 보통은 Systolic array가 Reduction tree보다 조금 높은 편입니다. 자세한 내용은 아래의 논문을 참조하시면 좋을 것 같습니다.(Sparsity-Aware and Re-configurable NPU Architecture for Samsung Flagship Mobile SoC)
Q: Output stationary의 경우 Partial sum들을 인접한 PE들과 공유하면서 연산상의 이득을 취할 수 있을것으로 생각되는데 구체적인 예가 잘 그려지지 않는데 conv kernel이 resue되니 weight stationary가 좋은 것처럼 하나의 예로 설명이 가능할지 문의드립니다. input stationary는 어떤 workload일떄 강점이 있는지도 궁금합니다.
A: 우선 어떤 Stationary가 가장 좋은 지를 판단하는 것은 Bandwidth 관점 (SRAM to DRAM) 에서 어떤 데이터가 가장 높은 비율을 차지하지는 지에 따라서 결정됩니다. CNN에 Weight stationary가 좋은 것은 컨볼루션 커널이 전체 대역폭에서 차지하는 비중이 높기 때문에, 컨볼루션 커널을 PE 내부에 저장하는 방법이 성능 향상과 연결되기 때문입니다. Output stationary (OS)는 Output라는 것이 한번에 계산이 되는 것이 아니라 많은 부분합 (Partial sum)이 합쳐서서 계산이 됩니다. 이때 부분합의 갯수가 많다면 SRAM에 저장을 다 하지 못하여 DRAM으로 내리는 경우가 발생합나다. 이러한 경우에 OS가 좋다고 이야기 드릴수 있을 것 같습니다. 구체적인 예시 보다는 “대역폭 관점에서 어떤 데이터가 차지하지는 비중이 높은가”와 연관하여 생각하시면 좋을 것 같습니다. (https://cpb-us-w2.wpmucdn.com/sites.gatech.edu/dist/c/332/files/2019/02/2_NNDataflowAnalysis.pdf, 9~10 페이지를 참조하시면 좋을 것 같습니다.)
Beta Was this translation helpful? Give feedback.
All reactions