실습을 진행할 튜토리얼은 "Running ResNet18 CNN Through Vitis AI 3.5 Flow for ML" 입니다. 이 튜토리얼에서는 ImageNet 데이터를 학습한 ResNet18 모델을 이용하여 FPGA 보드에서 추론을 실행해보는 실습을 진행합니다.
① Run Model Inspector (optional)
- DPU 아키텍처와 호환되는지 확인
② Run Model Quantizer
- Model Quantizer를 이용하여 FP32 모델로부터 INT8 모델을 생성
③ Run Inference with INT8 (optional)
- INT8 모델의 예측 정확도 확인
④ Run Model Compiler
- 컴파일을 진행하여 DPU에서 실행가능한
.xmodel
파일을 생성
⑤ Compile the Application
- VART(Vitis AI RunTime) API를 이용하여 DPU와 연결된 ARM 프로세서에서 실행되는 애플리케이션 컴파일
Vitis AI를 실행하기 위해 GitHub 레포지토리 내용을 복제합니다. 저는 home directory에 복제하였습니다.
# Vitis AI repository 복제
~$ git clone https://github.com/Xilinx/Vitis-AI.git
# workin directory로 이동
~$ cd Vitis-AI
여기서 복제한 디렉토리에 추가적으로 Vitis AI Tutorials 저장소에 있는 RESNET18 디렉토리를 tutorials 디렉토리 안에 추가합니다.
# 튜토리얼 저장소 복제
~/Vitis-AI$ git clone -b 3.5 https://github.com/Xilinx/Vitis-AI-Tutorials.git
# 필요한 디렉토리 가져오기
~/Vitis-AI$ mv ./Vitis-AI-Tutorials/Tutorials/RESNET18/ ./tutorials/
# 나머지는 삭제
rm -rf ./Vitis-AI-Tutorials/
필요한 디렉토리 내용을 다 가져오면 working directory는 다음과 같이 형성됩니다. 실습에서 ${WRK_DIR}
이라 하는 디렉토리는 ~/Vitis-AI/
를 의미합니다.
~/Vitis-AI$
.
├── bck
├── board_setup
│ ├── v70
│ └── vek280
├── demos
├── docker
│ ├── common
│ ├── conda
│ └── dockerfiles
├── docs
│ ├── docs
│ ├── _downloads
│ ├── doxygen
│ ├── _images
│ ├── _sources
│ └── _static
├── docsrc
│ ├── build
│ └── source
├── dpu
├── examples
│ ├── custom_operator
│ ├── ofa
│ ├── OnBoard
│ ├── vai_library
│ ├── vai_optimizer
│ ├── vai_profiler
│ ├── vai_quantizer
│ ├── vai_runtime
│ ├── waa
│ └── wego
├── model_zoo
│ ├── images
│ └── model-list
├── src
│ ├── AKS
│ ├── vai_library
│ ├── vai_optimizer
│ ├── vai_petalinux_recipes
│ ├── vai_quantizer
│ └── vai_runtime
├── third_party
│ ├── tflite
│ └── tvm
└── tutorials
└── RESNET18
Docker는 컨테이너 기반의 가상화 기술을 제공하는 플랫폼으로, 애플리케이션을 효율적으로 개발, 배포, 실행할 수 있도록 도와줍니다. Docker image를 통해 애플리케이션과 모든 종속성을 패키징하고, 컨테이너를 통해 격리된 환경에서 실행할 수 있습니다.
Docker는 다음 명령어를 차례대로 입력하여 설치를 진행합니다.
# 0. apt-get 업그레이드 (필요시)
sudo apt-get upgrade
# 1. 필요 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# 2. Docker의 공식 GPG키를 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 3. Docker의 공식 apt 저장소를 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 4. Docker 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io
cd docker # in ${WRK_DIR}
sudo ./docker_build.sh -t gpu -f tf2
실행 화면
빌드가 끝난 이후에 docker images
라고 입력하면 다음과 같이 docker image 리스트를 확인할 수 있습니다.
${WRK_DIR}
로 이동하여 다음과 같이 명령어를 입력하면 Docker Image를 실행하여 격리된 환경에서 작업을 수행할 수 있습니다.
cd ${WRK_DIR} # you are now in Vitis_AI subfolder
sudo ./docker_run.sh xilinx/vitis-ai-tensorflow2-gpu:3.5.0.001-810814926
conda activate vitis-ai-tensorflow2
저는 실행하려고 하니 다음과 같이 에러가 표시되어 nvidia-container-toolkit을 추가하여 문제를 해결하였습니다.
docker: Error response from daemon: could not select device driver "" with capabilities: \[\[gpu]].
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
작업을 진행한 뒤 새롭게 추가한 패키지 등에 대해서 저장하기 위해서는 새로운 터미널을 실행하여 다음과 같이 명령어를 입력하면 저장됩니다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xilinx/vitis-ai-tensorflow2-gpu 3.5.0.001-b56bcce50 3c5d174a1807 11 days ago 14.4GB
xiinx/vitis-ai-gpu-tf2-base latest 90d22054e565 3 weeks ago 6.43GB
$ sudo docker ps -l
[sudo] password for danieleb:
CONTAINER ID IMAGE COMMAND CREATED
d9f942cdf7de xilinx/vitis-ai-tensorflow2-gpu:3.5.0.001-b56bcce50 "/opt/nvidia/nvidia_…" 43 minutes ago
$ sudo docker commit -m"latest" d9f942cdf7de xilinx/vitis-ai-tensorflow2-gpu:latest
sha256:d7af2c3ac4fb131054f9e326015d3572ceea1ec074caea0d50274ecfd76a3688
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xilinx/vitis-ai-tensorflow2-gpu latest d7af2c3ac4fb 47 seconds ago 22.3GB
xilinx/vitis-ai-tensorflow2-gpu 3.5.0.001-b56bcce50 3c5d174a1807 11 days ago 14.4GB
xiinx/vitis-ai-gpu-tf2-base latest
References
1. https://github.com/Xilinx/Vitis-AI-Tutorials/tree/3.5/Tutorials/RESNET18
2. https://docs.docker.com/get-started/overview/