๋ก์ปฌ LLM, ๊ณผ์ฐ ์ ์ฉํ ๊น? ๊ฐ๋ฐ์๊ฐ ์ฒด๊ฐํ๋ โ์ง์ง ์ธ๋ชจโ์ ๊ธฐ์ค
๋ก์ปฌ LLM, ๊ณผ์ฐ ์ ์ฉํ ๊น? ๊ฐ๋ฐ์๊ฐ ์ฒด๊ฐํ๋ โ์ง์ง ์ธ๋ชจโ์ ๊ธฐ์ค ํด๋ผ์ฐ๋ LLM์ด ์ ์ ๊ฐ๋ ฅํด์ง์๋ก, ๋ฐ๋๋ก ๋ก์ปฌ LLM์ ๋ํ ์ง๋ฌธ...
๋ก์ปฌ LLM, ๊ณผ์ฐ ์ ์ฉํ ๊น? ๊ฐ๋ฐ์๊ฐ ์ฒด๊ฐํ๋ โ์ง์ง ์ธ๋ชจโ์ ๊ธฐ์ค
ํด๋ผ์ฐ๋ LLM์ด ์ ์ ๊ฐ๋ ฅํด์ง์๋ก, ๋ฐ๋๋ก ๋ก์ปฌ LLM์ ๋ํ ์ง๋ฌธ๋ ์ปค์ง๋๋ค. โ๊ตณ์ด ๋ด PC๋ ์ฌ๋ด ์๋ฒ์์ ๋๋ฆด ์ด์ ๊ฐ ์๋?โ๋ผ๋ ์์ฌ๋ถํฐ โ๋ฐ์ดํฐ๊ฐ ๋ฐ์ผ๋ก ๋๊ฐ๋ฉด ์ ๋๋๋ฐ ๋์์ด ์๋?โ ๊ฐ์ ํ์ค์ ์ธ ๊ณ ๋ฏผ๊น์ง์. ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด, ๋ก์ปฌ LLM์ ๋ชจ๋ ํ์ ๋ง๋ฅ ์ด์ ๋ ์๋์ง๋ง, ํน์ ์กฐ๊ฑด์์ ํด๋ผ์ฐ๋๋ณด๋ค ๋ ํ์คํ ๊ฐ์น๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ค๋ง ๊ทธ ๊ฐ์น๋ โ๋ชจ๋ธ ์ฑ๋ฅโ๋ณด๋ค ์ด์/๋ณด์/๋น์ฉ/ํต์ ์์ ๊ฐ๋ฆฝ๋๋ค.
๋ก์ปฌ LLM์ด ๋น๋๋ ์๊ฐ: โ์ฑ๋ฅโ์ด ์๋๋ผ โํต์ โ๊ฐ ํ์ํ ๋
1) ๋ฐ์ดํฐ ๊ฒฝ๊ณ๊ฐ ๋ช ํํ ์กฐ์ง
์ฌ๋ด ๋ฌธ์, ๊ณ ๊ฐ ์ ๋ณด, ์์ค์ฝ๋ ๋ฑ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๊ฐ ๋ค๋ค์ง ๋๋ โํ๋กฌํํธ์ ๋ฃ๋ ์๊ฐ ์ด๋๋ก ํ๋ฌ๊ฐ์งโ๊ฐ ํต์ฌ ๋ฆฌ์คํฌ๊ฐ ๋ฉ๋๋ค. ๋ก์ปฌ(๋๋ ์ฌ๋ด๋ง)์์ ๋ชจ๋ธ์ ์ด์ํ๋ฉด ๋ฐ์ดํฐ ํ๋ฆ์ ๋คํธ์ํฌ ๋ ๋ฒจ์์ ๊ณ ์ ํ ์ ์์ด, ๊ท์ /๊ฐ์ฌ ๋์์ด ๋จ์ํด์ง๋๋ค.
โ ์ฒด๊ฐ ํฌ์ธํธ ๐น ํ๋กฌํํธ/๋ก๊ทธ๋ฅผ ์ฌ๋ด ์ ์ฑ ๋๋ก ์ ์ฅยท๋ง์คํนยทํ๊ธฐ ๊ฐ๋ฅ ๐น ์ธ๋ถ ์ฅ์ ๋ ์ ์ฑ ๋ณ๊ฒฝ์ ์ํฅ์ ๋ ๋ฐ์
2) ๋ฐ๋ณต ํธ์ถ์ด ๋ง์ ์ ํ/์ ๋ฌด ์๋ํ
์ฑ๋ด PoC๊ฐ ์๋๋ผ ์ค์ ์ ํ ๊ธฐ๋ฅ์ผ๋ก ๋ถ์ด๋ฉด ํธ์ถ๋์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋ ์ ์์ต๋๋ค. ์ด๋ ๋ก์ปฌ์ ์ด๊ธฐ ์ ์ ์ด ๋ฒ๊ฑฐ๋กญ์ง๋ง, ์ผ์ ๊ท๋ชจ๋ถํฐ๋ ๋จ๊ฐ ์์ธก์ด ์ฌ์์ง๊ณ ์บ์/๋ฐฐ์น/ํ์ ๊ฐ์ ์ต์ ํ๋ ๋ง์๋๋ก ํ ์ ์์ต๋๋ค.
1๏ธโฃ ์: ์ฌ๋ด ํฌํ๋ฐ์คํฌ ํฐ์ผ ์์ฝ/๋ถ๋ฅ ์๋ํ 2๏ธโฃ ์: CI ํ์ดํ๋ผ์ธ์์ PR ์ค๋ช /๋ฆด๋ฆฌ์ฆ ๋ ธํธ ์์ฑ 3๏ธโฃ ์: ๋๊ท๋ชจ ๋ก๊ทธ/์ด์ ์ฝ๋ฉํธ ์ ๋ฆฌ ์์
3) ๋ชจ๋ธ์ โ์ ํ ์๊ตฌ์ฌํญ์ ๋ง๊ฒโ ๋ค๋ฌ๊ณ ์ถ์ ๋
๋ก์ปฌ์ ํ๋กฌํํธ๋ง ๋ง์ง๋ ์์ค์ ๋์ด ์์คํ ํ๋กฌํํธ ๊ณ ์ , ์์ ์ฅ์น, ์ถ๋ ฅ ํฌ๋งท ๊ฐ์ , ๋ผ์ฐํ (์์ ๋ชจ๋ธโํฐ ๋ชจ๋ธ) ๋ฑ ์์ง๋์ด๋ง ์ฌ์ง๊ฐ ํฝ๋๋ค. ํนํ JSON ์คํค๋ง ์ค์, ํจ์ ํธ์ถ ์คํ์ผ, ๋ด๋ถ ํด ์ฐ๋์ ์ด์์๊ฐ ํต์ ๊ถ์ ์ฅ๊ณ ์ค๊ณํ๋ ์ชฝ์ด ์ฑ๊ณต ํ๋ฅ ์ด ๋์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ํ๊ณ๋? ๋ก์ปฌ LLM์ โ์จ์ ๋น์ฉโ ์ฒดํฌ๋ฆฌ์คํธ
๋ก์ปฌ์ โ๊ณต์งโ๊ฐ ์๋๋๋ค. ๋น์ฉ ํญ๋ชฉ์ด ๊ฒฐ์ ์์ ์ด์์ผ๋ก ์ด๋ํ ๋ฟ์ ๋๋ค.
โ ๏ธ ๋ฐ๋์ ๊ณ์ฐํด์ผ ํ ๊ฒ๋ค ๐น GPU/VRAM ์๊ตฌ์ฌํญ: 7B~8B๊ธ๋ ์ค์ฌ์ฉ ์ค์ ์ ๋ฐ๋ผ VRAM ์๋ฐ์ด ํผ ๐น ๋์์ฑ: 1๋ช ์ด์ผ ๋๋๋ฐ 20๋ช ๋์ ์ ์์์ ๊ธ๊ฒฉํ ๋๋ ค์ง๋ ๊ฒฝ์ฐ ๋ง์ ๐น ํ์ง ์ ์ง: ๋ชจ๋ธ ์ ๋ฐ์ดํธ/ํ๊ท ํ ์คํธ/ํ๋กฌํํธ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ํ์ ๐น ๊ด์ธก ๊ฐ๋ฅ์ฑ: ์ง์ฐ์๊ฐ, ํ ํฐ ์ฒ๋ฆฌ๋, ์คํจ์จ, OOM ๋ชจ๋ํฐ๋ง ์ฒด๊ณ ๐น ๋ณด์: ๋ก์ปฌ์ด๋ผ๊ณ ๋์ด ์๋๋ผ, ์ ๊ทผํต์ ยทํค๊ด๋ฆฌยท๊ฐ์ฌ๋ก๊ทธ๊ฐ ํ์
โํด๋ผ์ฐ๋ vs ๋ก์ปฌโ์ ๊ฐ๋ฅด๋ ์ค์ ์์ฌ๊ฒฐ์ ๊ธฐ์ค 6๊ฐ์ง
๊ฒฐ์ ์ ๊ฐ์ผ๋ก ํ๋ฉด ์คํจํฉ๋๋ค. ์๋ ์ง๋ฌธ์ โ์โ๊ฐ ๋ง์์๋ก ๋ก์ปฌ ์ชฝ์ผ๋ก ๋ฌด๊ฒ๊ฐ ์ค๋ฆฝ๋๋ค.
โ ํ๋จ ์ง๋ฌธ ๐น ๋ฐ์ดํฐ๊ฐ ์กฐ์ง ๋ฐ์ผ๋ก ๋๊ฐ๋ฉด ๊ณค๋ํ๊ฐ? ๐น ํธ์ถ๋์ด ๊พธ์คํ ๋ง๊ฑฐ๋ ์์ธก ๊ฐ๋ฅํ๊ฐ? ๐น ์ง์ฐ์๊ฐ์ ์ผ์ ํ๊ฒ ํต์ ํด์ผ ํ๋๊ฐ(๋ด๋ถ๋ง/์ฃ์ง)? ๐น ๋ชจ๋ธ ๋์์ ๊ฐํ๊ฒ ์ ์ดํด์ผ ํ๋๊ฐ(ํฌ๋งท ๊ฐ์ , ์ ์ฑ ์ค์)? ๐น ์ฅ์ /์ ์ฑ ๋ณ๊ฒฝ ๋ฆฌ์คํฌ๋ฅผ ๋ด๊ฐ ๊ฐ๋นํ๊ณ ์ถ์ง ์์๊ฐ? ๐น ์ด์ํ ์ธ๋ ฅ๊ณผ ๊ด์ธก/๋ฐฐํฌ ์ฒด๊ณ๊ฐ ์๋๊ฐ?
๊ฐ๋ฐ์ ๊ด์ ์ ํ์ค์ ์ธ ์ํคํ ์ฒ: โ๋ก์ปฌ ๋จ๋ โ๋ณด๋ค โํผํฉโ์ด ๊ฐํ๋ค
ํ์ฅ์์ ๊ฐ์ฅ ์์ฃผ ๋ณด๋ ์ฑ๊ณต ํจํด์ ํ์ด๋ธ๋ฆฌ๋์ ๋๋ค.
๐น ๋ก์ปฌ ์ํ ๋ชจ๋ธ: ๋ผ์ฐํ /์ด์ ์์ฑ/๊ฐ๋จ ๋ถ๋ฅ/PII ๋ง์คํน ๐น ์ธ๋ถ ๋ํ ๋ชจ๋ธ: ์ด๋ ค์ด ์ถ๋ก , ๊ณ ํ์ง ์์ฐ์ด ์์ฑ(ํ์ํ ๋๋ง) ๐น RAG(๊ฒ์ ๊ธฐ๋ฐ ์์ฑ)์ ๊ฒฐํฉ: ์ฌ๋ด ๋ฌธ์ ๊ธฐ๋ฐ ๋ต๋ณ์ ๋ก์ปฌ๋ก๋ ์ฒด๊ฐ ํ์ง์ด ํ ์ฌ๋ผ๊ฐ
์ด ๊ตฌ์กฐ์ ์ฅ์ ์ โํญ์ ๋น์ผ ๋ชจ๋ธโ์ ์ฐ์ง ์์๋ ๋๊ณ , ๋ฏผ๊ฐ ๋ฐ์ดํฐ๋ ๋ก์ปฌ์์ ์ฒ๋ฆฌํ๋ฉฐ, ํ์ง์ด ํ์ํ ์๊ฐ์๋ง ํ์ฅํ ์ ์๋ค๋ ์ ์ ๋๋ค.
์งง์ ์ฝ๋ ์์: ๋ก์ปฌ์์ JSON ์คํค๋ง ๊ฐ์ ์ถ๋ ฅ ๋ฐ๊ธฐ(๊ฐ๋ฐ ์์ฐ์ฑ์ฉ)
๋ก์ปฌ LLM์ โ์ ๋ฌด ์๋ํโ์ ๋ถ์ผ ๋ ๊ฐ์ฅ ํฐ ๋ถ๋ง์ ์ถ๋ ฅ ํฌ๋งท์ด ํ๋ค๋ฆฌ๋ ๊ฒ์ ๋๋ค. ์๋๋ ๋ก์ปฌ ์๋ฒ(์: OpenAI ํธํ API ํํ)๋ก ์์ฒญํ๋ฉด์ JSON ํํ๋ฅผ ๊ฐ์ ํ๋ ค๋ ์ต์ ์์์ ๋๋ค. (์๋ฒ ๊ตฌํ์ฒด์ ๋ฐ๋ผ ์ต์ ์ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค)
import requests
import json
API_BASE = "http://localhost:8000/v1"
MODEL = "local-llm"
schema = {
"type": "object",
"properties": {
"summary": {"type": "string"},
"risk": {"type": "string", "enum": ["low", "medium", "high"]},
"actions": {"type": "array", "items": {"type": "string"}}
},
"required": ["summary", "risk", "actions"],
"additionalProperties": False
}
payload = {
"model": MODEL,
"messages": [
{"role": "system", "content": "๋๋ ๊ฐ๋ฐ ์ด์๋ฅผ ๊ตฌ์กฐํํด์ ์ ๋ฆฌํ๋ ๋์ฐ๋ฏธ๋ค."},
{"role": "user", "content": "๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ํ์์์์ด ๋์๊ณ , DB ์ปค๋ฅ์
ํ์ด ๊ณ ๊ฐ๋๋ ๋ฏํด. ๋์์์ ์ ๋ฆฌํด์ค."}
],
"temperature": 0.2,
"response_format": {
"type": "json_schema",
"json_schema": {"name": "issue_report", "schema": schema}
}
}
resp = requests.post(f"{API_BASE}/chat/completions", json=payload, timeout=)
data = resp.json()
content = data[][][][]
(json.loads(content))
โ ํฌ์ธํธ ๐น ์จ๋๋ฅผ ๋ฎ์ถ๋ฉด ํฌ๋งท ์์ ์ฑ์ด ๋ณดํต ์ฌ๋ผ๊ฐ ๐น ์คํจ ์ผ์ด์ค(๋น ์ถ๋ ฅ, ์คํค๋ง ๋ถ์ผ์น)๋ฅผ ๋๋นํด ์ฌ์๋/๊ฒ์ฆ ๋ก์ง์ ํ์
๊ฒฐ๋ก : ๋ก์ปฌ LLM์ โํ์ง ์ต๊ณ โ๊ฐ ์๋๋ผ โ์ด์ ์ค๊ณ์ ๋ฌด๊ธฐโ๋ค
๋ก์ปฌ LLM์ ๊ฐ์น๋ โํด๋ผ์ฐ๋๋ณด๋ค ๋๋ํ๋คโ๊ฐ ์๋๋ผ, ๋ด๊ฐ ์ํ๋ ๋ฐฉ์์ผ๋ก ํต์ ํ๋ฉด์ ๋ฐ๋ณต ์ ๋ฌด๋ฅผ ์์คํ ์ผ๋ก ๋ฐ๊พธ๋ ํ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ๊ฒฝ๊ณ๊ฐ ์ค์ํ๊ณ ํธ์ถ๋์ด ๊พธ์คํ๋ฉฐ, ์ถ๋ ฅ ํฌ๋งท์ ์์ ์ ์ผ๋ก ๋ง๋ค๊ณ ์ถ์ ํ์ด๋ผ๋ฉด ๋ก์ปฌ์ ์ถฉ๋ถํ ์ ์ฉํฉ๋๋ค. ๋ฐ๋๋ก ์ด์ ์ฌ๋ ฅ์ด ์๊ณ , ์ต๊ณ ์ ์ธ์ด ํ์ง์ด ์ฆ์ ํ์ํ๋ค๋ฉด ํด๋ผ์ฐ๋๊ฐ ์ฌ์ ํ ํฉ๋ฆฌ์ ์ ๋๋ค. ๊ฒฐ๊ตญ ์น๋ถ๋ ๋ชจ๋ธ ํฌ๊ธฐ๊ฐ ์๋๋ผ ์๊ตฌ์ฌํญ๊ณผ ์ด์ ์ญ๋์ ์ ํฉ์ฑ์์ ๋ฉ๋๋ค.
#๊ฐ๋ฐ #๋ก์ปฌLLM #์จํ๋ ๋ฏธ์ค #LLMOps #RAG #ํ๋ผ์ด๋ฒ์ #์ฌ๋ด๋๊ตฌ #AI๊ฐ๋ฐ #๋ชจ๋ธ์๋น
โฌ๏ธ ์ด ๊ธ์ด ๋์์ด ๋์ จ๋ค๋ฉด, ์๋ ๊ด๊ณ ๋ฅผ ํ ๋ฒ๋ง ํด๋ฆญํด์ฃผ์ธ์! ์ ์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค ๐โโ๏ธ โฌ๏ธ