이 페이지는 기계 번역되었습니다.
번역 품질에 대한 1분 설문 조사에 참여해 주세요.
마이크로컨트롤러에 초소형 신경망을 배포하는 생산적인 여정
작성자: Danilo Pau, STMicroelectronics 및 Brenda Zhuang, MathWorks
"MATLAB 및 Simulink 제품과 STMicroelectronics의 Edge AI 툴에 기반한 이 프레임워크는 팀이 딥러닝 및 에지 배포에 대한 전문 지식을 빠르게 키울 수 있도록 지원하여 tinyML에서 흔히 겪는 어려움을 극복할 수 있도록 돕습니다."
머신러닝과 딥러닝 애플리케이션은 점점 더 클라우드에서 데이터가 생산되는 곳에 가까운 임베디드 기기로 옮겨가고 있습니다. 에지 컴퓨팅 시장이 빠르게 확대되면서 확장성, 실시간 AI 애플리케이션에 대한 수요 증가, 견고하고 생산적인 소프트웨어 툴체인이 포함된 저렴한 에지 기기의 가용성 등 여러 가지 요소가 에지 AI의 성장을 촉진하고 있습니다. 또한, 보안상의 이유나 단순히 통신 비용을 최소화하기 위해 네트워크를 통한 데이터 전송을 피해야 할 필요성도 있습니다.
에지 AI는 비교적 강력한 에지 서버와 IoT 모듈을 비롯해 광범위한 기기, 센서, 마이크로컨트롤러, 칩 상의 다중 마이크로프로세서, 애플리케이션 프로세서, 전용 시스템 온 칩 등을 포함합니다. 2019년에 설립된 참조 커뮤니티 tinyML Foundation에서는 머신러닝 모델을 개발하고 이를 메모리, 처리 능력, 에너지 소비 예산이 상당히 제한적인 임베디드 기기에 배포하는 데 집중하고 있습니다. tinyML은 저렴한 배터리나 작은 태양광 패널로 구동할 수 있는 애플리케이션은 물론, 저비용 하드웨어에서 데이터를 로컬로 처리하는 대규모 애플리케이션 등 독특한 기회를 열어줍니다. 물론 tinyML도 다양한 과제를 안고 있습니다. 그런 어려움 중 하나는 머신러닝 및 임베디드 시스템 개발자가 애플리케이션의 성능과 공간을 최적화해야 하는데, 이를 위해서는 AI와 임베디드 시스템 모두에 대한 능숙함이 필요합니다.
이러한 맥락에서 이 글에서는 에지 기기에서 심층 신경망을 설계하고 배포하기 위한 실용적인 프레임워크를 설명합니다. MATLAB® 및 Simulink® 제품과 STMicroelectronics®의 Edge AI 툴에 기반한 이 프레임워크는 팀이 딥러닝과 에지 배포에 대한 전문 지식을 빠르게 키울 수 있도록 지원하여 tinyML에서 흔히 겪는 어려움을 극복할 수 있도록 돕습니다. 이를 통해 개념 증명 tinyML 애플리케이션을 신속하게 구축하고 벤치마킹할 수 있습니다. 워크플로의 첫 단계에서는 팀에서 MATLAB을 사용해 딥러닝 신경망을 구축하고 베이즈 최적화로 하이퍼파라미터를 조정하며 지식 증류를 사용하고 가지치기 및 양자화를 통해 신경망을 압축합니다. 마지막 단계에서 개발자는 통합 AI가 장착된 센서를 비롯한 STMicroelectronics 32비트(STM32, Stellar) 마이크로컨트롤러 및 마이크로프로세서에서 AI를 개발하기 위한 무료 온라인 서비스인 ST Edge AI Developer Cloud에 통합된 ST Edge AI Core Technology를 사용해 배포된 딥러닝 신경망의 리소스 사용률과 추론 속도를 벤치마킹합니다. (그림 1)
신경망 설계, 훈련 및 하이퍼파라미터 최적화
엔지니어가 딥러닝 응용 사례에 사용할 데이터셋을 수집하고 전처리하고 준비했다면 다음 단계는 후보 모델을 훈련하고 평가하는 것인데, 이런 후보 모델은 NASNet, SqueezeNet, Inception-v3 및 ResNet-101 등의 사전 훈련된 모델 또는 머신러닝 엔지니어가 심층 신경망 디자이너 앱을 사용해 대화형 방식으로 구축한 모델이 될 수 있습니다. (그림 2) 영상, 비디오, 사운드 및 라이다 포인트 클라우드 분류, 객체 검출, 자세 추정, 및 파형 분할에 대한 표본 모델을 비롯한 여러 모델에서 개발을 시작하는 데 사용할 수 있는 예제를 제공합니다.
딥러닝 신경망의 성능은 훈련을 제어하는 파라미터와 신경망 아키텍처를 설명하는 파라미터에 크게 좌우됩니다. 이러한 하이퍼파라미터의 예로는 학습률과 배치 크기 외에도 계층 수, 계층 유형, 계층 간 연결 등이 있습니다. 적절한 하이퍼파라미터 조정을 통해 tinyML 애플리케이션이 실행되는 리소스가 제한된 환경에서도 더 높은 정확도와 더 나은 성능을 달성하는 모델을 얻을 수 있습니다. 그러나 성능을 최적화하는 조합을 찾기 위해 하이퍼파라미터 값을 선택하고 미세 조정하는 것은 어렵고 시간이 많이 걸리는 작업일 수 있습니다.
베이즈 최적화는 분류 및 회귀 딥러닝 신경망의 하이퍼파라미터 최적화에 매우 적합합니다. 이는 고차원 하이퍼파라미터 공간을 효율적으로 탐색하여 최적 또는 최적에 가까운 구성을 찾기 때문입니다. MATLAB에서 머신러닝 개발자는 bayesopt
함수로 베이즈 최적화를 사용해 최적의 하이퍼파라미터 값을 찾을 수 있습니다. 예를 들어, 컨벌루션 계층 수, 초기 학습률, 모멘텀, L2 정규화와 같은 평가를 위한 하이퍼파라미터와 최소화를 위한 검증 오류와 같은 목적 함수를 제공할 수 있습니다. 이 함수는 bayesopt
의 결과를 사용해 워크플로의 다음 단계에서 추가로 살펴볼 하나 이상의 하이퍼파라미터 구성 세트를 선택합니다.
지식 증류
리소스가 제한된 임베디드 기기는 사용 가능한 메모리가 제한되어 있습니다. 지식 증류는 높은 수준의 정확도를 유지하면서 딥러닝 신경망의 사용량을 줄이는 한 가지 방법입니다. 이 기술은 더 크고 정확한 교사 신경망을 사용해 더 작은 학생 신경망에 예측을 가르치는 방식입니다. 핵심은 교사-학생 신경망 아키텍처에서 손실 함수를 선택하는 것입니다.
이전 단계에서 훈련된 신경망은 교사 모델로 사용될 수 있습니다. 학생 신경망은 교사 모델보다 작지만 비슷한 모델입니다. 일반적으로 학생 모델에는 더 적은 수의 convolution-batchnorm-ReLU 블록이 포함됩니다. 차원 감소를 감안하기 위해 학생 신경망에는 최대 풀링 계층이나 전역 평균 풀링이 추가됩니다. 이런 수정을 통해 교사 신경망에 비해 학습 가능한 파라미터의 수가 크게 줄었습니다.
학생 신경망을 훈련하려면 지식 증류 손실 함수를 정의해야 합니다. 이는 학생 신경망, 교사 신경망, 해당 목표가 포함된 입력 데이터, 온도 하이퍼파라미터의 입력을 통해 결정됩니다. 경험적으로, 손실 함수는 1) 학생 신경망 출력과 실제 레이블 간의 교차 엔트로피 손실인 하드 손실과 2) 학생 신경망 로짓과 교사 신경망의 로짓 간의 온도를 적용한 소프트맥스의 교차 엔트로피 손실인 소프트 손실의 가중 평균으로 구성됩니다.
훈련된 학생 신경망은 교사 신경망의 정확도를 더 잘 유지하고 학습 가능한 파라미터를 줄여 임베디드 기기에 배포하는 데 더 적합하게 만들었습니다.
모델 압축 및 최적화
훈련 단계에서 효율적인 설계와 하이퍼파라미터 최적화는 필수적인 첫 단계이지만, 에지 기기에서의 배포를 보장하기에 충분하지는 않습니다. 따라서 모델 가지치기 및 양자화를 통한 훈련 후 최적화는 심층 신경망의 메모리 사용량과 계산 요구사항을 더욱 줄이는 데 중요합니다.
가장 효과적인 신경망 압축 방법 중 하나는 양자화입니다. 대용량 센서는 부동소수점 표현을 출력하지 않으므로 데이터가 정수 정밀도로 수집되기 때문입니다. 양자화의 목적은 신경망의 파라미터를 저장하는 데 필요한 메모리 사용량을 줄이고 모델의 가중치와 활성화를 더 적은 비트로 표현하여 계산 속도를 높이는 것입니다. 예를 들어, 32비트 부동소수점 숫자를 8비트 정수로 바꾸는 것이 포함될 수 있습니다. 이때도 가능한 경우 예측 정확도가 약간만 저하되는 것을 허용합니다. 양자화를 사용하면 내장된 메모리를 절약적으로 사용할 수 있으며, 이는 에지의 리소스가 제한된 센서, 마이크로컨트롤러, 마이크로프로세서(그림 3)에 필수적입니다. 또한, 정수 연산은 일반적으로 하드웨어에서 부동소수점 연산보다 빠르므로 마이크로컨트롤러에서 추론 성능이 향상됩니다. 이를 통해 모델의 전력 소모가 줄어들어 모바일 폰이나 IoT 기기와 같이 배터리로 구동되거나 에너지가 제한된 기기에 배포하는 데 더욱 적합해졌습니다. 훈련 후 양자화로 인해 일부 정밀도 손실이 발생할 것으로 예상되지만 MATLAB의 양자화 툴은 모델 정확도에 미치는 영향을 최소화하도록 설계되었습니다. 미세 조정 및 교정과 같은 기술은 양자화된 모델의 성능을 유지하는 데 사용됩니다. MATLAB에서 dlquantizer
함수는 심층 신경망의 가중치, 편향, 활성화를 8비트 정수 값으로 양자화하는 과정을 단순화합니다.
반면에 가지치기 기법은 운영 중복을 최소화하여 신경망의 복잡성을 줄이는 데 초점을 맞춥니다. 이는 계산 복잡성을 획기적으로 줄이는 데 필수적입니다. 신경망의 예측에 거의 영향을 미치지 않는 연결, 가중치, 필터 또는 전체 계층을 식별하여 제거하는 것이 핵심입니다. 투영은 덜 중요한 가중치나 연결을 선택적으로 제거하여 신경망을 최적화하는 데 사용되는 MATLAB의 독점적인 기술입니다. 이 과정은 모델의 복잡성을 줄여 모델 크기를 줄이고 추론 시간을 단축하는 동시에 성능에는 큰 영향을 주지 않습니다. 일반적인 가지치기는 일반적으로 낮은 크기의 가중치를 임계값 기반으로 간단히 제거하는 작업을 수반하는 반면, 투영은 신경망의 필수적 특징이 보존되도록 보장하기 위해 더 정교한 기준과 방법을 통합할 수 있습니다. 또한, 투영은 종종 가중치 공간의 기하학적 속성을 유지하는 것을 목표로 하며, 이는 기존의 가지치기 방법에 비해 잠재적으로 더욱 효율적이고 견고한 모델을 만들어냅니다.
ST Edge AI Developer Cloud에서 벤치마킹
MATLAB에서 초기 신경망 설계, 하이퍼파라미터 최적화, 증류 및 압축을 완료한 후, 워크플로의 다음 단계는 마이크로컨트롤러나 마이크로프로세서에서 해당 설계의 성능을 평가하는 것입니다. 구체적으로 엔지니어는 신경망의 플래시 및 RAM 요구사항은 물론, 추론 속도 등의 요소도 평가해야 합니다.
ST Edge AI Developer Cloud는 ST Edge 기기에서 신경망의 신속한 벤치마킹을 가능하게 하여 워크플로의 이 단계를 간소화하도록 설계되었습니다. MATLAB에서 개발된 tinyML 애플리케이션에 이 서비스를 사용하려면 먼저 신경망을 ONNX 형식으로 내보내야 합니다. 생성된 ONNX 파일을 ST Edge AI Developer Cloud에 업로드한 후 엔지니어는 벤치마크를 실행할 ST 기기를 선택할 수 있습니다. (그림 4)
벤치마킹이 완료되면 ST Edge AI Developer Cloud는 결과를 자세히 설명하는 리포트를 제공합니다. (그림 5) ST Edge AI Developer Cloud가 제공하는 성능 분석 툴은 메모리 사용량, 처리 속도, 리소스 사용률, 모델 정확도를 포함한 다양하고 자세한 통찰력을 제공합니다. 개발자는 모델의 다양한 계층과 구성 요소에 대한 메모리 할당 내역과 함께 RAM 및 플래시 메모리 소비에 대한 정보를 받습니다. 또한, 이 툴은 각 계층의 실행 시간과 전체 추론 시간을 제공하며, 느린 작업을 식별하고 최적화하기 위한 자세한 타이밍 분석을 제공합니다. CPU 및 하드웨어 가속기 사용과 같은 리소스 사용률과 전력 소비 지표는 에너지 효율성을 최적화하는 데 도움이 됩니다.
엔지니어는 벤치마크 결과를 검토한 후 다음 단계를 위한 최선의 행동 방침을 파악할 수 있습니다. 신경망 설계가 추론 시간이 짧은 주어진 에지 기기의 제약 조건에 편안하게 들어맞는다면, 더 작은 기기를 사용하거나 다소 더 크고 복잡한 신경망으로 예측 정확도를 높일 수 있는 기회를 모색할 수도 있습니다. 반면, 신경망 설계가 너무 커서 외부 플래시나 RAM을 사용하여 추론 시간이 느려지는 경우, 팀은 더 많은 내장 플래시와 RAM을 갖춘 더욱 강력한 연산 기기를 찾거나 MATLAB 사용하여 추가적인 하이퍼파라미터 최적화, 지식 증류, 가지치기 및 양자화 반복을 수행하여 신경망을 더욱 압축할 수 있습니다. ST Edge AI Developer Cloud는 또한 ST 기기에서 AI 모델의 배포를 간소화하기 위해 자동화된 코드 생성 기능을 제공합니다. 이 기능은 훈련된 AI 모델을 STMicroelectronics의 센서, 마이크로컨트롤러, 마이크로프로세서와 호환되는 최적화된 C 코드로 변환합니다.
벤치마킹에서 배포까지
워크플로의 마지막 단계는 센서, 마이크로컨트롤러 또는 마이크로프로세서에 배포하는 것입니다. 벤치마킹 결과를 바탕으로 엔지니어는 실제 하드웨어에서 tinyML 애플리케이션을 평가하는 STM32 Discovery Kit와 같은 플랫폼 선택에 있어 정보에 입각한 결정을 내릴 수 있습니다.
애플리케이션에 따라서는 배포 전에 심층 신경망을 제어기 등의 다른 구성 요소와 통합하고 이를 더 큰 시스템에 통합해야 할 수도 있습니다. 이러한 활용 사례에서 그들은 워크플로를 더 확장해 Simulink에서 다른 컴포넌트를 모델링하고 시스템 수준 시뮬레이션을 실행하여 설계를 검증하며 Embedded Coder® 및 STM32에 대한 Embedded Coder 지원을 사용하여 STM32 기기에 배포할 C/C++ 코드를 생성할 수 있습니다.
2024년 기고