Distiller : Basic Usage Examples
GitHub README에는 아래 3가지 샘플이 있다. 이것에 대해서 자세히 알아보고자 한다.
- Example: Simple training-only session (no compression)
- Example: Getting parameter statistics of a sparsified model
- Example: Post-training quantization
1-1. Simple training-only session (no compression) : 원문
다음은 CIFAR10 데이터 세트에서 'simplenet'이라는 네트워크의 훈련 전용 (압축 없음)을 호출합니다. 이것은 대략 TorchVision의 샘플 Imagenet 교육 응용 프로그램을 기반으로 하므로 해당 응용 프로그램을 사용했다면 익숙해 보일 것입니다. 이 예에서는 압축 메커니즘을 호출하지 않습니다. 잘라 내기 후 미세 조정을 위해 훈련이 필수 부분이기 때문에 훈련 만합니다.
이 명령을 처음 실행하면 CIFAR10 코드가 컴퓨터에 다운로드 되므로 약간의 시간이 걸릴 수 있습니다. 다운로드 프로세스가 완료 될 때까지 기다리십시오.
CIFAR10 데이터 세트의 경로는 임의적 이지만 이 예에서는 데이터 세트를 distiller와 동일한 디렉토리 수준 (예 : ../../../data.cifar10)에 배치합니다.
먼저 샘플 디렉토리로 변경 한 다음 애플리케이션을 호출합니다.:
$ cd distiller/examples/classifier_compression
$ python3 compress_classifier.py --arch simplenet_cifar ../../../data.cifar10 -p 30 -j=1 --lr=0.01
TensorBoard 백엔드를 사용하여 훈련 진행 상황을 볼 수 있습니다 (아래 다이어그램에서는 LR 값이 서로 다른 두 개의 훈련 세션을 보여줍니다). 압축 세션의 경우 활성화 및 매개 변수 희소성 수준 추적과 정규화 손실을 추가했습니다.
1-2. Simple training-only session (no compression) : 해석
위 내용을 그대로 잘 따라 했다면 뭔가 콘솔창에 쭉 올라오고 다 됐다곤 하지만 뭐가 다 됐는지 알기 어렵다. (...)
그래서 이것의 실체가 무엇인지, 어떻게 실행하는지 코드를 분석하고자 한다.
compress_classifier.py 파일은 이름에서 알 수 있듯이 분류기를 압축하는 것 같다. 내용은 200줄 정도이다.
소스를 보면 커멘드 라인의 argument를 파싱하는데, argument를 보면 소스코드 해석에 도움이 된다. args는 compress_classifier.py 파일 자체, classifier, distillation, pruning에서 각각 이뤄진다.
- compress_classifier
--> classifier
--> distillation
--> pruning
distiller.apputils.image_classifier.classifier.init_classifier_compression_arg_parser에서 주요한 args 파싱이 이뤄진다. 불친절했던 python3 compress_classifier.py --arch simplenet_cifar ../../../data.cifar10 -p 30 -j=1 --lr=0.01
의 args를 찾아보면아래와 같다.
--arch : model architecture
-p : print frequency
-j : workers
--lr : --learning-rate
이렇게 파싱한 후 ClassifierCompressorSampleApp가 main app에 해당하는 부분이다.