양자화, 모델 크기와 VRAM의 관계

quantization

ComfyUI를 통해 이미지 생성을 하다보면 모델 로드부터 실패하는 경우가 있다. 대부분 VRAM이 모자른 케이스이다. 모델을 사용할 때 VRAM이 얼마나 필요한지 알아야 한다. 내 GPU가 사용가능한 모델을 찾는것이 우선인 것이다.

모델 로드에 필요한 VRAM 계산


다음과 같은 모델이 있다.

wan2.2_high_noise_14B_fp16
Bash

다른 이름은 중요하지 않고 파라메터 갯수와 메모리 단위가 중요하다. 위 모델은 파라메터 갯수가 14Billion이다. 140억개이다. 그리고 fp16은 16비트 float을 뜻한다. 즉 파라메터 하나당 2바이트를 사용하는 것이다. 따라서 이 모델을 로드하기 위해 필요한 VRAM은 다음과 같다.

14B * 2byte = 28gb
C

따라서 28gb 미만의 VRAM을 가진 GPU에서는 이 모델을 로드할 수 없다. 오픈소스로 공개된 라마의 모델을 보자. 라마 3.1 모델중에 405B의 파라메터를 가진 모델이 있다. LLM의 특성상 파라메터의 갯수가 절대적으로 성능과 비례할 수 밖에 없다. 405B개의 파라메터를 fp16로 올리는 경우 다음과 같은 VRAM이 요구된다.

405B * 2byte = 810gb
C

fp4로 양자화를 하더라도 405gb의 VRAM이 요구된다. 일반인들이 LLM 모델이 공개되더라도 로컬에서 사용할 수 없는 이유이다.

양자화 모델


낮은 하드웨어에서 사용하기 위해 모델의 파라메터 갯수를 줄이자니 AI의 품질이 떨어진다. 그래서 파라메터의 갯수는 그대로 두고 각 파라메터가 사용하는 메모리 단위를 줄인다. 이것이 양자화이다. 정밀도를 낮춘다고도 한다.

// 16fp 정밀도에서의 파라메터 값
fp16 parameterValue = 10.0101003

// 8fp 정밀도에서의 파라메터 값
fp8 parameterValue = 10.0101
C

위와 같이 정밀도가 높을수록 각 파라메터는 좀 더 정교한 값을 가지고 메모리에 올라가게 되고 정밀도가 낮으면 오차값이 좀 더 큰 값을 가지고 메모리에 올라가게 된다. double과 float의 표현 가능한 소수점 이하 자릿수의 차이를 생각해보면 된다.

이런 양자화를 거친 모델은 필요한 VRAM이 확 줄어들게 된다.
동일한 14B개의 파라메터를 가진 모델이 fP8로 스케일링된 모델의 경우는 14gb로 필요 VRAM이 낮아진다. 이것은 4090( 24gb )으로도 사용이 불가능한 모델이 4080( 16gb )에서 사용이 가능한 모델로 바뀌는 것이다.

LLM과는 달리 이미지나 비디오와 같은 소스를 생성할 때는 파라미터의 정밀도가 낮아도 결과물에 영향이 전혀 없다고는 할 수 없지만 의도한 결과물과 완전 동떨어진 결과물이 나올정도로 퀄리티가 하락하지는 않는다. 따라서 멀티미디어 소스의 생성에는 양자화 모델을 사용하는것이 유리하다.

GPU에서의 지원


그렇다면 양자화만 하면 퀄리티는 떨어지더라도 모두 사용가능한가? 답은 아니오이다. GPU에 따라 지원하는 정밀도가 다르다. fp4의 경우 RTX50부터 지원된다. 즉, RTX40에서는 fp4로 양자화된 모델을 사용하더라도 지원하는 최소 단위가 fp8이므로 퀄리티만 낮아지고 사용하는 VRAM은 fp8모델과 동일하다.

즉, 4060과 같은 8gb VRAM 환경에서 fp4로 양자화된 14B 모델은 사용이 불가능하다. 동일한 8gb VRAM을 가진 5060에서는 사용이 가능하다. 필요 VRAM이 7gb이니까. 4060은 fp16이 최소단위 이므로 14gb가 필요하다.

0 답글

댓글을 남겨주세요

Want to join the discussion?
Feel free to contribute!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다