[11/29] 김민수 / Understanding and Improving KD for QAT of Large Transformer Encoder #30
Replies: 1 comment
-
-> 답변이 늦어 죄송합니다. 굉장히 중요한 부분을 짚어주신 것 같다고 생각합니다. 말씀해주신 대로 FP based Bit precision 을 줄여서 Computation 부담을 줄이는 방법도 있겠지만, 저희 연구실에서 특히 집중하는 부분은 LUT 기반 Non-Linear Function Approximation 연구인 것 같습니다. 지난번 오픈채팅방에서 NN-LUT (DAC 2021) 논문을 소개해드렸던 것도 비슷한 맥락이었구요. Attention 내부 연산에 GeLU, Softmax 같은 Non-Linear 함수가 많아 이 함수의 연산을 Neural Network 를 통해 Approximation 하여 해당 Network 의 Weight 를 LUT 의 Coefficient 로 변환하여 사용할 수 있다는 것이 NN-LUT 의 주 요지 입니다. 이 같은 LUT 기반 접근 말고도 I-BERT (ICML 2021) 에서 처럼 Non-Linear Function 을 Integer 연산으로 Approximation 하는 방법론도 있습니다. 이런 방식들과 같이 저희도 MatMul 말고 Non-Linear Function 부분의 Computation Cost 를 어떻게 하면 줄일지에 대해 늘 고민하고 있다는 점 말씀드리고 싶습니다. 좋은 질문 감사드립니다. |
Beta Was this translation helpful? Give feedback.
-
GPT-2 정도의 모델을 QAT로 연구를 진행함에 있어서 GPU는 어느정도 리소스면 할만한 연구 환경으로 생각하시는지 궁금합니다.
-> 모델의 크기에 따라 다릅니다만, GPT-2 small 부터 Large 정도는 일반적인 GPU 1장에 무리 없이 QAT 세팅을 올릴 수 있습니다. (Large 기준 QAT시, ~30GB GPU Memory 차지 합니다.) 다만 KD 를 사용하게 된다면 Teacher Model 의 Inference 도 필요해서 더 많은 Memory를 소모할 것 입니다. 다만 GPT-2 XLarge 의 경우는 QAT 에 GPU Memory 를 50기가가 넘게 차지하기 때문에, A100-80GB 와 같은 GPU 메모리가 특히 더 풍족한 환경이 아니라면, QAT를 위한 부가적인 세팅 (분산 학습이라던지..) 혹은 더 많은 리소스가 필요할 것으로 보입니다.
제가 들은 것이 맞다면 BERT의 특징 때문에 Loss function에 ground-truth와 관련된 항이 들어가지 않는다고 했던 것 같은데 혹시 BERT의 어떤 특징 때문에 그런 것인지 궁금합니다.
-> BERT 의 Downstream Task 중 특히 Natural Language Understanding (ex. GLUE) Task 는 Binary Classification 이라는 특성이 있습니다. 즉, CLS Token 의 768 Hidden Dimension 을 2 로 Projection 시켜 Prediction 을 수행하는데요, 그렇기 때문에 실제 Prediction 의 Output Space 가 굉장히 작다는 점이 있고, 이 때문에 GT Loss 가 줄 수 있는 정보가 한정적이라고 생각하고 있습니다. (제 개인적인 인사이트가 들어간 의견이라 정확하지 않을 수 있습니다.) Vision Task 의 ImageNet 과 같이 Label 갯수가 1000개인 경우나, Decoder 의 Language Modeling 은 50000 의 Vocab Size 만큼 Output 을 Projection 시켜 Prediction 을 수행하기 때문에, 이런 경우에서는 QAT 에서 GT Loss 의 중요성이 굉장히 커지게 됩니다. (Vision task 에서는 GT Loss 가 QAT 성능 향상에 도움이 되며, Decoder 에서는 GT Loss 를 Loss 항에 넣지 않으면 QAT 자체가 잘 되지 않습니다.) 따라서 이러한 Label 갯수에서 오는 Prediction 쪽 Output Space 가 Training 에 미치는 영향이 제법 큰 것으로 보고 있고, BERT 의 특성보다는 BERT 가 주로 수행하는 NLU Task 의 특성 상 GT Loss 가 크게 중요하지 않게 되는 것 같습니다! (실제 TernaryBERT 에서도 QAT 에 GT-loss 는 별 효과가 없어서 사용하지 않았다는 답변도 받을 수 있었습니다.)
발표 중에 낮은 비트의 내용들은 구현 입장에서 보기보다는 연구적인 입장으로 보고 계신다고 하신 것 같은데요. 저자님께서 직접 구현 입장에서 보고 계시지는 않으시더라도 1.5비트 2비트 수준의 implementation이 지금도 실제로 좀 쓰이는 사례가 있다고 볼수 있을까요? 아니라면 혹시 이런 것들이 실제로 구현되는데 얼만큼의 시간이 걸릴지 혹시 의견이 있으실까요?
-> 구현의 레벨이나 응용 단에서는 제가 아직 부족한 점이 많아 정확히 말씀드릴 수는 없지만, 1.5 나 2 bit 정도의 Ultra-Low Precision 의 경우는 GPGPU 에서는 활용이 되려면 조금 시간이 걸리지 않을까 생각합니다. 아무대로 해당 Bit 를 지원하기 위한 연산기도 필요하며, Pytorch 와 같은 높은 레벨에서 HW 로 매핑하는 SW Stack 의 지원여부도 필요하기 때문입니다. 따라서 이러한 낮은 Bit 의 Uniform Quantization 을 NVIDIA 와 같은 큰 회사에서 직접 Support 를 해주지 않는 이상, 실제로 구현이 되어 Latency 및 Memory Saving 과 같은 이득을 보려면 시간이 좀 더 걸릴 것 같습니다. 하지만, 최근 개발이 시작되고있는 Near Memory Processing 과 같이 인공지능 연산을 독립적인 레벨에서 새로 구현을 하는 경우라면, 말씀드린 구현의 시기가 조금은 빨라질 수 있지 않을까 생각합니다. 또한 Ternary 는 특히 +1, 0, -1 값으로 이루어져 있기 때문에, MatMul 단계에서 덧셈으로만 곱셈 연산을 수행할 수 있다는 장점도 있기 때문에, 잠재적인 가치는 분명히 있다고 생각합니다.
손실함수의 경우, 혹시 최상의 성능을 낼 것으로 예상했던 lambda 값과 실제 실험 결과 도출된 값이 많이 달랐는지 궁금합니다. 비슷한 방법으로 연구상의 이슈를 해결했던 적이 있었는데, 저 개인적으로는 저의 예상과 비슷한 값이기도 아니기도 한 적이 있었던지라 궁금하네요 ㅎㅎ
-> 말씀해주신 Lambda 값이 혹시 손실함수를 Linear 하게 Combination 을 할 때 붙이는 Coefficient 값을 말씀하시는 걸까요? 그게 맞다면 저도 질문자님께서 말씀해주신 것 처럼, 좋은 성능을 낼 수 있을 것이라 예상한 조합보다 다른 결과가 나오기도 했습니다. (ex. 이 Task 는 Attention Output Loss 를 많이 거는 것이 좋을거야!라고 예상했으나, 실제로는 Attention Map Loss 랑 비슷하게 거는게 더 좋게 나온다던지..) 그런 부분에서 저희 논문이 제안한 Loss Function Unification 의 방식이 조금 Empirical 한 특징이 있고, 다른 분야로 General 하게 사용하기는 조금 어려운 부분도 있다고 생각하구요. 말씀하신 부분이 제가 이해한 방향과 다르다면 말씀해주세요!
Beta Was this translation helpful? Give feedback.
All reactions