끄적/모델 최적화 및 경량화 15

데이터 병렬화

1. 정의데이터 병렬화는 3가지 단계로 나뉜다. (1) 초기화 모든 모델을 GPU에 복제해서 넣어주는 과정즉 우리가 처리해야하는 데이터를 각 GPU의 개수에 맞게 더 작은 단위로 나눠서 할당하는 과정 모델을 모든 GPU에 복제하고, 데이터셋을 각각에 나눠 할당 (2) Forward Pass각 GPU가 모델도 받았고 데이터도 받았으니, 그에 대한 각각의 연산을 병렬적으로 진행하는 과정각 GPU들은 할당받은 데이터에 대해 병렬적으로 연산을 수행 (3) Backward PassGradient를 구하고 모델을 업데이트하는 과정결과적으로 Forward 과정에서 얻은 결과들을 합치는 것이 필요하다.그리고, 모델을 업데이트 해야 한다.각 GPU에서 계산된 Gradient를 하나의 Gradient로 합치고, 모델 업데..

PEFT 1 : 개요

Fine - tuning은 모델이 갖고 있는 파라미터 전체를 학습하는 과정이다.하지만 우리는 일부만 학습을 해서 좋은 모델을 만들 것이다.  PEFT 방법론 (1) 프롬프트 튜닝 방식원래 모델 파라미터나 구조는 변경하지 않는다.대신, 우리가 입력하려는 텍스트 문장이 있을텐데 이곳에 특별한 토큰들(특정한 목적을 가진)을 앞에 붙여준다.이 토큰들이 Transformer 안에 있는 아키텍쳐에 들어가면, 이들이 자연스럽게 input Text들과 교류를 하게 된다. 이를 통해 토큰들이 영향을 끼쳐서 특정 출력을 내뱉도록 학습을 하는 것이다. 즉, 안의 모델은 학습을 하지 않고, 조금의 프롬프트들(단어라고 생각하면 된다.)을 학습해서 input이 우리가 원하는 방식으로 출력하도록 유도하는 방식이다. ex : Pro..

Quantization 2 : Quantization Mapping 기법들

Quantization Mapping 기법들에 대해 알아보자.  Absmax QuantizationScale factor에 해당하는 s와 Zero - point 에 해당하는 z만 구하면 모든 값들을 양자화 및 역양자화를 할 수 있다.(X : 원본 값, X_quant : 양자화 결과, X_dequant : 역양자화 결과) 데이터에서 절댓값의 최댓값이 우리가 표현하려는 값으로 계산한다.우리들의 목표는, 만약 int8이라면 -127 ~ 127의 범위가 되도록 하는 것이다.(단, 0은 그대로 0이어야 한다.)   양자화를 끝낸 뒤, 결과를 확인해보면, 부동 소수 없이 모두 정수로 저장되어 있는 것을 확인할 수 있다. 이제 이 데이터들을 역양자화를 통해 복원을 할 수 있고, 약간의 오차가 있는 것도 확인할 수 있..

Quantization 1 : 개요

Quantization이란?숫자의 정밀도를 낮추는 최적화 및 경량화 기법이다. 이때 정밀도란?무리수가 있을 때 그 무리수를 얼마나 정확하게 표현할지 예를 들어 π를 표현할 때 정밀도가 높으면 : 3.141592정밀도가 낮으면 : 3.14 낮은 정밀도의 특징계산 속도 향상오차 발생메모리 사용량 감소 Quantization의 목표높은 정밀도로 표현된 것들을 낮은 정밀도로 바꾸되, 오차를 최소화하는 방법을 찾는 것이다. Quantization의 개요높은 정밀도의 값을 적절한 정밀도 값에 맵핑하는 함수가 필요하다.이를 Quantization Mapping라고 한다. Quantization의 에러가 커질수록 성능 저하이유 :(1) 누적 오차 :작은 오차들이 층을 거치면서 누적되고 증폭(2) 비활성화 :ReLU함수..

KD 4 : Imitation Learning

내부에 접근할 수 없지만 블랙 박스 모델의 성능이 아주 좋은 경우가 있다.이들의 지식을 활용할 수 없을까?    Imitation Learning(모방 학습)이란다른 에이전트, 교사 모델의 행동을 관찰해서 자신의 정책으로(답변 방식) 학습하는 기계 학습 방법이다.ex: 교사 (Chat GPT), 자신 (SLM = Smal language model), 행동 (Chat GPT의 응답, 우리가 증류하려는 지식의 종류 ) 출력 결과 외에는 우리가 얻을 수 있는 정보가 없어서 이렇게 활용한다.  NLP 분야에서 관련 연구를 많이 하고 있다.예를 들면 '과일에 대해 알려줘!' 라고 교사 모델에 입력하면 알고 있는 지식이 많다보니 다양하고 많은 정보를 알려준다. 하지만 조금 작은 모델들은 간소한 정보만 알려준다.우..

KD 3 : Feature - based KD

Feature - based KD 는 내부에 대한 접근이 모두 가능한, 화이트 박스 모델에 대해서만 사용 가능하다. 교사 모델의 레이어 Feature를 사용한다.중간 결과 혹은 과정이라고도 해석할 수 있다.(Representation) 즉, Feature - based는 중간에 있는 Feature들을 우리가 전달해서 학습하는 것이다.  교사 모델의 중간 레이어 Feature f_t (d_t 차원)학생 모델의 중간 레이어 Feature f_s (d_s 차원)두 Feature는 차원이 다를 수 있기 때문에 학생 모델에 regressor layer R을 주게 된다. 이 R을 통해서 f_s가 f_t 와 비슷한 형태가 되도록 맞춰주는 역할을 한다.R : d_s -> d_t (작은 차원을 큰 차원으로 바꿔주는 모듈..

KD 2 : Logit based KD

Logit based KD를 비유적으로 말하자면 교사가 학생에게 풀이방법을 알려주는데, 각 선택지가 어느정도 가능성을 갖고 있는지도 같이 알려준다고 생각하면 된다. 예를 들어 어떤 5지선다 객관식 문제의 정답은 1번이지만 2~5번 선택지의 정답일 확률도 함께 알려주는 것이다.  즉, 교사 모델의 Logit 값을 지식으로 활용하는 방법이다.그럼 Logit이란?넓은 의미 : 확률 분포가 아직 정규화가 되지 않은 상태좁은 의미 : Softmax 함수를 씌우게 되면 나오는 확률분포  사용할 교사 모델의 지식Logit으로 계산된 클래스 확률값이다.클래스 간 유사도라던지, 혹은 교사 모델이 한 생각들이 간접적으로 녹아있다.교사 모델은 데이터를 학습하면서 그 유사도를 자연스럽게 파악할 수 있기 때문이다. 예를 들어 ..

KD 1 : 지식 증류의 개념

다른 모델로부터 지식을 추출해서 전달하는 지식 증류 기법에 대해 알아보자.  정의고성능을 보이는 교사 모델에게 지식을 전달받아서 학생 모델을 학습시키는 기법이다. 학생 모델 : 교사 모델보다 상대적으로 작고, 성능이 떨어진다.교사 모델 : 학생 모델보다 상대적으로 크고, 성능이 잘 나온다.우리는 두 모델의 장점을 전부 갖고 싶다.따라서 학생 모델에게 지식을 전달해서 작은 모델이지만 성능은 우수한 결과를 얻을 것이다.  분류우리가 학생 모델에게 전달해주고 싶은 지식에 따라 종류가 나뉜다. Response - based입력을 줬을 때, 교사 모델이 갖고 있는 Response들(Logit, Output)을 지식으로 활용하는 것Logit - based :  Teacher의 Logit 을 사용 Output - b..

Pruning 3 : 적용사례 (CNN, BERT)

CNN과 BERT에서 어떻게 pruning하는지 알아보자.Pruning in CNN CNNCNN 모델은 CNN과 FC 부분으로 나뉜다.FC : 대부분의 파라미터가 존재(공간)CNN : 연산 속도 좌우(시간)따라서 공간과 시간 효율을 모두 챙기려면 두 부분 모두 pruning이 필요하다. CNN FiltersCNN은 이미지에 적용할 적절한 Filter 를 학습한다.이때 Filter란 이미지 단위다. (코, 입, 얼굴 모양, 등) Filter 는 한 장에 행렬 1개라고 보면 된다.앞단의 레이어의 경우 디테일한 Feature를 찾고, 뒤쪽 레이어는 전체적인 구조를 파악하는 경향이 있다.  Filter Pruning중요도가 작은 Filter를 제거하는 것이 CNN의 pruning이다.Stuctured한 방법이며..

Pruning 사전 지식

실습에 들어가기 전 사전 지식을 정리해두자. Matrix Sparsity 희소행렬 : 행렬의 대부분의 요소가 0인 행렬Sparsity = 전체 중 0의 비율 (Density = 1 - Sparsity ) 121500120Dense 행렬Sparsity  = 3 / 9 = 33.33%Dense  = 6 / 9 = 66.67% 100000100Sparsity  행렬Sparsity  = 7 / 9 = 77.78%Dense  = 6 / 9 = 22.22%   위와 같은 행렬에 대해 말한 이유는 Unstructured pruning은 Structured pruning과는 다르게 파라미터 값을 0으로 바꾸는 방식이다.여전히 0을 저장하고 있고(공간 절감 X), 0을 곱하고 있기(시간 절감 X) 때문에 이 방식으로는 ..