Replies: 2 comments 1 reply
-
@pbk20191 Quantization과 달리 Pruning기법은 미세한 가중치나 불필요한 연결을 아예 제거해버리기에 모델 표현력이 다소 떨어질 수 있습니다. 하지만 quantization과 pruning을 어느 순서로 써야 정확도가 더 올라가는지 파악이 안되기에 저는 일단 다음과 같은 순서로 모델을 설계하는 것으로 생각하고 있습니다.
지난번, quantization을 적용한 CNN코드를 작성하는 과정에서 QAT를 이용한 양자화는 성공하여 onnx파일로 변환까지 되었으나 훈련까지 다 마치고 양자화하는 PTQ는 모델 평가까지는 되었지만 onnx파일로의 변환이 실패하여 QAT가 적용된 onnx파일을 보내드렸습니다. 오류의 원인이 무엇인지 해결되면 pytorch내 PTQ를 지원하는 라이브러리도 있으니 코드작성이 가능할 것 같습니다. 모델 사이즈의 변화를 직관적으로 보는 방법은 모델파일의 용량을 보는 것이고 조교님도 이 방법을 추천해주셨습니다. 다만 모델 사이즈가 작아도 CNN코드를 다 돌리는데 필요한 cycle수가 많아질 수 있으니 finn에 넣어보는 것이 비교적 정확한 방법이 될 수 있습니다. 또한 코드 내에서도 모델에 들어간 총 파라미터 수를 알려주는 코드도 있는 것으로 아는데 이 부분에 대해서는 더 조사해봐야 할 것 같습니다. 3번째 방법인 LoRA는 행렬의 Rank를 낮춰 가중치를 고차원->저차원으로 변환하는 방법입니다. 하지만 비교적 최근에 제안된 딥러닝 모델 최적화 기법이고 관련 논문도 많지 않으며 Pytorch내 패키지에도 LoRA를 지원하지 않기 때문에 고려대상은 아닙니다. 추가적으로 입력데이터는 roboflow에서 갖고 와서 학습 및 평가를 하고자 합니다. 3~5개의 클래스를 정하고 대신 예외처리(ex.가로등 앞에 장애물이 있다고 하여 이를 손상으로 판단하지 않는 것)의 정확도를 높이는 것으로 프로젝트 방향을 잡았습니다. 회의내용을 간략하게 정리하면 모델의 용량을 줄이는 것이 주된 주제였고 모바일넷이나 구글넷을 참고하여 아키텍처를 모방할 수 있다는 이야기도 나왔습니다. 이것들을 통해 모델의 구조를 최적화할 수 있으며 Quantization이나 Pruning을 통해 모델의 가중치와 연산을 최적화할 수 있습니다. 모바일넷과 구글넷은 CNN기반 아키텍처 종입니다. |
Beta Was this translation helpful? Give feedback.
-
FINN 컴파일러에서 사용하는 QONNX Transformer가 Pruning을 지원하는 것으로 보이는데, FINN build Flow 상에서 이 경우에는 Quantization 이후에 Pruning을 적용하는 것만 가능할 것으로 보입니다. 아닐수도 있긴한데, 만약 pruning 후 양자화를 해야한다면.. |
Beta Was this translation helpful? Give feedback.
-
현제 FINN 컴파일러는 Quantized된 모델만을 입력받을 수 있고, 예제에서 8비트를 starting point로 잡고 있습니다.
Quantization에는 QAT(Quantized Aware Training)과 PTQ(Post-Training-Quatiztion)으로 나누어 집니다. brevitas + finnn 예제는 QAT를 타겟으로 하고 있으며,
brevitas
는 PTQ도 지원하지만 이를 접목한 finn 예제는 아직 찾지 못함.모델 최적화 방법론에 대해서
pruning
기법에 대한 아이디어가 제시되었는데, 이에 대한 예시에서 보통pruning
이후에quantization
을 적용하는 것으로 보였습니다.따라서
pruning
을 적용할 경우에brevitas
의 QAT를 사용하는 것이 가능하다면, 어느 순서에서pruning
을 적용하고 QAT를 사용할지.이렇게 3가지에 대한 논의가 필요
@WooYoung1999 제가 기억하는대로 기술하긴 했는데, 미흡하거나 수정이 필요하면 피드백 부탁합니다.
Beta Was this translation helpful? Give feedback.
All reactions