
마지막 수업은 양자화와 LoRa에 대해 배웠다.
성능 좋은 LLM 모델을 로드해서 학습시킬려면 하드웨어 쪽으로 천문학적인 비용이 드는데,
이를 경량화하는 기법들이 양자화와 LoRa이다.
LLM 모델의 파라미터들이 있는데 이는 보통 정수나 소수 값으로 이루어져있다.
그래서 이를 표현하기 위해 0과 1로 이루어진 비트 여러개를 사용하는데
개발 단계에서는 32bit으로 표현을 많이 한다.

양자화는 이런 비트 수를 줄여나가면서 메모리 사용량을 줄이는 방식이다.
16비트, 8비트, 4비트 표현으로 바꾸면 메모리 사용량이 절반 이하로 절약할 수 있다.
그러나 비트 수를 줄일수록 원래 값과 오차가 증가할 수 있어, 정확도와 하드웨어 간의 균형을 잘 맞추는 것이 중요해 보인다.

LoRA는 LLM의 파라미터 전체를 업데이트하는 대신, 특정 레이어의 가중치에 해당하는 행렬에 작은 행렬을 추가로 학습하는 방법이다.
행렬곱의 특징을 사용했는데, 특정 레이어에서 작은 행렬을 곱해서 계산해야할 파라미터 수를 확 줄이는 것이다.


W : 원본의 가중치 (d * k)
output = W * x
원래(왼쪽 파란색 사각형 이미지)는 큰 가중치 행렬 W에 입력인 X 행렬을 곱해서 학습하는 느낌이라면
output = (W + A*B) * x
W : 미리 학습된 원본 가중치 (d×k)
A: d×r 행렬 (r ≪ d,k)
B : r * k 행렬
LoRa를 사용하면 쪼그만 행렬 A를 한번 곱해줘서 크기를 확 줄이고, 다시 B를 곱해서 파라미터를 원래 크기를 맞춰줘서 메모리와 학습 시간을 절약할 수 있다.
Colab Enterprise
머신 유형: g2-standard-4
GPU 유형: NVIDIA_L4 x 1
지역: asia-northeast3
시스템 RAM : 15.6 GB
GPU RAM : 22.5 GB
facebook/opt-350m
sahil2801/CodeAlpaca-20k
task_type=TaskType.CAUSAL_LM,
inference_mode=False,
r=r_value,
lora_dropout=0.1,
lora_alpha=r_value * 4,
target_modules=["q_proj", "k_proj", "v_proj"]
https://api.wandb.ai/links/soyeon-bubbles/y5q8y7ko
https://api.wandb.ai/links/soyeon-bubbles/lkaxivz4
| rank (r) | 평균 GPU Memory Allocated (%) |
|---|---|
| 256 | 약 20.6% |
| 128 | 약 19.9% |
| 8 | 약 18.8% |
https://api.wandb.ai/links/soyeon-bubbles/0qfyanlj
| rank r | 평균 메모리 (MB) | 표준편차 (MB) | 최소 (MB) | 최대 (MB) |
|---|---|---|---|---|
| 8 | 1898 | 58.7 | 1874 | 2402 |
| 128 | 1917 | 17.4 | 1885 | 1932 |
| 256 | 1964 | 47.0 | 1879 | 2026 |
https://api.wandb.ai/links/soyeon-bubbles/grpmpy33
이렇게 체인이 한 번 invoke 되는 과정을 추적해줘서, 레이턴시, 토큰, 비용, 참조한 문서들을 알 수 있다.


환경변수를 설정하고 chain을 생성하는 함수 위에 @traceable() 데코레이터를 쓰면 끝
@traceable(run_type="llm")
def get_conversation_chain(retriever, open_ai_key, model):
llm = ChatOpenAI(model=model, api_key=open_ai_key, temperature=0)
conversation_chain = ConversationalRetrievalChain.from_llm(
llm=llm,
chain_type="stuff",
retriever=retriever,
memory=ConversationBufferMemory(memory_key="chat_history", return_messages=True, output_key="answer"),
get_chat_history=lambda h: h,
return_source_documents=True,
verbose=True,
combine_docs_chain_kwargs={"prompt": PromptTemplate.from_template(template)}
)
return conversation_chain
https://github.com/langchain-ai/openevals
langchain에서 만든 LLM-as-Judge 라이브러리
def correctness_evaluator(inputs: dict, outputs: dict, reference_outputs: dict):
evaluator = create_llm_as_judge(
prompt=CORRECTNESS_PROMPT,
model="openai:o3-mini",
feedback_key="correctness",
)
eval_result = evaluator(
inputs=inputs,
outputs=outputs,
reference_outputs=reference_outputs
)
return eval_result
experiment_results = client.evaluate(
target,
data=dataset_name,
evaluators=[
correctness_evaluator
],
experiment_prefix=f"{model_id} + ensemble retriever + llm as judge",
max_concurrency=2,
)
| Experiment | Bleu | Correctness | Helpfulness | Meteor | Rouge | tokens | P50 Latency(s) |
|---|---|---|---|---|---|---|---|
| gpt-4.1-nano + multi-query | 0.15 | 0.40 | 0.60 | 0.37 | 0.19 | 55,628 | 9.497 |
| gpt-4o-mini + multi-query | 0.18 | 0.60 | 0.95 | 0.45 | 0.24 | 47,226 | 12.083 |
| gpt-4.1-nano + ensemble | 0.14 | 0.45 | 0.47 | 0.36 | 0.17 | 39,132 | 8.626 |
| gpt-4o-mini + ensemble | 0.15 | 0.60 | 0.85 | 0.42 | 0.21 | 37,905 | 9.956 |
| gpt-4.1-nano + dense | 0.15 | 0.45 | 0.85 | 0.37 | 0.19 | 30,864 | 7.939 |
| gpt-4o-mini + dense | 0.18 | 0.50 | 0.90 | 0.46 | 0.24 | 30,428 | 9.297 |
| gpt-4o | 0.12 | 0.20 | 0.80 | 0.31 | 0.16 | 7,239 | 6.076 |
| gpt-4.1-nano | 0.14 | 0.20 | 0.90 | 0.31 | 0.17 | 6,559 | 4.843 |
| gpt-4o-mini | 0.12 | 0.30 | 0.90 | 0.33 | 0.16 | 7,110 | 7.896 |
1위: gpt-4o-mini + multi-query retriever
2~3위: dense vs ensemble (gpt-4o-mini 계열)
4위: gpt-4.1-nano + dense retriever
중하위권 (5~7위): 기본 모델 vs gpt-4.1-nano + multi-query
꼴찌권: gpt-4o & gpt-4.1-nano + ensemble
결론:
드디어 이 지옥캠프가 끝이 났다...
글 쓴 날짜 기준 어제 수료식을 진행했었는데
다음 글에 수료식 및 항해 플러스 AI 코스 솔직 후기에 대해 작성해보겠다.
항해 플러스에서 현재 백엔드, 프론트엔드 코스 수강생을 모집 중입니다!
추천 코드를 입력하시면 등록금 20만원을 할인받을 수 있어요. (커리어 코칭 제외)
관심 있으신 분들은 아래 링크에서 확인해보세요
추천 코드: 9T8Rkv
https://hanghae99.spartacodingclub.kr/hhplus-hub