본문 바로가기

ML8

Parameter Efficient Fine-Tuning(PEFT) 개요 LLM 을 새롭게 원하는 도메인의 데이터를 사용하여 학습하고자 할 때 가장 큰 문제는 GPU의 VRAM 용량입니다. LLM은 성능을 위해서 이름 그대로 큰 모델을 사용하게 되는게 일반적이다보니 이 모델을 그대로 VRAM에 올려서 fine-tuning을 하려면 최소한 24G 이상의 VRAM이 필요하게 됩니다. 문제는 이렇게 큰 모델 전체의 파라미터들을 재학습하기 위해서는 VRAM 도 VRAM 이지만 학습 시간도 오래 걸릴 뿐 아니라 생각보다 데이터의 량, 상태 등에 따라서 수렴도 어렵다는 문제가 있습니다. 이러한 문제들을 해결하기 위해서 최근에 많은 방법들이 발표되고 있지만 이런 연구들의 가장 기반이 되는 Parameter Efficient Fine-Tuning(PEFT)에 대해서 먼저 알아보려고 합.. 2024. 1. 18.
[Optimization] Gradient Descent, Stocastic Gradient Descent, NAG, RMSPro, Adam 1) Gradient Descent parameter 를 반복적으로 objective 의 gradient 를 이용해서 update 하는 방법. 주어진 데이터 D를 사용해서 objective 가 optimal value에 도달할 수 있도록 점진적으로 update를 수행. (ex) Linear regression Step 1. objective L(theta) 를 parameter theta에 대해서 미분을 수행 Step 2. theta 를 gradient 의 반대 방향으로 update. (f_theta = th_1 * x_1 + th_2 * x_2 + ... + th_j * x_j + ... + th_N * x_N 이므로 뒤에 x_j가 남게됨) 그러나, Gradient Descent 방법은 N 개의 샘플이.. 2022. 6. 15.
[Activation Functions] ML 모델을 연구하고 실제 프로덕트 개발을 위해서 모델링을 하는 과정에서 퍼포먼스 향상을 위해 아키텍쳐 서치를 굉장히 많이하게 됩니다. 최근 Diffusion Model을 기반으로 ML 프로덕트를 만드는 경험을 하였는데, 실제로 UNet 기반의 아키텍쳐에서 activation function은 생각보다 중요하게 퍼포먼스에 영향을 주게 되었습니다. (Normalization 방법도..!) 이번 포스팅에서는 이런 중요한 activation function에 대해서 정리하는 시간을 가져보려고 합니다. 저는 주로 제가 공부한 걸 정리하고 나중에 끄집어 내기 위해서 글을 쓰는 편인데, 누군가 검색하였을 때 keyword라도 던져서 도움이 될 수 있기를 바라며 글을 씁니다! # 간단히 ML 모델을 학습한다는 것의 .. 2022. 6. 9.
[Normalization Techniques] 2탄 Decomposing Normalization 앞선 포스팅에서 다루었던 NORMALIZING ACTIVATIONS AS FUNCTIONS 의 Batch Normalization 은 굉장히 많이 사용되고 있는 Normalization techniques 중 하나입니다. 하지만 아래의 2가지 문제점이 크게 있다고 말씀드렸었는데, 이를 해결하기 위한 새로운 normalization techniques 가 등장하였고 좋은 성능을 보여주고 있습니다. inference시에 operation이 다르게 작동하여 performance에 불안정성이 존재 small batch size를 사용하는 경우 학습과정 및 inference시에 error가 큼 (input data에 대한 mean & std 가 mini-batch 단위로 수행되어 학습에 사용됨) 실제로 최근에 주.. 2022. 5. 30.
[Normalization Techniques] ML 기술들이 발전함에 따라서 가장 많이 변한 부분 중 하나는 normalization 기술이라고 생각합니다. 최근 ML Computer Vision 분야에서 프로덕트화 해야하는 일을 하고 있는데 1%의 성능이라도 소중하다 보니 찾아보고 적용해보면서 생각보다 퍼포먼스에 큰 영향을 주는 부분이라는 것을 깨닳아서 이렇게 정리하게 되었습니다. # 개요 normalization 기술을 정리함에 있어서 기술들의 유사한 부분과 차이가 있는 부분들을 정리하는 것이 제일 이해하기도 쉽고 사용할 때 필요한 기술을 선택하기도 쉽다고 생각합니다. 이 글에서는 이 부분들을 중점적으로 정리해보고자 합니다. cvpr 2021 에서 굉장히 좋은 survey 논문이 있어서 이 논문을 정리하는 식의 포스팅이 될 것 같습니다. # 논문.. 2022. 5. 30.
[GluonCV, OpenSource 분석하기] GluonCV의 multiprocessing 이해하기 [2] Introduction 지난 포스팅에 이어서 GluonCV의 DDP 활용법에 대해서 살펴보도록 하겠습니다. Train train_ddp_pytorch.py 스크립트에서 모델을 생성하고 데이터셋을 로드하는 부분까지는 지난 포스팅에서 살펴보았습니다. 이제 train 하는 과정에서의 DDP로 인한 변화된 부분을 살펴볼 차례입니다. 우선, optimizer를 선언하는 것에 있어서는 기존에 익숙한 방식대로 똑같이 선언해주면 됩니다. 하지만 차이점은 criterion을 설정할 때는 .cuda() 함수를 통해서 GPU에 올려주는 것이 필요합니다. 실제로 차이가 나는 부분은 train_sampler.set_epoch() 함수가 처음 등장하게 됩니다. # create dataset and dataloader train_.. 2021. 10. 27.
[GluonCV, OpenSource 분석하기] GluonCV의 multiprocessing 이해하기 [1] Introduciton 이번 포스팅에서는 Mxnet과 PytorchTS등 다양한 ML OpenSource 의 기반이 되고 있는 GluonCV의 multiprocessing 이 어떻게 동작하는지에 대해서 한번 살펴보려고 합니다. pytorch에서는 data parallel의 기법으로 nn.DataParallel을 지원하고 있지만 이 함수를 통한 데이터 병렬화 기법은 비효율적인 측면이 많이 있습니다. 대표적으로 GPU의 불균형적인 사용과 multi-thread 기반의 동작으로 python의 GIL (Global Interpreter Lock) 등의 문제가 존재하며, multiple nodes의 multi-gpu에서는 사용이 불가능한 형태입니다. pytorch는 multiple nodes 에서 multi-gp.. 2021. 10. 27.
Pytorch Distributions Shape 의 이해(Understanding Shapes in Pytorch Distribution) Pytorch에서는 다양한 distribution에 대해서 지원을 하고 있습니다 (https://pytorch.org/docs/stable/distributions.html). 최근 일을 하면서 distribution을 정말 많이 사용하고 있는데 정리가 잘 되어 있으면 좋겠다는 생각에 공부도 할 겸 포스팅으로 남기려고 합니다. 최근 저는 transformer 를 활용을 하면서 decoder를 거치지 않고 encoder의 latent vector를 사용해서 distribution을 통해 추론하고자 하는 값을 sampling 하는 방식을 사용하는 경우가 많이 있습니다. 이때, multivariate 인 경우와 univariate 인 경우에 따라서 Pytorch의 distribution을 다양하게 선택하고 활.. 2021. 10. 11.