[Github]
[arXiv](2024/03/06 version v1)
![](https://blog.kakaocdn.net/dn/bHNw9w/btsFJ42f6WH/d1MAMafMw63Lj8EN2N1BUK/img.png)
Abstract
Gradient를 low-rank로 투영하여 메모리 집약적인 계산을 수행하는, LoRA 보다 메모리 효율적인 GaLore (Gradient Low-Rank Projection) 제안
GaLore: Gradient Low-Rank Projection
- Background
- Low-Rank Property of Weight Gradient
- Gradient Low-rank Projection (GaLore)
이 챕터 선 한 줄 요약: 훈련이 진행될수록 gradient의 rank가 낮아지며, 이를 이용해 메모리 집약적인 계산을 low-rank에서 수행한다.
Background
Regular full-rank training
Timestep t, optimizer (e.g. Adam) p, 역전파 행렬 G에 대해
![](https://blog.kakaocdn.net/dn/bhyPcs/btsFKSg4bno/3gHhsvXbvw1Sk4AG13ihk0/img.png)
가중치 업데이트는 다음과 같다.
![](https://blog.kakaocdn.net/dn/mlZBW/btsFI5nhpzj/9mDvSYX57qY1wy7pMlW8O1/img.png)
이때 p의 state는 메모리 집약적일 수 있으며 Adam의 경우 G̃는 다음과 같이 계산된다.
![](https://blog.kakaocdn.net/dn/6j5Nw/btsFLR2adbs/pcmSDJeYvwSUw4tB0B2Kl1/img.png)
![](https://blog.kakaocdn.net/dn/bTfuoA/btsFLu0qY4o/2NKM8rVFSaD7KGonWKjMKk/img.png)
Low-Rank Property of Weight Gradient
Lemma 3.1 훈련이 진행될수록 gradient의 rank가 낮아진다.
Gradient update를 다음과 같은 형태로 가정하면, (B, C는 PSD matrix이다.)
![](https://blog.kakaocdn.net/dn/xcPsS/btsFJ4nUr0O/hkzHsB3uKuNe8nuylW9Lm1/img.png)
t가 증가함에 따라 G는 rank-1로 수렴한다.
![](https://blog.kakaocdn.net/dn/Vl0SS/btsFMJca4Bz/wEQ5bUQC6m58ITDdahHbDK/img.png)
Theorem 3.2 가역 신경망의 gradient form
선형 레이어와 일부 활성화함수는 가역적이다.
다음과 같은 L2 목표를 갖는 가역 신경망 N에 대해
![](https://blog.kakaocdn.net/dn/bmJg8D/btsFJIZN1cJ/5KnthmvaqeTpFY260zpcFk/img.png)
배치 크기 1에서 layer l의 가중치 행렬 W는 다음과 같은 형태의 gradient를 가진다.
![](https://blog.kakaocdn.net/dn/Vo89c/btsFLOxEsl8/6WDUTJPk8SHUPgpD76fle0/img.png)
![](https://blog.kakaocdn.net/dn/bStkUX/btsFHot8f13/I5mzooaVd8StSNWoKvq5f1/img.png)
Lemma 3.3 Softmax loss를 사용하는 가역 신경망 또한 같은 형태의 gradient form을 갖는다.
![](https://blog.kakaocdn.net/dn/MifDx/btsFLROOpy1/6kn4Bjb1pVDvgAX1wJLeT1/img.png)
Gradient Low-rank Projection (GaLore)
Definition 3.4 Gradient Low-rank Projection (GaLore)
G를 row-rank로 투영하고 p를 처리한 뒤 원래 차원으로 복구한다.
![](https://blog.kakaocdn.net/dn/LwaOE/btsFMCqk762/M2a9x0gLfKVaQwwz92IBOK/img.png)
![](https://blog.kakaocdn.net/dn/zgFuw/btsFJ9QGDjM/sb5PkPN9MllsZ53KcenTK0/img.png)
Definition 3.5 L-continuity (Lipschitz continuity)
![](https://blog.kakaocdn.net/dn/cOR6zm/btsFKKwfAag/XWUgkV2QqVGBBT4tnBsOI1/img.png)
이를 만족한다는 것은 안정적인 수렴이 보장된다는 것을 의미한다.
Theorem 3.6 Fixed projection을 이용한 GaLore의 수렴
배치 크기가 1보다 클 때의 G:
![](https://blog.kakaocdn.net/dn/bfwoIt/btsFLqc73dH/Dc739B6mhI5kTJmXJE6tUk/img.png)
다음과 같은 조건에서 A, B, C에 대한 L-continuity를 만족한다고 한다.
![](https://blog.kakaocdn.net/dn/bspyzR/btsFJsDstSf/csNySqMxpaV41KTkoK6Fi0/img.png)
각 변수 정의:
![](https://blog.kakaocdn.net/dn/bhi7rI/btsFJH1mKku/GkYzy0polQCEqfiDh9XdyK/img.png)
![](https://blog.kakaocdn.net/dn/cxD8Qj/btsFKRbiT4z/ZHKeLrOEENWkT9JXi7Y0M1/img.png)
λmin은 해당 행렬이 가진 가장 작은 고윳값을 말한다.
그러므로 조건을 만족하기 위해서는
![](https://blog.kakaocdn.net/dn/y9t5U/btsFLULTBW8/i1bzy9Rzgl4v9mxf8ntjl1/img.png)
는 B, C의 가장 큰 몇 개의 고유 부분공간만을 포함하는 것이 좋다.
한 가지 쉬운 방법은 G에 대한 특이값 분해를 사용하는 것이다.
![](https://blog.kakaocdn.net/dn/Slbxb/btsFLpSZfXt/LXQbilAAkkAhdKr5f89HMk/img.png)
GaLore for Memory-Efficient Training
LLM training과 같은 복잡한 최적화 문제의 경우 단일 subspace로 전체 gradient 궤적을 포착하는 것이 불가능하다.
Composition of Low-Rank Subspaces
훈련 도중 일정 시점에서 현재 G에 대한 특이값 분해를 수행하여 P, Q를 초기화함으로써 다른 subspace로의 전환을 허용한다.
![](https://blog.kakaocdn.net/dn/qfJWk/btsFK3insjy/i0K2b4kOHvrSGWMOzp8N6k/img.png)
![](https://blog.kakaocdn.net/dn/L53dk/btsFKLoIMw1/ukZzHj5QzQHsl1eIFlEgK0/img.png)
Memory-Efficient Optimization
메모리와 성능 간의 균형을 위해 실제로는 PGQ를 사용하지 않고 PG 또는 GQ로만 투영한다.
![](https://blog.kakaocdn.net/dn/cwWfo3/btsFMuM3D5l/HNPvJbukdVKIkDxC4pJ3M1/img.png)
Combining with Existing Techniques
추가적으로 QLoRA, Per-layer weight update를 채택.
![](https://blog.kakaocdn.net/dn/dYO9ob/btsFJ5npxj3/syYRUMIEZ6mfmUXAtFYEV1/img.png)
Experiments
Perplexity
![](https://blog.kakaocdn.net/dn/rxLry/btsFLQQodah/JmCsNAvT1DEkmx2ett55q0/img.png)
![](https://blog.kakaocdn.net/dn/eL0Xiy/btsFK3vWOpJ/vnNmq1C9yHVpk9KKfcNzek/img.png)
Memory
![](https://blog.kakaocdn.net/dn/NuZ2Y/btsFJJESxT2/MMq0KEIMP5sx8ksMswsb40/img.png)