명령 줄 도구 빠르게 시작하기

FuriosaAI SDK는 모델 컴파일 및 최적화, 모델 양자화를 돕는 다양한 명령 줄 도구(command line tools)를 제공한다.

일부 명령 줄 도구가 FuriosaAI의 웹서비스를 기반으로 동작하기 때문에 모든 기능을 사용하려면 API 키를 설정해야 한다. 아직 키 설정을 하지 않았다면 API 키 설정 를 참고한다.

설치

만약 Python 실행 환경이 준비되어 있지 않다면 Python SDK 실행 환경 구성 를 참고한다.

명령 줄 도구 설치

$ pip install furiosa-sdk[cli, validator]

설치 확인

$ furiosa version
Server version: 0.2.0 (rev: a4bbbb1b4 built_at: 2021-03-15T21:20:59Z)
Client version: 0.1.0

명령어 소개

툴체인 버전 확인

toolchain 명령은 툴체인과 관련된 부가 기능을 제공한다. 현재는 제공되는 툴체인들의 버전 출력 기능을 제공한다.

$ furiosa toolchain list

Available Toolchains:
[0] 0.1.0 (rev: 952707e5f built_at: 2020-12-15 23:38:22)

모델 컴파일

compile 명령은 TFLite, ONNX 형식의 모델을 컴파일하여 FuriosaAI NPU를 사용하는 프로그램을 생성한다.

$ furiosa compile \
  test_data/MNISTnet_uint8_quant_without_softmax.tflite

output.enf has been generated (elapsed: 513.661 ms)

-o 옵션은 생성하는 프로그램 바이너리가 저장될 위치를 지정한다.

$ furiosa compile \
  MNISTnet_uint8_quant_without_softmax.tflite \
  -o /tmp/mnist.enf

mnist.enf has been generated (elapsed: 513.661 ms)

--conf 옵션을 사용하면 다양한 컴파일러 옵션을 지정할 때 yaml 파일을 사용할 수 있다.

$ furiosa compile \
  test_data/MNISTnet_uint8_quant_without_softmax.tflite \
  --config test_data/compiler_config.yml

outout.enf has been generated (elapsed: 513.661 ms)

모델 적합 여부 검사

validate 명령은 TFLite, ONNX 형식의 모델을 인자로 받아, 자동으로 양자화한 후 최종 바이너리까지 컴파일을 시도한다. validate 에 성공하면 FuriosaAI NPU에서 실행 가능한 모델이다.

$ furiosa validate yolov4.onxx

Passed!
$ furiosa validate efficientnet-lite4-11.onnx

Failed. The result has been written to validation.txt

$ cat validation.txt

  Stdout:
  [Step 1] Checking if the model can be transformed into a quantized model ...
  Stderr:
  /root/miniconda3/envs/furiosa/lib/python3.8/site-packages/onnx/__init__.py:97: RuntimeWarning: Unexpected end-group tag: Not all data was converted
      decoded = cast(Optional[int], proto.ParseFromString(s))
  [Step 1] Failed

컴파일 분석 및 최적화 도구

컴파일을 할 때 추가 옵션을 주거나 별도의 명령어를 사용하면, 컴파일된 모델의 NPU 활용 정도와 모델 컴파일 과정에 대한 정보를 제공하는 리포트를 생성할 수 있다.

compile 명령어에 --mem-allow-report 옵션을 주는 경우 메모리 할당에 대한 리포트를 HTML 형식으로 출력할 수 있다.

$ furiosa compile \
  MNISTnet_uint8_quant_without_softmax.tflite \
  -o /tmp/mnist.enf \
  --mem-alloc-report ./mem-report.html

아래 그림은 메모리 할당 리포트 출력 예제이다.

메모리 할당 리포트

perfeye 명령어는 컴파일된 모델의 NPU 활용도를 연산자 단위로 예상하여 출력한다.

$ furiosa perfeye \
  MNISTnet_uint8_quant_without_softmax.tflite \
  -o output.html

output.html has been generated (elapsed: 510.783 ms)

아래 그림은 perfeye 리포트의 예제이다.

Perfeye 리포트