AWS Graviton 프로세서를 사용하여 Raspberry Pi용 복잡한 기계 학습 애플리케이션 준비

8426 단어 aws
에서 Graviton-based EC2 instances이 임베디드 Linux 소프트웨어 개발에서 어떤 역할을 하는지 설명했습니다. 머신 러닝은 이러한 영향이 발생하는 영역 중 하나입니다. 기계 학습 프레임워크는 일반적으로 많은 기본 라이브러리에 종속된 C++ 프로젝트입니다. 이로 인해 Arm 기반 에지 컴퓨팅에서 사용자 지정, 구축 및 배포하기가 어렵습니다.

임베디드 Linux 보드에서 기계 학습 프레임워크 및 라이브러리를 얻는 방법에 대한 많은 기사가 있습니다. 저자는 크로스 컴파일, qemu를 사용한 명령 번역 또는 Raspberry Pi와 같은 보드에서 기본 빌드를 무차별 대입하는 등의 작업을 시도합니다. 오늘은 더 쉽고 시간을 절약할 수 있는 다른 방법으로 이 작업을 수행하는 방법에 대한 예가 있습니다.

MxNet 딥 러닝을 위한 유연하고 효율적인 라이브러리입니다. Raspberry Pi 3B 또는 4용으로 빌드하기 어려운 것으로 알려져 있습니다. 문제는 주로 필요한 대용량 메모리 때문입니다. Docker를 사용하여 컨테이너 이미지를 준비하는 것은 옵션입니다. 사전 빌드된 Python 휠 파일도 찾을 수 있지만 커뮤니티 구성원이 제공하는 경우 빨리 만료됩니다.

아래 프로세스는 AWS Graviton 기반 EC2 인스턴스를 사용하여 Raspberry Pi OS SD 카드를 준비하는 방법을 보여줍니다. 이미지에는 MxNet이 포함되어 있으며 Docker를 사용하거나 교차 컴파일하거나 Pi에서 기본 빌드를 기다리는 시간 없이 SD 카드에 쓸 준비가 되어 있습니다.

시작하자.

먼저 새 EC2 인스턴스를 생성합니다. 인스턴스는 A1, T4g, M6g, C6g 또는 R6g를 포함하여 Graviton 프로세서로 구동되는 모든 인스턴스 유형이 될 수 있습니다. AWS 계정을 생성하고 AWS 콘솔을 사용하여 새 EC2 인스턴스를 구성 및 시작하는 방법에 대한 많은 AWS 자습서가 있습니다.

이 예에서는 Ubuntu 18.04를 실행하는 t4g.2xlarge 인스턴스를 만들었습니다. 이렇게 하면 8개의 vCPU와 16Gb의 메모리를 사용할 수 있습니다.

ssh와 인스턴스에 할당된 키 파일을 사용하여 새 인스턴스에 연결합니다.

$ ssh -i key.pem ubuntu@<ec2-ip-address>

이제 EC2 인스턴스에서 최신 Raspberry Pi OS 이미지를 가져와 압축을 풉니다.

$ wget http://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2020-08-24/2020-08-20-raspios-buster-arm64-lite.zip
$ sudo apt install unzip
$ unzip 2020-08-20-raspios-buster-arm64-lite.zip

Raspberry Pi OS 이미지의 크기를 늘리고 탑재하고 chroot를 사용하여 MxNet 빌드를 준비합니다. 현재 시스템에서 사용하지 않는 루프 장치를 사용하십시오. 여기서는 숫자 10을 사용하지만 10이 이미 사용 중인 경우 더 높은 숫자를 선택합니다.

$ sudo losetup -P /dev/loop10 2020-08-20-raspios-buster-arm64-lite.img
$ sudo fallocate -l 8000M 2020-08-20-raspios-buster-arm64-lite.img
$ sudo losetup -c /dev/loop10
$ sudo parted /dev/loop10
GNU Parted 3.3
Using /dev/loop10
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print free                                                       
Model: Loopback device (loopback)
Disk /dev/loop10: 8389MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
        16.4kB  4194kB  4178kB           Free Space
 1      4194kB  273MB   268MB   primary  fat32        lba
 2      273MB   2001MB  1728MB  primary  ext4
        2001MB  8389MB  6388MB           Free Space

(parted) resizepart 2                                                     
End?  [2001MB]? 8389MB                                                    
(parted) q                                                                
Information: You may need to update /etc/fstab.

$ sudo e2fsck -f /dev/loop10p2
$ sudo resize2fs  /dev/loop10p2
$ sudo mount /dev/loop10p2 /mnt
$ sudo mount /dev/loop10p1 /mnt/boot
$ cd /mnt
$ sudo mount -t proc /proc proc/
$ sudo mount --rbind /sys sys/
$ sudo mount --rbind /dev dev/
$ sudo chroot /mnt /bin/bash

MxNet 빌드에 필요한 소프트웨어를 설치합니다.

# apt update
# apt upgrade -y
# apt-get -y install git cmake ninja-build liblapack* libblas* libopencv* libopenblas* python3-dev python3-pip python-dev virtualenv
# pip3 install Cython

사용자 파이로 변경하고 MxNet을 빌드합니다.

$ su pi
$ cd $HOME
$ git clone https://github.com/apache/incubator-mxnet.git --recursive
$ cd incubator-mxnet
$ mkdir build
$ cd build
$ cmake \
-DUSE_SSE=OFF \
-DUSE_CUDA=OFF \
-DUSE_OPENCV=ON \
-DUSE_OPENMP=ON \
-DUSE_MKL_IF_AVAILABLE=OFF \
-DUSE_SIGNAL_HANDLER=ON \
-DBUILD_CYTHON_MODULES=ON \
-DCMAKE_BUILD_TYPE=Release \
-GNinja ..
$ ninja -j16
$ cd ../python
$ sudo pip3 install -e . 

MxNet을 구축하는 데 EC2 인스턴스에서 20분 미만이 소요됩니다. 더 큰 인스턴스의 경우에는 훨씬 적습니다.

위의 단계를 사용하여 Raspberry Pi 4의 기본 빌드를 수행할 수 있습니다. 작업 수를 너무 높게 설정하면 메모리 부족 오류가 발생합니다. -j4를 시도했지만 8Gb RAM이 있는 Raspberry Pi 4에서 빌드가 실패했습니다. -j1으로 ninja를 실행하고 빌드가 완료되었지만 6 1/2 시간이 걸렸습니다.

Python으로 결과를 테스트합니다.

$ python3
Python 3.7.3 (default, Jul 25 2020, 13:03:44) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mxnet
>>> mxnet.__version__
'2.0.0'
>>> quit()

Raspberry Pi 보드로 이동하려면 .img를 다운로드하고 dd 또는 Raspberry Pi 이미저를 사용하여 SD 카드에 쓴 다음 Raspberry Pi의 전원을 켜면 됩니다. 첫 번째 부팅은 SD 카드의 크기에 따라 파일 시스템의 크기를 조정합니다. 사용자 이름으로 pi로 로그인하면 MxNet을 즉시 사용할 수 있습니다.

결론



AWS Graviton 프로세서는 Linux on Arm을 사용하여 고성능 IoT 애플리케이션 및 기타 임베디드 프로젝트를 대상으로 하는 프로젝트를 위한 개발 환경을 보강합니다. Graviton 프로세서를 사용하면 소프트웨어를 더 쉽고 빠르게 개발, 구축 및 테스트할 수 있습니다.

좋은 웹페이지 즐겨찾기