Release Notes - 0.9.0
Furiosa SDK 0.9.0은 메이저 릴리스로 다수의 성능 개선, 기능 추가, 버그픽스를 포함한다. 특히 양자화 도구의 기능 및 정확도 개선이 주요 변경 사항이다.
패키지 이름 |
버전 |
---|---|
NPU Driver |
1.7.0 |
NPU Firmware Tools |
1.4.0 |
NPU Firmware Image |
1.7.0 |
HAL (Hardware Abstraction Layer) |
0.11.0 |
Furiosa Compiler |
0.9.0 |
Python SDK (furiosa-runtime, furiosa-server, furiosa-serving, furiosa-quantizer, ..) |
0.9.0 |
NPU Management CLI (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-libhal-warboy furiosa-libnux furiosa-toolkit
펌웨어 업그레이드는 다음과 같이 실행한다.
apt-get update && \
apt-get install -y furiosa-firmware-tools furiosa-firmware-image
파이썬 패키지 업그레이드는 다음과 같이 실행한다. 새로 추가된 기능들을 사용하기 위해서는 패키지 설치와 관련된 도구들이 최신 버전으로 먼저 업데이트 되어야 한다.
pip install --upgrade pip setuptools wheel
pip install --upgrade furiosa-sdk
경고
pip 등을 최신 버전으로 업데이트하지 않은 채로 furiosa-sdk를 설치 또는 업그레이드 시 아래와 같은 에러를 접할 수 있다.
ERROR: Could not find a version that satisfies the requirement furiosa-quantizer-impl==0.9.* (from furiosa-quantizer==0.9.*->furiosa-sdk) (from versions: none)
ERROR: No matching distribution found for furiosa-quantizer-impl==0.9.* (from furiosa-quantizer==0.9.*->furiosa-sdk)
주요 변경 사항
모델 양자화 도구 (quantization tool) 관련 개선
furiosa-quantizer
는 이미 트레이닝 된 모델을 양자화된 모델로 변환해주는 도구이다. (자세한 내용은 모델 양자화 에서 찾아볼 수 있다.)
0.9.0 릴리스는 양자와 도구 관련하여 API 개선, 다양한 캘리브레이션 방법 포함하며 자세한 내용은 다음과 같다.
더 유연하고 튼튼한 새로운 양자화 관련 API가 추가되었다. (
furiosa.quantizer
,furiosa.optimizer
)
optimized_onnx_model = optimize_model(source_onnx_model)
calibrator = Calibrator(optimized_onnx_model, CalibrationMethod.MIN_MAX_ASYM)
for calibration_data, _ in tqdm.tqdm(calibration_dataloader, desc="Calibration", unit="images", mininterval=0.5):
calibrator.collect_data([[calibration_data.numpy()]])
ranges = calibrator.compute_range()
quantizated_graph = quantize(optimized_onnx_model, ranges)
모델의 시작에서 quantize 수행 여부를 결정할 수 있는 옵션이 추가되었다.
컴파일러 옵션에서
without_quantize
가 제거된 대신,quantize
함수의 인자with_quantize
를 통해 사용 여부를 지정할 수 있다.
quantize
함수의 인자normalized_pixel_outputs
을 통해 모델 output을 fp32로 dequantize 하지 않고 uint8로 변환하도록 설정할 수 있다.원소 범위가
(0. , 1.)
로 된 텐서를 uint8의 pixel 데이터로 받을 수 있도록 최적화 할 수 있다.
보다 다양한 calibration 방법을 제공한다.
Calibration Method |
Asymmetric |
QuasiSymmetric |
---|---|---|
Min-Max |
MIN_MAX_ASYM |
MIN_MAX_SYM |
Entropy |
ENTROPY_ASYM |
ENTROPY_SYM |
Percentile |
PERCENTILE_ASYM |
PERCENTILE_SYM |
Mean squared error |
MSE_ASYM |
MSE_SYM |
Signal-to-quantization-noise ratio |
SQNR_ASYM |
SQNR_SYM |
새로운 캘리브레이션 방법의 유용성을 확인하기 위해, 인기있는 10개 모델에 대해 새로운 캘리브레이션들을 적용하여 정확도를 측정하였다. 10개 모델 중 8개에서 새로운 캘리브레이션 방법이 더 나은 정확도를 보였다. 그 중 EfficientNet-B0처럼 극적인 정확도 향상을 보인 경우도 있었다. 기존 최소최대(min/max) 캘리브레이션 기반 정확도는 16.104%이었는데, 새 퍼센타일 캘리브레이션 기반 정확도는 73.556% 이다. 자세한 실험 결과는 Quantization Accuracy 에서 볼 수 있다.
새로운 quantizer의 설치 및 사용법에 대한 자세한 내용은 다음 예제를 참고할 수 있다.
컴파일러 개선
Lower/Unlower 연산자 가속 지원
Dequantize 연산자 가속 지원
하드웨어의 명령어 메모리보다 더 큰 크기의 바이너리의 실행 지원
스케쥴러와 메모리 할당자를 개선하여 불필요한 I/O를 제거함
다양한 개선으로 컴파일 최적화를 하여 실행 성능이 향상됨
furiosa-toolkit 개선
furiosa-toolkit 0.11.0 릴리스에 포함된 furiosactl
명령행 도구는
다음과 주요 개선 내용을 포함한다.
새로 추가된 furiosactl top
명령은 시간의 흐름에 따른 NPU 장치 별 사용률을 확인하는데 사용한다.
$ furiosactl top --interval 200
NOTE: furiosa top is under development. Usage and output formats may change.
Please enter Ctrl+C to stop.
Datetime PID Device NPU(%) Comp(%) I/O(%) Command
2023-03-21T09:45:56.699483936Z 152616 npu1pe0-1 19.06 100.00 0.00 ./npu_runtime_test -n 10000 results/ResNet-CTC_kor1_200_nightly3_128dpes_8batches.enf
2023-03-21T09:45:56.906443888Z 152616 npu1pe0-1 51.09 93.05 6.95 ./npu_runtime_test -n 10000 results/ResNet-CTC_kor1_200_nightly3_128dpes_8batches.enf
2023-03-21T09:45:57.110489333Z 152616 npu1pe0-1 46.40 97.98 2.02 ./npu_runtime_test -n 10000 results/ResNet-CTC_kor1_200_nightly3_128dpes_8batches.enf
2023-03-21T09:45:57.316060982Z 152616 npu1pe0-1 51.43 100.00 0.00 ./npu_runtime_test -n 10000 results/ResNet-CTC_kor1_200_nightly3_128dpes_8batches.enf
2023-03-21T09:45:57.521140588Z 152616 npu1pe0-1 54.28 94.10 5.90 ./npu_runtime_test -n 10000 results/ResNet-CTC_kor1_200_nightly3_128dpes_8batches.enf
2023-03-21T09:45:57.725910558Z 152616 npu1pe0-1 48.93 98.93 1.07 ./npu_runtime_test -n 10000 results/ResNet-CTC_kor1_200_nightly3_128dpes_8batches.enf
2023-03-21T09:45:57.935041998Z 152616 npu1pe0-1 47.91 100.00 0.00 ./npu_runtime_test -n 10000 results/ResNet-CTC_kor1_200_nightly3_128dpes_8batches.enf
2023-03-21T09:45:58.13929122Z 152616 npu1pe0-1 49.06 94.94 5.06 ./npu_runtime_test -n 10000 results/ResNet-CTC_kor1_200_nightly3_128dpes_8batches.enf
furiosactl info
명령은 각 장치의 정보가 간결하게 출력되도록 개선되었다. 전과 같이 장치의 상세 정보를 확인하고 싶을 때는 --full
옵션을 입력할 수 있다.
$ furiosactl info
+------+--------+----------------+-------+--------+--------------+
| NPU | Name | Firmware | Temp. | Power | PCI-BDF |
+------+--------+----------------+-------+--------+--------------+
| npu1 | warboy | 1.6.0, 3c10fd3 | 54°C | 0.99 W | 0000:44:00.0 |
+------+--------+----------------+-------+--------+--------------+
$ furiosactl info --full
+------+--------+--------------------------------------+-------------------+----------------+-------+--------+--------------+---------+
| NPU | Name | UUID | S/N | Firmware | Temp. | Power | PCI-BDF | PCI-DEV |
+------+--------+--------------------------------------+-------------------+----------------+-------+--------+--------------+---------+
| npu1 | warboy | 00000000-0000-0000-0000-000000000000 | WBYB0000000000000 | 1.6.0, 3c10fd3 | 54°C | 0.99 W | 0000:44:00.0 | 511:0 |
+------+--------+--------------------------------------+-------------------+----------------+-------+--------+--------------+---------+
furiosactl
의 설치 및 사용법에 대한 자세한 내용은 furiosa-toolkit 에서 찾을 수 있다.