최신 최첨단 파운데이션 거대 언어 모델(LLM)에는 수십억 개의 매개 변수가 있으며 수조 개의 입력 텍스트 토큰에 대해 사전 트레이닝됩니다. 종종 맞춤화할 필요 없이 다양한 사용 사례에서 놀라운 결과를 달성합니다. 그럼에도 불구하고 연구에 따르면 LLM을 고품질의 도메인별 데이터세트로 조정하면 다운스트림 작업에서 최고의 정확도를 달성할 수 있다고 합니다.
많은 경우 더 작은 맞춤형 모델이 더 큰 일반 LLM과 일치하거나 심지어 더 나은 성능을 제공하는 동시에 배포 비용을 크게 낮출 수 있습니다. 그러나 특정 다운스트림 작업을 위해 모델을 맞춤화하면 생성 및 배포 과정에서 상당한 문제가 발생할 수 있습니다.
가장 큰 LLM에 대한 완전한 파인 튜닝(즉, 모델의 모든 매개 변수 업데이트)은 전체 모델에서 학습하는 데 필요한 연산 인프라의 양으로 인해 어려울 수 있습니다. 배포 시 인프라 비용도 증가하며, 사용자는 메모리에 여러 개의 거대 모델을 호스팅하거나 전체 모델을 교체하면서 지연 시간이 증가하는 것을 용인해야 합니다. 낮은 순위 적응(LoRA)은 이러한 문제를 모두 완화하기 위한 기술입니다.
이 게시물에서는 LoRA에 대한 간략한 개요를 제공하고 LoRA 파인 튜닝된 모델을 배포하는 두 가지 방법을 설명합니다. 또한 여러 LoRA 어댑터의 이종 LoRA 배포를 지원하여 혼합 배치 추론 요청을 지원하는 접근 방식에 대해서도 논의합니다.
낮은 순위 적응
지난 몇 년 동안 LoRA는 전체 파인 튜닝에 비해 매우 적은 수의 추가 매개 변수를 조정하는 대중적인 기술로 떠올랐습니다. LoRA 어댑터라고 하는 이러한 추가 매개 변수는 네트워크의 밀집 계층에서 변경 사항의 낮은 순위 분해를 나타냅니다. LoRA는 LLM이 과도하게 매개 변수화되고 파인 튜닝 중에 새로 학습된 정보의 ‘내재적 순위’가 낮다는 관찰을 기반으로 작동합니다. 즉, 모델 매개 변수의 효과적인 변경은 매우 높은 차원의 매개 변수 공간 전체의 저차원 하위 공간으로 제한됩니다. LoRA를 사용하면 트레이닝 가능한 매개 변수의 수를 10,000배 줄일 수 있습니다.
그림 1은 LoRA의 다음과 같은 핵심 아이디어를 보여 줍니다.
- 사전 트레이닝된 모델의 가중치(W)는 맞춤화 중에 동결됩니다.
- W를 업데이트하는 대신 2개의 더 작은 트레이닝 가능 행렬 A와 B가 주입되어 작업별 정보를 학습합니다. 행렬 곱셈 B*A는 W와 차원이 동일한 행렬을 형성하므로 W(= W + BA)에 더할 수 있습니다.
A 및 B 행렬의 순위는 8, 16 등과 같은 작은 값입니다. 누적으로 볼 때 W보다 트레이닝 가능한 매개 변수가 훨씬 적으므로 컴퓨팅 및 메모리 효율적으로 맞춤화할 수 있습니다. 이 순위(r) 매개 변수는 일반적으로 트레이닝 시 맞춤화할 수 있습니다.
순위 크기와 연산 효율성 사이에는 절충이 존재합니다. 순위 값이 클수록 표현력이 향상되므로 모델이 다운스트림 작업과 관련된 더 많은 패턴을 캡처할 수 있습니다. 매우 높은 순위 값(예: 64)은 전체 지도 파인 튜닝에 가까운 학습 정보 용량에 접근합니다. 즉, 모델의 모든 매개 변수를 업데이트합니다. 단점은 순위가 클수록 메모리 및 컴퓨팅 요구 사항 측면에서 트레이닝 및 추론 비용이 더 높다는 것입니다. 실제로 LoRA 파인 튜닝은 8만큼 작은 순위 값으로 이미 매우 효과적이며 다양한 다운스트림 작업을 위한 좋은 출발점이 됩니다.
LoRA 조정 모델 배포
LoRA 파인 튜닝은 다음과 같은 방법으로 배포할 수 있습니다.
옵션 1: LoRA 어댑터 병합
추가 LoRA 가중치를 사전 트레이닝된 모델과 병합하여 이전 모델과 구조적으로 동등한 용도에 맞게 제작된 변형을 만들 수 있습니다. 이렇게 하면 어댑터를 별도로 관리하는 데 따른 추가적인 추론 지연 시간을 방지할 수 있습니다. 가중치 병합은 더 간단한 접근 방식이지만 유연성이 떨어집니다. 이 접근 방식의 단점은 전체 모델이 ‘맞춤형’이 되어 한 번에 하나의 작업, 즉 파인 튜닝된 작업만 처리할 수 있다는 것입니다. 이로 인해 배포 효율성을 위해 서로 다른 작업에 대한 입력을 일괄 처리하기가 어렵습니다. 이는 배포당 하나의 작업을 제공하려는 경우에만 권장됩니다.
옵션 2: LoRA 어댑터를 동적으로 로드
LoRA 어댑터(그림 1의 A와 B)는 기본 모델(W)과 별도로 유지됩니다. 추론에서 런타임은 제공을 위해 수신 요청에 해당하는 어댑터 가중치를 동적으로 로드합니다. 다양한 작업의 입력을 동시에 처리하고 일괄 처리하는 유연성을 지원하여 별도의 맞춤형 모델을 유지 관리할 필요 없이 가용 컴퓨팅을 최대한 활용할 수 있습니다.
일부 사용 사례에는 동일한 기본 모델에 대해 여러 개, 심지어 수백 또는 수천 개의 LoRA가 필요합니다. 이러한 경우에는 동적 LoRA 어댑터를 선택하는 것이 더 나은 방법입니다. 다음을 예로 들 수 있겠죠.
- 고객을 위해 맞춤형 모델을 제공하거나, 추천을 제공하거나, 고객의 특정 페르소나 또는 선호 사항에 맞게 조정하는 엔터프라이즈.
- 동일한 사용 사례의 다양한 LoRA 파인 튜닝을 비교하기 위한 A/B 테스트.
- 동일한 기본 파운데이션 모델을 기반으로 여러 다운스트림 사용 사례를 제공하는 엔터프라이즈. 예를 들어 IT 서비스 팀은 버그 요약, 티켓 라우팅 및 분류를 위해 멀티 LoRA 설정을 배포하고, 특정 문서 코퍼스에 대한 챗봇 및 지식 검색, 근본 원인 분석 등을 구현합니다.
NVIDIA NIM은 LoRA 어댑터의 이러한 동적 로딩을 지원하고 혼합 배치 요청 전송을 허용하는 최적화된 추론 마이크로서비스를 제공합니다. 다음 섹션에서는 NVIDIA의 접근 방식을 자세히 살펴봅니다.
NVIDIA NIM을 통한 이종 다중 LoRA 배포
NIM을 사용하면 각 추론 마이크로서비스가 단일 파운데이션 모델과 연결됩니다. 이 모델은 연관된 낮은 순위 어댑터의 형태로 원하는 수의 ‘맞춤화’를 가질 수 있습니다.
- NVIDIA NeMo 프레임워크 또는 Hugging Face PEFT 라이브러리를 사용하여 트레이닝된 어댑터는 어댑터 스토어에 배치되고 고유한 이름이 부여됩니다.
- NIM에 요청할 때 클라이언트는 LoRA 모델 이름을 포함하여 특정 맞춤화를 원한다고 지정할 수 있습니다.
- NIM이 일부 맞춤형 모델에 대한 요청을 받으면 어댑터 스토어에서 관련 어댑터를 멀티 티어 캐시로 풀링합니다. 최근에 사용된 어댑터에 따라 일부 어댑터는 GPU 메모리에 상주하고 일부는 호스트 메모리에 상주합니다.
- 실행 중에 NIM은 파운데이션 모델과 여러 개의 서로 다른 낮은 순위의 어댑터를 통해 동시에 데이터가 흐르도록 하는 특수 GPU 커널을 실행합니다. 이를 통해 여러 맞춤형 모델에 대한 요청에 동시에 응답할 수 있습니다.
혼합된 요청 배치 처리
한 배치의 요청은 서로 다른 작업을 지원하기 위해 서로 다른 LoRA 어댑터를 사용할 수 있습니다. 따라서 하나의 기존 일반 행렬 곱셈(GEMM)을 사용하여 모든 요청을 함께 계산할 수는 없습니다. 하나씩 순차적으로 컴퓨팅하면 상당한 추가 오버헤드가 발생합니다. 이 문제를 해결하기 위해 NVIDIA CUTLASS를 사용하여 배치된 이종 요청 처리를 단일 커널로 융합하는 배치 GEMM을 구현했습니다. 이는 GPU 활용률과 성능을 개선합니다.
또한 배치된 GEMM의 GPU 사용률이 각 어댑터의 첫 번째 행렬 구성 요소에 대해 충분히 높지 않다는 것을 발견했습니다. 이 첫 번째 행렬은 입력 차원이 매우 크고 출력 차원이 작기 때문입니다. 각 어댑터에는 그림 1에서 볼 수 있듯이 A(dxr 모양) 및 B(rxd 모양)라는 두 개의 행렬 구성 요소가 있습니다. d는 일반적으로 LoRA 순위 r보다 훨씬 크므로 splitK 메서드를 적용했습니다. GEMM을 더 많은 스트리밍 멀티프로세서(SM)에서 여러 타일로 분할하여 GPU 사용률을 개선하고, splitK 배치 GEMM 후 추가 감소 커널을 사용하여 부분 결과를 줄였습니다.
성능 벤치마킹 모범 사례
이러한 다중 LoRA 배포의 지연 시간 및 처리량 성능을 평가하는 것은 쉬운 일이 아닙니다. 이 섹션에서는 LLM LoRA 추론 프레임워크의 성능을 벤치마킹할 때 일반적으로 살펴볼 가치가 있는 몇 가지 주요 고려 사항을 논의합니다.
- 기본 모델: Llama 3 8B 및 Llama 3 70B와 같은 소형 및 대형 모델 모두 LoRA 파인 튜닝 및 추론을 위한 기본 모델로 사용할 수 있습니다. 더 작은 모델은 많은 작업, 특히 텍스트 분류와 같은 기존의 비생성적 NLP 작업에서 뛰어난 반면 더 큰 모델은 복잡한 추론 작업에서 탁월합니다. LoRA의 장점 중 하나는 대형 70B 모델도 FP16을 사용하는 단일 NVIDIA DGX H100 또는 A100 노드 또는 4비트 양자화를 사용하는 단일 NVIDIA H100 또는 NVIDIA A100 GPU에서도 조정할 수 있다는 것입니다.
- 어댑터: 실제로 최종 사용자의 관점에서는 유연성을 실험하고 최고의 정확도를 제공하는 크기를 선택하는 것이 바람직합니다. 반면 시스템 운영자는 일정한 크기를 균일하게 적용하고자 할 수 있습니다. 균일한 LoRA가 더 나은 배치를 지원하여 성능을 향상하기 때문입니다. LoRA 순위에 대한 인기 있는 선택은 8/16/32/64입니다.
- 테스트 매개 변수: 벤치마킹을 위해 고려해야 할 몇 가지 다른 테스트 매개 변수는 다음과 같습니다.
- 출력 길이 제어: ignore_eos 매개 변수는 max_token_length 제한에 도달할 때까지 텍스트를 계속 생성하도록 추론 프레임워크에 지시합니다. 이를 통해 사용 사례 OSL(출력 시퀀스 길이) 사양이 충족됩니다. 이 매개 변수는 LLM 추론 프레임워크에서 점점 더 많은 지원을 받고 있으며 벤치마킹 설정을 크게 단순화합니다. 특히, ignore_eos를 사용하면 성능 프로파일링 목적으로 “실제” 작업에 대해 트레이닝할 필요가 없습니다.
- 시스템 부하: 동시성(동시 사용자 수)은 일반적으로 시스템에 부하를 가하는 데 사용됩니다. 이는 실제 사용 사례를 반영하는 동시에 시스템이 효과적으로 동시에 제공할 수 있는 최대 ‘배치 크기’도 고려해야 합니다. 하나의 GPU에서 실행되는 8B 모델의 경우 현실적인 서버 로드를 위해 최대 250명의 동시 사용자를 고려합니다.
- 작업 유형: 생성 및 비생성 작업을 모두 고려해야 합니다. ISL(입력 시퀀스 길이)과 OSL이 다릅니다. [200, 2000] 토큰 범위의 ISL과 [1, 2000] 토큰 범위의 OSL은 텍스트 분류 및 요약에서 번역 및 코드 생성에 이르는 광범위한 LLM 애플리케이션을 반영합니다.
- 도구: 벤치마킹 도구는 LoRA 모델 호출을 지원해야 합니다. GenAI-Perf는 LoRA 지원으로 설계된 LLM 벤치마킹 도구입니다. 어댑터는 균일하게 무작위로 또는 라운드 로빈 방식으로 호출되거나 실제 사용 패턴을 반영하는 분포를 따라 호출됩니다. 예를 들어 20%의 어댑터가 요청의 80%를 차지합니다.
- 메트릭: LLM 도메인에서 주요 메트릭은 지연 시간입니다. TTFT(첫 토큰까지의 시간), ITL(토큰 간 지연 시간) 및 처리량, TPS(초당 총 시스템 토큰).
다른 보완 메트릭으로는 초당 총 요청 수 및 엔드 투 엔드 요청 지연 시간이 있습니다.
기본 모델(또는 병합된 LoRA 모델)을 제공하는 것에 비해 동적 LoRA(단일 LoRA, 동일한 순위의 여러 LoRA 또는 다른 순위의 여러 LoRA)를 추가하면 지연 시간과 처리량 모두에서 비용이 증가합니다. 이상적으로는 동적 LoRA가 제공하는 향상된 정확도와 유연성에 대한 대가로 이 비용이 합리적이어야 합니다.
앞으로 몇 주, 몇 달 안에 LoRA를 제공할 때 NIM의 성능 특성에 대해 더 많이 공유할 예정입니다.
다음 단계
파인 튜닝된 모델의 효율성 또는 정확도를 개선하기 위한 연구에서 LoRA에 대한 새롭고 흥미로운 개선 사항이 있습니다. NVIDIA의 미래 방향은 이를 NIM에 통합하는 것입니다.
Tied-LoRA
Tied-LoRA는 LoRA의 매개 변수 효율성을 높이는 NVIDIA 리서치의 새로운 기술입니다. LoRA에서는 LLM의 각 계층에 대한 가중치 업데이트를 근사화하는 작업별 낮은 순위 행렬이 추가됩니다. Tied-LoRA에서는 이러한 낮은 순위의 행렬이 다양한 계층 간에 공유(‘연결’)되어 트레이닝 가능한 매개 변수의 수가 더욱 줄어듭니다. 또한 이 기술을 사용하면 LoRA의 다양한 구성 요소(낮은 순위 행렬 및 확장 벡터)를 선택적으로 트레이닝하거나 동결할 수 있으므로 사용자가 성능 및 매개 변수 효율성의 절충점을 실험할 수 있습니다.
NVIDIA NIM을 통한 이 방법은 향후 릴리스에서 지원될 예정입니다.
DoRA
NVIDIA 리서치에서 개발한 또 다른 기술인 DoRA는 완전히 파인 튜닝된 모델과 LoRA 조정 간의 성능 격차를 해소합니다. 이는 사전 트레이닝된 가중치를 크기와 방향이라는 두 가지 구성 요소로 분해하여 달성합니다. 파인 튜닝을 위해 DoRA는 특히 방향 업데이트를 위해 LoRA를 사용하므로 트레이닝 가능한 매개 변수의 수를 효율적으로 최소화합니다. 이 접근 방식은 추가 추론 오버헤드를 발생시키지 않고 LoRA의 학습 역량과 트레이닝 안정성을 향상합니다. DoRA는 LLaMA, LLaVA, VL-BART와 같은 모델을 파인 튜닝하는 데 있어 상식적인 추론, 시각적 명령 조정, 이미지 및 비디오 텍스트 이해를 포함한 다양한 다운스트림 작업에서 LoRA를 지속적으로 능가합니다.
결론
NVIDIA NIM을 사용하면 여러 LoRA 어댑터를 원활하게 배포하고 확장할 수 있습니다. NIM은 이제 Meta Llama 3 8B 및 Llama 3 70B, 그리고 NVIDIA NeMo와 Hugging Face 모델 형식 모두의 LoRA 어댑터에 대한 지원을 시작으로 일반 공급됩니다. NVIDIA는 향후 릴리스에서 최첨단 커뮤니티 모델에 대한 지원을 추가하기 위해 최선을 다하고 있습니다.
NIM에서 다중 LoRA를 시작하려면 NVIDIA NeMo를 사용하여 Llama 3 모델을 조정하고, NIM으로 파인 튜닝된 어댑터를 배포하고, 혼합 추론 요청을 전송하는 LoRA에 대한 Jupyter 노트북 튜토리얼을 확인하세요. NIM에 대한 자세한 내용은 문서를 참조하세요.
관련 리소스
- GTC 세션: 공간 컴퓨팅을 위한 엔터프라이즈 스트리밍 플랫폼 – NVIDIA Omniverse 데이터를 몰입형 경험으로 혁신
- GTC 세션: NVIDIA Jetson Orin, Edge Impulse 및 Lumeo를 통해 엣지에서 AI 활용
- GTC 세션: Holoscan SDK를 사용하여 GPU 가속 스트리밍 AI 파이프라인 구축
- NGC 컨테이너: RIVA ASR NIM
- NGC 컨테이너: ESMFold용 NVIDIA NIM
- NGC 컨테이너: GenAI SD NIM