Diffusion 파인튜닝에서 LoRA 랭크가 갈리는 지점
CIFAR-10과 DDPM, 작은 DiT에서 랭크 2부터 32까지를 같은 조건으로 비교한 연구를 통해 적당한 랭크가 왜 실용적인 기본값이 되는지 읽어봅니다.
원문 논문 보기
arXiv에 공개된 Understanding LoRA Rank Trade-offs in Diffusion Model Fine-Tuning은 arXiv:2609.10656으로 등록된 diffusion 파인튜닝 연구입니다. 이 연구는 CIFAR-10에서 DDPM U-Net을 랭크 2, 4, 8, 16, 32 조건으로 나란히 비교하면서 고정된 최적화 설정 아래에서 무엇이 달라지는지 측정했습니다. 연구가 내세우는 주장은 한 문장으로 정리됩니다. 고정된 학습 예산 아래에서는 작은 쪽에 가까운 적당한 랭크가 실용적인 기본값이라는 것입니다. 원문 논문은 제목 아래에 연결해 두었으니 필요할 때 바로 확인할 수 있습니다.
왜 이 작은 숫자 하나가 계속 마음에 걸렸을까
안녕하세요, 패트릭입니다.
저는 이 논문을 처음 봤을 때 솔직히 큰 기대를 하지 않았습니다. 랭크 몇 개를 바꿔가며 FID를 재는 실험처럼 들렸기 때문입니다. 그런데 숫자를 보고 나서는 생각이 조금 달라졌는데요. 랭크 4에서 나온 FID가 124.1380이었고, 랭크 8에서는 124.2136이었기 때문입니다. 용량을 두 배 가까이 늘렸는데 품질 수치는 거의 움직이지 않았습니다. 그렇다면 우리가 평소에 당연하게 올리던 그 숫자는 도대체 무엇을 바꾸고 있었던 걸까요.
이런 장면을 저는 현장에서 자주 봤습니다. 누군가 파인튜닝이 잘 안 되면 랭크를 16으로 올리고, 그래도 아쉬우면 32로 올립니다. 그다음에는 학습률을 만지고 스텝을 늘리죠. 그런데 문제는 그다음입니다. 랭크를 올리는 선택이 품질 때문인지, 아니면 마음의 안심 때문인지 아무도 확신을 하지 못합니다. 이 논문은 바로 그 지점을 붙잡습니다. 같은 데이터, 같은 구조, 같은 최적화 조건을 묶어두고 랭크 하나만 움직이면 어떤 일이 생기는지 보여주거든요.
제가 이 논문에서 가장 흥미롭게 본 부분은 결론의 크기가 아니라 실험의 태도입니다. 화려한 새 구조를 제안하지 않고, 모두가 이미 쓰고 있는 도구의 눈금을 다시 읽어줍니다. 이런 종류의 연구는 읽을 때는 밋밋하지만 막상 자신의 학습 스크립트로 돌아오면 효력이 생깁니다. 내일 아침의 실행 명령어 한 줄이 달라지니까요. 그래서 오늘은 이 작은 숫자 싸움을 처음부터 함께 따라가 보려 합니다. 랭크가 실제로 무엇을 늘리고, 무엇을 거의 바꾸지 않는지 말이죠.
파인튜닝이 무거워지는 지점은 생각보다 분명하다
Diffusion 모델을 처음부터 학습시키는 일은 여전히 무겁습니다. U-Net이든 트랜스포머 백본이든 파라미터가 크고, 노이즈를 걷어내는 과정을 여러 스텝에 걸쳐 반복해야 하며, 배치 하나를 굴리는 데도 메모리와 시간이 만만치 않게 듭니다. 그래서 많은 팀이 전체 가중치를 직접 고치는 대신 어댑터처럼 가볍게 붙이는 방식을 택합니다. LoRA가 대표적인 선택지인데요. 원래 가중치는 얼려두고, 그 옆에 작은 두 행렬을 붙여서 변화량만 학습하는 방식입니다.
이 방식이 편한 이유는 실험의 단위가 작아지기 때문입니다. 전체 체크포인트를 매번 저장하지 않아도 되고, 작업마다 다른 어댑터만 갈아 끼우면 되며, 서빙할 때도 기본 모델 위에 필요한 어댑터를 얹는 형태로 운영할 수 있습니다. 그런데 막상 파인튜닝을 시작하면 새로운 고민이 바로 따라옵니다. 옆에 붙이는 그 작은 행렬을 얼마나 넓게 잡아야 하느냐는 것이죠. 이 넓이가 바로 랭크입니다. 랭크 2는 아주 얇은 통로를, 랭크 32는 그보다 훨씬 넓은 통로를 열어주는 셈인데, 넓다고 무조건 좋은지는 현장에서도 의견이 갈립니다.
여기서 재미있는 질문이 생깁니다. 통로를 넓히면 모델이 더 많은 변화를 기억할 수 있을까요. 이론적으로는 그렇습니다. 표현할 수 있는 변화의 폭이 넓어지니까요. 하지만 학습 예산이 고정되어 있다면 이야기가 달라집니다. 넓은 통로는 더 많은 파라미터를 의미하고, 더 많은 파라미터는 같은 스텝 안에서 채워야 할 빈칸이 더 많아진다는 뜻이기도 합니다. 그래서 랭크를 올리는 일은 단순한 성능 향상이 아니라 예산을 어디에 쓰겠다는 배분에 가깝습니다. 이 배분의 감각을 숫자로 확인한 것이 이번 연구의 출발점입니다.
랭크는 결국 어디까지 기억하겠다는 약속이다
LoRA를 처음 접하면 수식부터 떠올리기 쉽지만, 저는 그림으로 이해하는 편이 더 오래 남았습니다. 거대한 얼어 있는 가중치 옆에 두 개의 작은 행렬 A와 B가 붙어 있고, 입력은 이 좁은 병목을 거쳐서 원래 가중치의 출력에 더해집니다. 랭크는 이 병목의 너비입니다. 랭크 2라면 정보가 두 줄기 길로만 통과하고, 랭크 32라면 서른두 줄기로 통과합니다. 길의 수가 곧 모델이 한 번에 기록할 수 있는 변화의 종류라고 보면 됩니다.
생각해보면 사람도 비슷하게 배웁니다. 시험 범위가 넓을 때 어떤 학생은 요점만 적은 단권화 노트를 만들고, 어떤 학생은 두꺼운 정리 노트를 만듭니다. 두꺼운 노트가 항상 좋은 것은 아니죠. 시간이 정해져 있다면 얇지만 자주 보는 노트가 더 남을 때도 있습니다. LoRA의 랭크도 이와 비슷합니다. 넓은 랭크는 더 많은 차이를 담을 수 있는 그릇이지만, 그 그릇을 주어진 스텝 안에 제대로 채우지 못하면 빈 공간만 늘어납니다. 반면 좁은 랭크는 담을 수 있는 양은 적지만 정해진 시간 안에 채우기는 쉽습니다.
저는 이 숫자보다 그 뒤의 구조가 더 중요하다고 봅니다. 랭크는 단순한 크기 조절 손잡이가 아니라 학습이 향하는 방향을 정하는 약속에 가깝기 때문입니다. 작은 랭크는 모델에게 말합니다. 이번 파인튜닝에서는 정말 필요한 방향 몇 개만 골라서 움직이라고요. 큰 랭크는 더 많은 방향을 허락하지만, 그만큼 학습 신호가 여러 갈래로 흩어질 여지도 커집니다. 그렇다면 고정된 예산 아래에서는 어느 쪽이 유리할까요. 이 질문에 답하려면 같은 조건에서 직접 굴려보는 수밖에 없습니다.
크다고 좋은 게 아니라면 무엇이 달라지는 걸까
주변에서 흔히 듣는 오해를 하나 풀어둘 필요가 있습니다. 랭크가 크면 모델이 더 똑똑해진다는 생각이죠. 저는 여기서 조금 의심했습니다. LoRA 랭크는 모델 전체의 지능을 키우는 장치가 아니라, 파인튜닝 단계에서 허용하는 변화량의 폭을 정하는 장치에 가깝기 때문입니다. 기본 모델이 이미 알고 있는 얼굴, 사물, 질감, 구도 같은 지식은 그대로 있고, 이번 작업에 맞게 덧붙이는 조정분의 크기만 달라집니다. 그래서 랭크를 올린다고 매번 이미지가 극적으로 좋아지지는 않습니다.
또 하나 헷갈리는 지점은 파라미터 수와 품질 사이의 관계입니다. 일반적으로 파라미터가 늘면 표현력이 늘어난다고 배우지만, 파인튜닝처럼 데이터와 스텝이 묶여 있는 상황에서는 그 관계가 곧바로 성립하지 않습니다. 그릇이 커졌다고 음식이 저절로 생기지 않는 것과 같습니다. 재료를 더 사 오거나 조리 시간을 늘리지 않으면 큰 냄비도 소용이 없죠. 이 논문이 고정된 최적화 설정을 강조하는 이유도 여기에 있습니다. 다른 양념은 다 똑같이 두고 그릇의 크기만 바꿨을 때 손님이 느끼는 맛이 달라지는지 보겠다는 것입니다.
반면 작은 랭크를 얕보는 것도 경계해야 합니다. 랭크 2나 4라고 하면 왠지 부족해 보이지만, diffusion 파인튜닝에서 필요한 조정이 생각보다 저차원일 수 있습니다. 색감의 미세한 이동, 특정 주제에 대한 적응, 노이즈 제거 궤적의 작은 보정 같은 변화는 넓은 행렬 없이도 충분히 표현될 여지가 있습니다. 물론 모든 작업이 그렇다는 뜻은 아닙니다. 다만 이번 실험이 보여주는 것은 적어도 CIFAR-10 규모의 통제된 조건에서는 적당한 랭크가 품질과 비용의 균형점에 가깝다는 것입니다. 이 차이는 생각보다 중요합니다. 기본값 하나가 바뀌면 이후의 모든 실험 비용이 함께 바뀌니까요.
실험을 묶어두는 방식이 결과를 만든다
이 연구의 설계는 겉으로 보면 단순합니다. CIFAR-10에서 DDPM U-Net을 가져오고, LoRA 랭크를 2, 4, 8, 16, 32로 바꿔가며 학습한 뒤 생성 품질을 비교합니다. 그런데 단순해 보이는 설계일수록 어디를 묶어두었는지가 결과를 좌우합니다. 저자들은 최적화 설정을 고정했습니다. 학습률 스케줄이나 옵티마이저 같은 주변 변수를 랭크마다 다르게 만지지 않은 것이죠. 이렇게 해야 랭크가 커졌을 때의 차이가 요령의 차이가 아니라 구조의 차이로 남습니다. 저는 이런 종류의 고정이 논문의 신뢰도를 만든다고 봅니다.
평가 방식도 눈여겨볼 대목입니다. 연구는 재현 가능한 로컬 폴더 기반 pytorch-fid 절차로 FID를 계산합니다. 생성된 이미지와 실제 이미지를 폴더 단위로 모아 같은 기준으로 비교하는 흐름인데요. FID라는 지표 자체가 완벽하지는 않습니다. 작은 데이터셋에서는 수치가 크게 나올 수 있고, 사람이 느끼는 디테일과 어긋날 때도 있습니다. 그럼에도 같은 파이프라인으로 모든 랭크를 재면 상대적인 순서는 의미를 가집니다. 누가 더 좋은지가 아니라, 랭크를 바꿨을 때 곡선이 어떻게 움직이는지가 보이기 때문입니다.
저희가 새로운 AI 아키텍처를 볼 때도 benchmark 숫자만 보지는 않습니다. 실제로 무엇이 바뀌었고, 그 변화가 시스템에서 어떤 비용 구조를 만드는지를 함께 봅니다. 이 논문도 같은 태도로 읽어야 합니다. FID 숫자 하나만 떼어 보면 124라는 값이 좋아 보이는지 나빠 보이는지 감이 잘 안 옵니다. 하지만 같은 실험 묶음 안에서 랭크 4와 랭크 32의 숫자를 나란히 놓고, 거기에 학습 가능한 파라미터 수와 실행 시간, GPU 메모리까지 함께 놓으면 이야기가 달라집니다. 품질의 차이와 비용의 차이가 동시에 보이는 것이죠. 그래서 다음 절부터는 숫자를 하나씩 펼쳐보겠습니다.
4와 8 사이에서 멈칫하게 되는 이유
이제 숫자 이야기를 해보겠습니다. 보고된 DDPM 실험에서 가장 좋은 FID는 랭크 4의 124.1380이었습니다. 그다음이 랭크 8의 124.2136이었는데요. 둘 사이의 간격은 0.1도 채 되지 않습니다. 용량을 꽤 늘렸는데 품질 지표는 사실상 제자리걸음을 한 셈입니다. 저는 이 대목에서 멈칫했습니다. 평소의 감각대로라면 랭크를 두 배로 올렸을 때 뭔가 달라져야 할 것 같은데, 측정치는 그렇지 않다고 말하고 있었기 때문입니다.
이 간격은 어떻게 읽어야 할까요. FID는 낮을수록 좋은 지표이지만, 소수점 아래의 미세한 차이를 두고 우열을 가리는 일에는 조심해야 합니다. 생성 샘플의 무작위성이나 평가 배치의 흔들림만으로도 작은 차이는 얼마든지 생길 수 있습니다. 그래서 저는 4가 8을 눌렀다는 식의 순위 싸움보다 곡선의 모양에 주목했습니다. 낮은 랭크에서 적당한 랭크로 올라갈 때는 품질이 자리를 잡고, 그 이후로는 더 넓혀도 곡선이 거의 평평해진다는 모양 말이죠. 랭크 16과 32가 제한적인 이득에 그쳤다는 서술도 같은 맥락에서 읽힙니다.
여기서 실무적인 감각이 생깁니다. 만약 랭크 8이 랭크 4와 거의 같은 품질을 내는데 더 많은 학습 파라미터와 더 긴 실행 시간, 더 큰 메모리를 요구한다면, 다음 실험의 기본값은 어디에 두는 편이 합리적일까요. 답은 분명해 보입니다. 품질이 동률이라면 비용이 적은 쪽이 이깁니다. 물론 특정한 주제 적응이나 고해상도 작업에서는 더 넓은 랭크가 필요할 수 있습니다. 하지만 적어도 이번처럼 예산이 묶인 조건에서는 적당한 랭크가 효율의 중심에 섭니다. 개인적으로 인상 깊었던 점은, 가장 작은 랭크가 아니라 그다음 구간의 랭크에서 균형이 잡혔다는 것입니다. 너무 좁아도, 너무 넓어도 아닌 그 사이의 어딘가가 말이죠.
예산을 늘려도 이야기가 바뀌지 않을 때
이런 결과를 보면 당연히 반론이 생깁니다. 학습을 조금만 더 길게 하면 큰 랭크가 따라잡지 않을까요. 저자들도 그 질문을 피해 가지 않았습니다. 그래서 DDPM에서 20에폭까지 이어지는 확장 예산 실험을 랭크 4, 8, 16으로 다시 돌렸습니다. 스텝을 더 주면 넓은 그릇도 채워질 시간을 벌 수 있으니까요. 그런데 보고된 흐름은 크게 바뀌지 않았습니다. 적당한 랭크의 효율이 예산을 늘린 뒤에도 유지되는 모양이었습니다. 이 대목은 길게 봐야 합니다. 한 번의 예산에서 나온 우연이 아니라 예산을 바꿔도 살아남는 경향에 가깝기 때문입니다.
구조를 바꾸면 어떨까요. U-Net에서만 통하는 이야기일 수도 있잖아요. 연구는 작은 DiT 백본에서도 10에폭 조건으로 랭크 4, 8, 16을 비교했습니다. 트랜스포머 기반 diffusion 구조에서도 비슷한 흐름이 이어졌다는 것인데요. 저는 이 확장이 마음에 들었습니다. 하나의 구조에서만 반짝이는 결과는 실무에서 쓰기 어렵지만, 구조를 가로질러 반복되는 경향은 기본값으로 삼을 만하기 때문입니다. 물론 Tiny 규모의 확인이 초대형 모델까지 그대로 이어진다고 단정할 수는 없습니다. 다만 방향은 분명합니다. 랭크를 무작정 넓히기 전에 적당한 구간부터 시작하라는 것이죠.
여기서는 조금 조심해서 읽을 필요가 있습니다. 확장 실험이 모든 경우의 수를 닫아주는 것은 아닙니다. 데이터셋이 바뀌거나 해상도가 올라가거나, 주제 적응의 폭이 넓어지면 랭크의 필요량도 달라질 수 있습니다. 그럼에도 이 검증이 주는 메시지는 또렷합니다. 예산을 늘리고 뼈대를 바꿔도 작은 쪽에 가까운 적당한 랭크가 여전히 경쟁력을 유지했다는 것입니다. 만약 큰 랭크가 정말 필요했다면 예산을 늘렸을 때 역전극이 나왔어야 합니다. 그런 역전이 보이지 않았다는 점이 오히려 이 논문의 말걸기를 단단하게 만듭니다.
숫자와 함께 비용을 읽어야 하는 이유
품질 숫자만 보면 랭크 4와 랭크 8은 거의 쌍둥이처럼 보입니다. 하지만 시스템 관점에서 보면 다음 질문이 바로 생깁니다. 쌍둥이라면 키우는 데 든 돈도 같았을까요. 연구가 FID와 함께 학습 가능한 파라미터 수, 실행 시간, GPU 메모리를 같이 보고한 이유가 여기에 있습니다. 랭크가 커지면 어댑터 행렬이 커지고, 옵티마이저가 들고 있어야 하는 상태값도 함께 불어나며, 한 스텝을 굴리는 데 필요한 연산과 메모리 압박도 커집니다. 품질이 같은데 비용이 다르다면 선택은 자명해집니다.
운영의 아침을 떠올려보시면 감이 옵니다. 밤사이에 파인튜닝 잡을 여러 개 돌려야 하는 팀에게 랭크 32의 기본값은 꽤 부담스럽습니다. 배치 크기를 줄여야 할 수도 있고, 체크포인트를 들고 옮기는 시간이 길어지며, 동시에 돌릴 수 있는 실험 수도 줄어듭니다. 반면 적당한 랭크는 같은 GPU에서도 숨통이 트입니다. 실험을 더 자주 돌릴 수 있고, 실패한 시도의 비용도 작아집니다. 저는 그래서 이 논문의 숫자들을 연구실 점수 이상으로 평가했습니다. 작은 선택 하나가 팀의 실험 속도를 바꾸기 때문입니다.
좋은 건 알겠는데, 이걸 실제로 어떻게 서빙할까요. 이 질문에도 랭크는 답을 줍니다. 작은 어댑터는 저장과 로딩이 가볍고, 여러 작업을 오가는 멀티 어댑터 운영에서도 부담이 적습니다. 물론 병합 이후의 추론 비용은 랭크와 크게 무관해질 수 있지만, 학습과 보관과 교체라는 전체 파이프라인으로 보면 작은 쪽이 분명히 유리합니다. 그래서 품질이 동률일 때의 판단 기준은 단순해집니다. 같은 그림이라면 더 가볍게 그리는 쪽을 고르는 것이죠. 이 대목에서 저는 비용 지표를 함께 내놓은 저자들의 선택이 고마웠습니다. 숫자 하나가 아니라 장부를 통째로 보여줬기 때문입니다.
작은 랭크를 얕보면 놓치는 것들
이쯤 되면 반대쪽 오해도 짚어야 합니다. 작은 랭크가 효율적이라는 말이 모든 파인튜닝을 랭크 4로 하라는 뜻은 아닙니다. 작업의 성격에 따라 필요한 변화의 폭이 다르기 때문입니다. CIFAR-10 규모의 통제된 적응과 고해상도 인물, 복잡한 스타일, 여러 개념을 한 번에 가르치는 작업은 요구하는 조정량이 다를 수밖에 없습니다. 그렇다면 이 논문의 메시지를 한 줄 요약으로 줄이는 일은 위험합니다. 적당한 랭크가 좋다는 말이 만능 처방이 되는 순간, 다음 작업에서 발목을 잡힐 수 있거든요.
제가 앞으로 보고 싶은 것은 작업 난이도에 따른 랭크 곡선의 이동입니다. 쉬운 적응에서는 곡선이 일찍 평평해지고, 어려운 적응에서는 평평해지는 지점이 오른쪽으로 밀릴 가능성이 있습니다. 학습 예산과의 상호작용도 궁금합니다. 예산이 아주 넉넉해지면 큰 랭크가 뒤늦게 치고 올라오는 구간이 있을까요. 이번 연구는 고정된 예산 아래에서의 실용적인 기본값을 말하고 있지, 랭크의 상한을 증명한 것은 아닙니다. 이 구분을 놓치면 논문이 하지 않은 말까지 끌어다 쓰게 됩니다.
그럼에도 현장의 출발점으로 삼기에는 충분합니다. 랭크 4나 8 같은 구간부터 시작해서 품질 곡선을 직접 그려보고, 부족하다고 느껴질 때만 넓혀가는 방식이죠. 이렇게 하면 불필요하게 큰 어댑터로 예산을 태우는 일을 줄일 수 있습니다. 반대로 처음부터 32로 시작하면 작은 랭크로도 충분했는지를 영원히 모른 채 넘어가게 됩니다. 실험 설계의 순서가 비용을 정하는 셈입니다. 저는 이 순서를 바꾸는 것만으로도 많은 팀의 GPU 청구서가 달라질 거라고 봅니다.
그래서 다음 파인튜닝에서는 무엇을 고를까
정리할 시간이 왔습니다. 그런데 숫자만 다시 늘어놓는 식의 마무리는 피하고 싶습니다. 이 논문이 남기는 감각은 순위표가 아니라 습관에 가깝기 때문입니다. 고정된 예산에서는 랭크를 크게 잡는 것부터 시작하지 말고, 작은 쪽의 적당한 구간에서 기준점을 먼저 만들라는 것입니다. CIFAR-10의 DDPM 실험에서는 그 기준점이 랭크 4 근처였고, 랭크 8은 거의 같은 자리에 있었으며, 16과 32는 비용 대비 얻는 것이 적었습니다. 확장된 예산과 작은 DiT에서도 흐름이 이어졌다는 점이 이 습관에 힘을 보탭니다.
실제 시스템 관점에서 보면 다음 질문이 바로 생깁니다. 우리 작업의 곡선은 어디에서 평평해질까요. 이 질문에 답하는 가장 싼 방법은 작은 랭크 두어 개를 같은 조건으로 빠르게 돌려보는 것입니다. 조건을 묶어두는 일이 귀찮게 느껴질 수 있지만, 그 귀찮음이 나중의 확신을 만듭니다. 학습률이나 스텝 같은 주변 변수를 랭크마다 다르게 만지면 곡선의 의미를 잃어버리니까요. 같은 묶음, 같은 자, 같은 평가 파이프라인이라는 원칙만 지켜도 자신의 데이터에서 통하는 기본값을 찾을 수 있습니다.
그렇다면 사람의 역할은 무엇일까요. 저는 자동화된 탐색보다 먼저 오는 것이 판단의 순서라고 봅니다. 무엇을 적응시킬지, 어떤 변화를 기대하는지, 예산 안에서 어디까지 확인할지를 정하는 일이죠. 랭크는 그 판단을 숫자로 옮기는 손잡이일 뿐입니다. 이번 연구는 그 손잡이를 어디에 두는 편이 현명한지 보여줬습니다. 다음 파인튜닝을 시작할 때, 저는 랭크 4 근처에서 먼저 출발할 것 같습니다. 그리고 곡선이 말해주는 대로 한 칸씩 움직이겠습니다. 여러분의 다음 실행 명령어에는 어떤 숫자가 들어가나요.
참고 자료
- Understanding LoRA Rank Trade-offs in Diffusion Model Fine-Tuning · arxiv.org
리뷰 원문