7.0. LoRA ๊ฐœ์„  ์‚ฌํ•ญ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

LoRA ๊ฐœ์„  ์‚ฌํ•ญ

Tip

LoRA๋Š” ์ด๋ฏธ ํ›ˆ๋ จ๋œ ๋ชจ๋ธ์„ ๋ฏธ์„ธ ์กฐ์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ๋งŽ์ด ์ค„์ž…๋‹ˆ๋‹ค.

LoRA๋Š” ๋ชจ๋ธ์˜ ์ž‘์€ ๋ถ€๋ถ„๋งŒ ๋ณ€๊ฒฝํ•˜์—ฌ ๋Œ€ํ˜• ๋ชจ๋ธ์„ ํšจ์œจ์ ์œผ๋กœ ๋ฏธ์„ธ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ›ˆ๋ จํ•ด์•ผ ํ•  ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆ˜๋ฅผ ์ค„์—ฌ ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ณ„์‚ฐ ์ž์›์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ํ›ˆ๋ จ ๊ฐ€๋Šฅํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆ˜ ๊ฐ์†Œ: ๋ชจ๋ธ์˜ ์ „์ฒด ๊ฐ€์ค‘์น˜ ํ–‰๋ ฌ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋Œ€์‹ , LoRA๋Š” ๊ฐ€์ค‘์น˜ ํ–‰๋ ฌ์„ ๋‘ ๊ฐœ์˜ ๋” ์ž‘์€ ํ–‰๋ ฌ( A์™€ B๋ผ๊ณ  ํ•จ)๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ›ˆ๋ จ์ด ๋” ๋นจ๋ผ์ง€๊ณ  ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ ์–ด์ ธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  2. ์ด๋Š” ๋ ˆ์ด์–ด(ํ–‰๋ ฌ)์˜ ์ „์ฒด ๊ฐ€์ค‘์น˜ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋Œ€์‹ , ๋‘ ๊ฐœ์˜ ๋” ์ž‘์€ ํ–‰๋ ฌ์˜ ๊ณฑ์œผ๋กœ ๊ทผ์‚ฌํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ ์ค„์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค:\

  1. ์›๋ž˜ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜ ๋ณ€๊ฒฝ ์—†์Œ: LoRA๋Š” ์›๋ž˜ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋ฅผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ์ƒˆ๋กœ์šด ์ž‘์€ ํ–‰๋ ฌ(A์™€ B)๋งŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋ธ์˜ ์›๋ž˜ ์ง€์‹์ด ๋ณด์กด๋˜๋ฉฐ, ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. ํšจ์œจ์ ์ธ ์ž‘์—…๋ณ„ ๋ฏธ์„ธ ์กฐ์ •: ๋ชจ๋ธ์„ ์ƒˆ๋กœ์šด ์ž‘์—…์— ์ ์‘์‹œํ‚ค๊ณ ์ž ํ•  ๋•Œ, ๋‚˜๋จธ์ง€ ๋ชจ๋ธ์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์ž‘์€ LoRA ํ–‰๋ ฌ(A์™€ B)๋งŒ ํ›ˆ๋ จํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ „์ฒด ๋ชจ๋ธ์„ ์žฌํ›ˆ๋ จํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
  3. ์ €์žฅ ํšจ์œจ์„ฑ: ๋ฏธ์„ธ ์กฐ์ • ํ›„, ๊ฐ ์ž‘์—…์— ๋Œ€ํ•ด ์ „์ฒด ์ƒˆ๋กœ์šด ๋ชจ๋ธ์„ ์ €์žฅํ•˜๋Š” ๋Œ€์‹ , ์ „์ฒด ๋ชจ๋ธ์— ๋น„ํ•ด ๋งค์šฐ ์ž‘์€ LoRA ํ–‰๋ ฌ๋งŒ ์ €์žฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋งŽ์€ ์ž‘์—…์— ๋ชจ๋ธ์„ ์ ์‘์‹œํ‚ค๋Š” ๋ฐ ๋„ˆ๋ฌด ๋งŽ์€ ์ €์žฅ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

๋ฏธ์„ธ ์กฐ์ • ์ค‘ Linear ๋Œ€์‹  LoraLayers๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์—์„œ ์ œ์•ˆ๋œ ์ฝ”๋“œ๋Š” https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb์ž…๋‹ˆ๋‹ค:

import math

# Create the LoRA layer with the 2 matrices and the alpha
class LoRALayer(torch.nn.Module):
def __init__(self, in_dim, out_dim, rank, alpha):
super().__init__()
self.A = torch.nn.Parameter(torch.empty(in_dim, rank))
torch.nn.init.kaiming_uniform_(self.A, a=math.sqrt(5))  # similar to standard weight initialization
self.B = torch.nn.Parameter(torch.zeros(rank, out_dim))
self.alpha = alpha

def forward(self, x):
x = self.alpha * (x @ self.A @ self.B)
return x

# Combine it with the linear layer
class LinearWithLoRA(torch.nn.Module):
def __init__(self, linear, rank, alpha):
super().__init__()
self.linear = linear
self.lora = LoRALayer(
linear.in_features, linear.out_features, rank, alpha
)

def forward(self, x):
return self.linear(x) + self.lora(x)

# Replace linear layers with LoRA ones
def replace_linear_with_lora(model, rank, alpha):
for name, module in model.named_children():
if isinstance(module, torch.nn.Linear):
# Replace the Linear layer with LinearWithLoRA
setattr(model, name, LinearWithLoRA(module, rank, alpha))
else:
# Recursively apply the same function to child modules
replace_linear_with_lora(module, rank, alpha)

References

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ