+
+ +
+

Release Notes - 0.10.0

+

Furiosa SDK 0.10.0은 메이저 릴리스(Major Release)로 멀티 디바이스를 지원하는 차세대 런타임 엔진, +추론 시간을 크게 줄일 수 있는 최적화 옵션, NPU의 사용량과 연산, +IO 비중을 OpenTelemetry를 통해 제공하는 기능 개선 등을 포함한다. +또한 furiosa-litmus는 리포팅을 위한 정보 수집 기능을 포함하도록 개선 되었으며, +furiosa-compiler 명령행 도구의 파이썬 의존성 제거, 벤치마크 커맨드 도구 추가 등의 기능 개선이 이루어졌다. +그 외에도 다수의 기능 추가, 버그 수정, 성능 개선 등을 포함한다.

+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
컴포넌트 버전 정보

패키지 이름

버전

NPU Driver

1.9.2

NPU Firmware Tools

1.5.1

NPU Firmware Image

1.7.3

HAL (Hardware Abstraction Layer)

0.11.0

Furiosa Compiler

0.10.0

Furiosa Quantizer

0.10.0

Furiosa Runtime

0.10.0

Python SDK (furiosa-server, furiosa-serving, ..)

0.10.0

NPU Toolkit (furiosactl)

0.11.0

NPU Device Plugin

0.10.1

NPU Feature Discovery

0.2.0

+
+

설치 또는 업그레이드 방법

+

APT 저장소를 사용하고 있다면 다음과 같이 업그레이드할 수 있다.

+
apt-get update && apt-get upgrade
+
+
+

특정 패키지 지정해서 업그레이드 하고 싶다면 다음과 같이 실행 한다. +APT 저장소 설정 및 설치 방법에 대한 자세한 설명은 드라이버, 펌웨어, 런타임 설치 가이드 에서 찾을 수 있다.

+
apt-get update && \
+apt-get install -y furiosa-driver-warboy furiosa-libnux
+
+
+

펌웨어 업그레이드는 다음과 같이 실행한다.

+
apt-get update && \
+apt-get install -y furiosa-firmware-tools furiosa-firmware-image
+
+
+

파이썬 패키지 업그레이드는 다음과 같이 실행한다. 새로 추가된 기능들을 사용하기 위해서는 패키지 설치와 관련된 도구들이 최신 버전으로 먼저 업데이트 되어야 한다. +파이썬 패키지 설치와 환경 설정에 대한 자세한 설명은 Python SDK 설치 및 사용 가이드 에서 찾을 수 있다.

+
pip install --upgrade pip setuptools wheel
+pip install --upgrade furiosa-sdk
+
+
+
+

경고

+

pip를 업그레이드 할 때 아래 오류를 접한다면, pip install --upgrade pip 커맨드를 통해 pip를 먼저 업그레이드 해야 한다.

+
ERROR: Could not find a version that satisfies the requirement furiosa-quantizer-impl==0.10.* (from furiosa-quantizer==0.10.*->furiosa-sdk) (from versions: none)
+ERROR: No matching distribution found for furiosa-quantizer-impl==0.10.* (from furiosa-quantizer==0.10.*->furiosa-sdk)
+
+
+
+
+
+

주요 변경 사항

+
+

차세대 런타임 엔진(FuriosaRT) 도입 및 런타임 개선

+

0.10.0 릴리즈는 차세대 런타임 Furiosa Runtime (FuriosaRT)를 포함한다. FuriosaRT는 완전하게 +새로 설계된 런타임 라이브러리로 다양한 워크로드에서 고성능으로 동작하도록 설계 되었다. +FuriosaRT는 NPU를 이용해 고성능 추론을 제공하는 핵심 라이브러리로 Python API를 제공하고 furiosa-bench, +furiosa-litmus와 같은 명령행 도구, 그리고 서빙 프레임워크 등에서 사용된다. FuriosaRT는 기존 런타임과 +거의 호환될 뿐 아니라 다음과 같은 새로운 기능을 포함한다.

+

새 API 도입

+

FuriosaRT는 파이썬 asyncio 를 +사용한 비동기(async) API를 새로이 지원한다. 기존의 동기 API는 배치 작업에는 충분하였으나 +개별적 요청에 따라 추론을 해야 서빙 시나리오에서는 부족함이 있었다. 새로운 런타임에서는 비동기 API가 +기본적으로 지원되며, 기존 기능을 유지하면서도 더 간결하게 사용할 수 있도록 많은 부분이 다듬어졌다. +새 API에 대한 상세한 설명은 Furiosa SDK API Reference - furiosa.runtime +에서 찾아 볼 수 있다.

+

다수의 NPU 지원 장치 설정 방법 개선

+

FuriosaRT에서는 하나의 세션에서 다수의 장치를 지원한다. 따라서 별도 구현 없이도 다수의 장치를 이용하여 고성능 추론을 수행할 수 있다. +또한, 개선된 장치 지정 방법을 제공한다. 기존에는 환경변수 +NPU_DEVNAME 또는 session.create(.., device=”..”) 와 같은 API를 이용해서 devfs 의 +장치파일 이름을 직접 설정해야 했다. 이 방법은 다양한 환경에서 그대로 적용하기 어렵고 많은 장치를 사용해야 하는 경우 +설정이 복잡했다.

+

이번 릴리스 부터 devfs 이름을 연상 시키는 환경 변수 NPU_DEVNAME 대신 +FURIOSA_DEVICES 라는 새로운 환경변수가 도입되었다. 또한 이 환경 변수는 +NPU 종류, 구성, 개수를 표현하는 텍스트 설정을 받아드린다.

+
export FURIOSA_DEVICES="warboy(2)*8"
+
+
+

위 설정은 FuriosaRT가 시스템에서 가용한 2-PE 퓨전된 8개의 Warboy를 찾아 사용하게 한다. +또한 특정 장치의 식별자를 지정하는 방법도 제공하며 사용 예는 다음과 같다.

+
export FURIOSA_DEVICES="npu:0:0-1,npu:1:0-1"
+
+
+

하위 호환성 보장을 위해 NPU_DEVNAME 환경 변수도 여전히 사용 가능하며 +npu0pe0-1 과 기존 설정 방법도 여전히 사용 가능하다. 다만 향후 릴리즈에서 NPU_DEVNAME 환경변수는 +제거될 예정이다.

+

자세한 장치 설정 방법은 Furiosa SDK API Reference - Device Specification 에서 찾아볼 수 있다.

+
+
+

서빙 프레임워크 및 모델 서버

+

furiosa-server, furioa-serving 은 각각 모델의 서빙을 제공하는 프레임워크와 +서빙 어플리케이션을 개발하기 위한 라이브러리이다. 이번 릴리즈에서는 차세대 런타임인 FuriosaRT를 +사용하도록 개선되었으며 FuriosaRT가 제공하는 장점을 활용할 수 있도록 개선되었다.

+
+
+

모델 양자화 도구(quantization tool) 개선

+

furiosa-quantizer 는 이미 트레이닝 된 모델을 양자화된 모델로 변환해주는 라이브러리이다.

+
+
+

컴파일러 개선

+

0.10.0의 컴파일러는 Dequantize 연산자의 NPU 가속을 지원한다. 따라서 Dequantize 연산을 잘 활용할 수 있는 +모델의 경우 성능 개선이 된다. Dequantize 연산자 가속과 관련된 다른 최적화 관련 옵션은 최적화 가이드에서 찾아볼 수 있다.

+

또한, 컴파일러 결과의 캐시 기능이 충분히 안정화 되었다고 판단되어 결과 캐쉬 유효기간이 기존 2일에서 30일로 변경된다. +컴파일러 캐쉬 (Compiler Cache) 에서 자세한 설명을 찾아볼 수 있다.

+

그 외에도 컴파일러 명령행 도구는 다음 사항이 개선되었다.

+
    +
  • furiosa compile 대신 furiosa-compiler 커맨드를 직접 사용하실 수 있다.

  • +
  • furiosa-compiler 커맨드는 Python 의존성을 필요하지 않는다.

  • +
  • apt install furiosa-compiler 명령을 통해 컴파일러를 설치할 수 있다.

  • +
  • Python 의존성을 가지는 기존 furiosa compile 커맨드는 현재는 호환성을 위해 유지되며 향후 릴리즈에서 제거 될 수 있다.

  • +
+
+
+

성능 프로파일러(Profiler) 개선

+

성능 프로파일러는 추론의 실제 실행시간을 구간별로 측정하여 성능 분석을 돕는 도구로 +이번 릴리스에서는 프로파일러 컨텍스트를 이용한 트레이스 기능에 임시 중단/재개 기능이 추가 되었다.

+

사용자는 프로파일링 컨텍스트 내에서 전/후처리 시간, 워밍업(warming up) 시간 등 프로파일링을 원하지 않는 구간을 +을 제외하고 프로파일링 함으로써 프로파일링에 소요되는 오버헤드 및 프로파일링 결과물의 크기를 줄일 수 있다. +간단히 profile.pause()profile.resume() 함수를 호출하여 프로파일링을 임시로 중단/재개할 수 있으며 +자세한 사용법과 예제는 프로파일러 컨텍스트의 일시적 중단/재개 에서 찾아볼 수 있다.

+
+
+

furiosa-litmus 개선

+

furiosa-litmus 는 모델에 대한 NPU와 Furiosa SDK의 호환성을 검사하는 도구이다. +0.10.0 릴리스에서는 furiosa-litmus 에러 리포팅을 위한 정보 수집 기능이 추가하였다. +또한 검사하는 단계가 3단계에서 4단계로 확장되었으며 4단계는 모델을 실제 런타임에서 모델을 실행해 보는 단계이다.

+

다음과 같이 --dump <OUTPUT_SUFFIX> 옵션을 사용하여 furiosa-litmus``가 수집한 + 단계별 로그와 새로 추가된 4단계에서 실행한 추론 실행의 프로파일링 결과를 ``<OUTPUT_SUFFIX>-<unix_epoch>.zip +파일로 저장할 수 있다.

+
$ furiosa-litmus <MODEL_PATH> --dump <OUTPUT_SUFFIX>
+
+
+

수집된 정보에는 모델 자체를 포함하지 않으며 모델 네트워크를 그래프로 표현한 정보, 메모리 사용량, +환경 정보 (파이썬 버전, SDK, 컴파일러의 버전 및 주요 의존 라이브러리 버전) 등을 포함한다. +unzip 명령을 통해 직접 압축을 풀어 내용을 확인할 수 있으며 버그 리포팅시 해당 파일을 첨부하면 +버그 리포팅에 도움이 된다.

+
+
+

furiosa-bench 명령행 도구 추가

+

furiosa-bench 명령행 도구 새로 추가되었다. +기존에는 벤치마크를 위해 사용자가 직접 프로그램을 작성해야 했다면, 새로 도입되는 furiosa-bench 커맨드는 다양한 +워크로드와 런타임 설정을 간단하게 제어할 수 있는 옵션을 제공한다. 지연 시간과 처리량 위주 워크로드를 선택 가능하며 +얼마나 많은 장치를 사용하는지, 얼마나 오래 수행할지 등을 옵션으로 설정할 수 있다. ONNX와 Tflite 모델을 +사용할 수 있으며 이미 컴파일러를 통해 컴파일된 ENF 포맷의 모델도 입력으로 받아 들인다. +커맨드의 자세한 설명은 furiosa-bench (벤치마크 도구) 에서 찾아볼 수 있다.

+

사용 예시

+
$ furiosa-bench ./model.onnx --workload throughput -n 10000 --devices "warboy(1)*2"
+
+
+

설치는 다음과 같이 APT 패키지 매니저를 통해 설치할 수 있다.

+
$ apt install furiosa-bench
+
+
+
+
+

furiosa-toolkit 개선

+

furiosa-toolkit은 NPU 관리 및 상태 모니터링 기능을 제공하는 명령행 도구의 집합이다. +이번 릴리스에 포함된 도구들은 다음 주요 개선 내용을 포함한다.

+

furiosactl의 출력 포맷 추가

+

이전까지는 list, info 등의 서브 커맨드 실행 시 ascii를 이용한 표 형식으로 내용을 출력하고 있었다. +이번 릴리스에는 --output 옵션을 통해 json, yaml등 structured format으로 정보를 확인할 수 있도록 기능이 추가되었다.

+
$ furiosactl info --output json
+[{"dev_name":"npu7","product_name":"warboy","device_uuid":"844972B6-8252-4A9F-8A20-142A8B9CE5DA","device_sn":"WBYB0233HH178KREO","firmware":"1.6.0, 7a3b908","temperature":"47°C","power":"0.99 W","pci_bdf":"0000:d6:00.0","pci_dev":"492:0"}]
+
+$ furiosactl info --output yaml
+- dev_name: npu7
+  product_name: warboy
+  device_uuid: 844972B6-8252-4A9F-8A20-142A8B9CE5DA
+  device_sn: WBYB0233HH178KREO
+  firmware: 1.6.0, 7a3b908
+  temperature: 47°C
+  power: 0.98 W
+  pci_bdf: 0000:d6:00.0
+  pci_dev: 492:0
+
+
+

또한 info 서브 커맨드가 NPU 클럭 속소(Clock Frequency)를 출력하도록 개선되었다.

+

furiosa-npu-metrics-exporter 개선

+

furiosa-npu-metrics-exporter 커맨드는 NPU의 성능 및 상태 +지표들을 OpenMetrics +형식으로 서빙하는 웹서버이다. 이 지표들은 Prometheus 등 OpenTelemetry의 수집 도구를 통해 수집할 수 있다.

+

0.10.0 릴리스에 포함된 버전은 NPU의 클럭 속도(Clock Frequency)와 NPU 사용률을 출력 지표로 포함하도록 개선되었다. +NPU 사용률 기능은 아직 실험적인 기능으로 아래와 같이 --enable-npu-utilization 옵션을 통해 활성화해야 한다.

+
furiosa-npu-metrics-exporter --enable-npu-utilization
+
+
+

또한, 기존에는 도커 이미지를 통해서만 제공되었던 furiosa-npu-metrics-exporter 명령행 도구는 +이번 릴리스부터는 furiosa-toolkit 패키지에 포함되어 다음과 같이 APT 패키지 매니저로 설치할 수 있도록 개선되었다.

+
apt install furiosa-toolkit
+
+
+
+
+
+ + +
+