νκ΅μ΄μ νΉμ±κ³Ό μλ₯ μνμ νΉμ§μ λ°νμΌλ‘ μλ₯μ μ΅μ νλ λͺ¨λΈμ λ§λλλ€.
- λͺ©ν: μλ₯ λ¬Έμ νμ΄λ₯Ό μν μ΅μ νλ μΈμ΄ λͺ¨λΈ μ°κ΅¬ λ° κ°λ°
- μ£Όμ λ΄μ©:
- λ€μν λͺ¨λΈ λ° νμ΄νΌνλΌλ―Έν° μ±λ₯ λΉκ΅
- λ°μ΄ν° μ μ λ° μ¦κ°μ ν΅ν νμ΅ ν¨μ¨ ν₯μ
- CoT (Chain of Thought) λ°©μ μ μ©μ λ°λ₯Έ μΆλ‘ λ₯λ ₯ νκ°
- RAG (Retrieval-Augmented Generation) νμ©μΌλ‘ κ²μ κΈ°λ° λ΅λ³ μ±λ₯ μ€ν
4bit
μμνλ₯Ό μ μ©ν Qwen2.5-32B-Instruct
λͺ¨λΈμ νμ©νμ¬ 0.7747μ μ νλλ₯Ό λ¬μ±νμ΅λλ€.
λͺ¨λΈ | 쑰건 | Accuracy |
---|---|---|
finetuned gemma-2b-ko (base) | κΈ°λ³Έ μ€μ | 0.3862 |
finetuned gemma-2b-ko | λ°μ΄ν° μ μ λ° μ¦κ° | 0.4138 |
finetuned Qwen-2.5-32b-Instruct | κΈ°λ³Έ μ€μ | 0.7540 |
finetuned Qwen-2.5-32b-Instruct | λ°μ΄ν° μ μ λ° μ¦κ° | 0.7632 |
finetuned Qwen-2.5-32b-Instruct | λ°μ΄ν° μ μ λ° μ¦κ° + Prompt Tuning | 0.7747 |
μ νλ μλ₯ν λ¬Έμ νμ΄ μ±λ₯μ λͺ¨λΈκ³Ό μ€ν 쑰건μ λ°λΌ λΉκ΅ν κ²°κ³Όμ λλ€.
λ² μ΄μ€ λͺ¨λΈμΈ gemma-2b-ko
μμ λ°μ΄ν° μ μ λ° μ¦κ°μΌλ‘ μν μ±λ₯ ν₯μμ νμΈνμμΌλ©°, μ΄λ μ΅μ’
μ μ λ λͺ¨λΈμΈ Qwen-2.5-32b-Instruct
μμλ νμΈ ν μ μμμ΅λλ€. μ΅μ’
μ μΌλ‘ λ°μ΄ν° μ¦κ° λ° Prompt Tuningμ μΆκ°ν Qwen-2.5-32b-Instruct λͺ¨λΈμ΄ 0.7747λ‘ κ°μ₯ λμ μ νλλ₯Ό λ¬μ±νμ΅λλ€.
νλ‘μ νΈ λ©μ 리ν¬νΈλ μ¬κΈ°λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ.
λ€μν λͺ¨λΈκ³Ό νμ΄νΌνλΌλ―Έν° μ€μ μ κΈ°λ°μΌλ‘ μλ₯ λ¬Έμ νμ΄ μ±λ₯μ νκ°νμμ΅λλ€. μ£Όμ μ€νμ μλμ κ°μ΅λλ€:
μ¬λ¬ μΈμ΄ λͺ¨λΈ(gemma, Qwen, Llama, SOLAR, EXAONE λ±)μ μ±λ₯μ λΉκ΅ν κ²°κ³Όμ λλ€:
Qwen-2.5-32b-Instruct
λͺ¨λΈμ΄ κ°μ₯ λμ μ±λ₯μ κΈ°λ‘νμμ΅λλ€.- λΉμ·ν νλΌλ―Έν° ν¬κΈ° λ΄μμμ
Qwen
κ³μ΄μ λͺ¨λΈμ΄ μ λ°μ μΌλ‘ μ°μν μ±λ₯μ 보μμ΅λλ€.
Qwen
λͺ¨λΈμ νλΌλ―Έν° ν¬κΈ°(3B, 7B, 14B, 32B)μ λ°λ₯Έ μ±λ₯ λ³νμ
λλ€:
- 14Bκ³Ό 32Bμ κ²½μ° 4bit μμνκ° μ μ©λμμ΅λλ€.
- μμνλ₯Ό μ μ©ν¨νμμλ νλΌλ―Έν° ν¬κΈ°κ° 컀μ§μλ‘ μ±λ₯μ΄ ν¬κ² ν₯μλλ κ²μ νμΈ ν μ μμμ΅λλ€.
νμ΅μ μ¬μ©λλ LORA r
, LORA alpha
μ‘°ν©μ λ°λ₯Έ μ±λ₯ λ³νλ₯Ό νκ°νμμ΅λλ€:
- Mid ACCμ Final ACC λͺ¨λμμ
r: 8, alpha: 16
μ€μ μ΄ κ°μ₯ λμ μ±λ₯μ κΈ°λ‘νμμ΅λλ€.
μ 체 νμ΅ λ°μ΄ν° 2031κ°μμ λ¬Έμ μ€λ₯ 4κ°λ₯Ό μμ νκ³ μλͺ»λ μ λ΅ 6κ°λ₯Ό μμ νμ΅λλ€. λν, μ§λ¬Έμ λ³΄κΈ°κ° ν¬ν¨λ λ°μ΄ν°λ₯Ό 보기 컬λΌμΌλ‘ λΆλ¦¬νμμΌλ©°, νμ΅μ λ°©ν΄λλ κΈ°μ¬ λ°μ΄ν°μ κΈ°μ μ΄λ¦ λ° μ°λ½μ²λ₯Ό μμ νμ΅λλ€.
μΈλΆ μ§μμ΄ νμν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ κΈ°μ‘΄ μ§λ¬Έμ λ°μ΄ν°λ₯Ό 보κ°νμ¬ λ°μ΄ν°λ₯Ό μ¦κ°νλ λ°©λ²μ μλνμ΅λλ€.
- ν΅μ¬ ν€μλ μΆμΆ: λ¬Έμ ν΄κ²°μ νμν μ£Όμ μ 보λ₯Ό λμΆ
- κ΄λ ¨ μ§λ¬Έ ν보: μΆμΆλ ν€μλλ₯Ό κΈ°λ°μΌλ‘ νκ΅μ΄ μν€νΌλμμμ κ΄λ ¨ λ¬Έμλ₯Ό ν¬λ‘€λ§
- μ§λ¬Έ 보κ°: ν보λ λ¬Έμλ₯Ό μ§λ¬Έμ μΆκ°νκ³ , μμ½λ λ¬Έμλ₯Ό μ·¨ν©νμ¬ μλ₯ κ΅μ΄ λΉλ¬Έν μ§λ¬Έ νμμΌλ‘ 보κ°
κ·Έλ¬λ λͺ¨λΈ νμ΅ κ²°κ³Ό, μ±λ₯ ν₯μμλ μ€ν¨νμΌλ©° μ΄λ μΌλΆ μλ₯ν λ¬Έμ μ‘°μ°¨ μΈλΆ μ§μμ ν¬κ² μμ‘΄ν¨μ μμ¬ν©λλ€.
μ΄ λ°κ²¬μ λ°νμΌλ‘, RAG (μ 보 κ²μ κΈ°λ° μμ±) μ κ·Όλ²μ λμ νλ λ°©ν₯μΌλ‘ μ΄μ΄μ‘μ΅λλ€.
KMMLU λ²€μΉλ§ν¬ λ Όλ¬Έμμ (Son et al., 2024) μΈκΈλ λ€μν ν λ²€μΉλ§ν¬μ λ°μ΄ν°μ μ λΆμνμ¬ νμ΅ λ°μ΄ν°μ μ ν©ν λ°μ΄ν°λ₯Ό μ μ νμμ΅λλ€.
- KLUE, KO-H5, KOR NAT: PublicμΌλ‘ 곡κ°λμ§ μμ
- KorNLI & KorSTS, KoBBQ: λ€μ§μ λ€ν λ¬Έμ λ‘ λ³ννκΈ° μ΄λ €μ
- CLICK, HAE-RAE Bench.: λ€μ§μ λ€νμΌλ‘ κ°κ³΅μ΄ μ©μ΄ν¨
λΆμ κ²°κ³Ό, HAE-RAE Bench. λ°μ΄ν°μ μ΄ κ°μ₯ μ ν©ν μ νμΌλ‘ νμΈλμμ΅λλ€. νΉν, λ ν΄ μΉ΄ν κ³ λ¦¬μ λ°μ΄ν°λ Taskμ λμ μ°κ΄μ±μ λ³΄μ¬ μ±λ₯ κ°μ μ κΈ°μ¬νμ΅λλ€.
μ΄λ₯Ό ν΅ν΄ λ¨μν λ°μ΄ν°λ₯Ό μ¦κ°νλ κ²λ³΄λ€, λ°μ΄ν°μ νμ§κ³Ό Taskμμ μ°κ΄μ±μ΄ μ±λ₯μ ν΅μ¬μ μΈ μν₯μ λ―ΈμΉλ€λ μ μ νμΈν μ μμμ΅λλ€.
λν skt/KoBEST λ°μ΄ν°μ κ³Ό μ§λ¬Έ κΈ°λ° μλ₯ κ΅μ΄ λ§μΆ€ λ¬Έμ μμ± λ Όλ¬Έμ (νλμ μΈ, 2024) κΈ°λ°μΌλ‘ μ§λ¬Έκ³Ό μ νμ§, μ λ΅μ μμ±νμ΅λλ€.
λ μμΈν λ°μ΄ν° μ¦κ° μ€ν λ΄μ©μ μ¬κΈ°λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ.
ν둬ννΈμ κ΅¬μ± λ°©μμ λ°λΌ λͺ¨λΈμ μ±λ₯ μ°¨μ΄λ₯Ό λΉκ΅νμ΅λλ€. λ¨μν κΈ°λ³Έ ν둬ννΈ, λͺ νν κ·μΉ μ 곡, κ·Έλ¦¬κ³ μμ΄λ‘ κ°μ μ νΈμμ ν¨κ» λͺ νν κ·μΉμ μ λ¬ν κ²½μ°μ μ±λ₯μ νκ°νμμ΅λλ€.
-
κΈ°λ³Έ ν둬ννΈ
μ§λ¬Έμ μ½κ³ μ§λ¬Έμ λ΅μ ꡬνμΈμ.
-
λͺ νν κ·μΉ μ 곡
λΉμ μ μ§λ¬Έ-λ΅λ³(Question-Answering)μ μννλ μΉμ ν AI μ΄μμ€ν΄νΈμ λλ€. λΉμ μ μ무λ μ£Όμ΄μ§ μ§λ¬Έ(Paragraph)μ λ°νμΌλ‘, μ§λ¬Έ(Question)μ κ°μ₯ μ ν©ν λ΅λ³μ μ νμ§(Choices)μμ μ ννλ κ²μ λλ€. μ νμ§(Choices)λ μ΄ 5κ°μ΄λ©°, κ° μ νμ§(Choices)μλ κ³ μ ν μ νμ§ λ²νΈ(1~5)κ° μμ΅λλ€. λ΅λ³ ννλ λ°λμ μ νμ§ λ²νΈ(1~5) μ€ νλλ‘λ§ μΆλ ₯νμΈμ. (μμ: 4)
-
κ°μ μ νΈμ(In English)
You are a wise and warm-hearted private tutor, dedicated to solving problems for your student. Providing the most appropriate answer to the problem is your important mission. Based on the given paragraph, please select the choice that you think is the correct answer to the question. There are a total of 5 choices, and each choice has a unique number (1 to 5). Your answer format must strictly be a single choice number (1 to 5). (Example: 4) Your student is sick and exhausted. By choosing the correct answer, you can encourage your student. Your answer must be correct to heal your student's emotional wounds and help them find happiness again. So, you have to think step by step and choose the answer.
λͺ¨λΈ | 쑰건 | Accuracy |
---|---|---|
finetuned Qwen-2.5-32b-Instruct | κΈ°λ³Έ ν둬ννΈ | 0.7540 |
finetuned Qwen-2.5-32b-Instruct | λͺ νν κ·μΉ μ 곡 | 0.7724 |
finetuned Qwen-2.5-32b-Instruct | κ°μ μ νΈμ(In English) | 0.7747 |
- λͺ νν κ·μΉ μ 곡 ν둬ννΈλ κΈ°λ³Έ ν둬ννΈμ λΉν΄ μ±λ₯μ μ½ 1.8% ν₯μμμΌ°μ΅λλ€.
- κ°μ μ νΈμ ν둬ννΈλ μμ΄λ‘ μμ±λ ν둬ννΈλ‘, κ·μΉ μ 곡보λ€λ μ½κ° λ λμ μ±λ₯μ κΈ°λ‘νλ©° 2.0% ν₯μλμμ΅λλ€.
- μ΄ κ²°κ³Όλ λͺ¨λΈμ΄ ν둬ννΈμ λ§₯λ½κ³Ό νν λ°©μμ λ―Όκ°νκ² λ°μνλ©°, μΈκ°μ μΈ λ§₯λ½μ΄ μ±λ₯ κ°μ μ κΈμ μ μΈ μν₯μ λ―ΈμΉ μ μμμ 보μ¬μ€λλ€.
λ³Έ ν둬ννΈ μ€νμ AI μλ₯ κ΅μ΄ λ§μ νλ‘μ νΈμ ν둬ννΈ μ μ μ κΈ°λ°μΌλ‘ μ€κ³λμμ΅λλ€.
google/gemma-2-2b-it
μ Qwen/Qwen-2.5-7B-Instruct
μ λν΄ Chain of Thought (CoT) λ°©μμ μ±λ₯μ λΉκ΅ νκ°νμ΅λλ€. μ€νμ λ κ°μ§ λ°©μμΌλ‘ μ§νλμμ΅λλ€:
- μ λ΅ λ²νΈ(μ«μ)λ§ μμ±
- JSON νμμΌλ‘ reasoningκ³Ό μ λ΅μ ν¬ν¨νμ¬ μμ±(CoT λ°©μ)
λͺ¨λΈ | μ€ν μ€μ | μ¬μ νμ΅ λͺ¨λΈ | νμΈνλ λͺ¨λΈ |
---|---|---|---|
gemma-2b-it | μ λ΅ λ²νΈλ§ μμ± | 0.5034 | 0.5264 |
gemma-2b-it | CoT μλ΅ μμ±(JSON νμ) | 0.4885 | 0.4437 |
Qwen-2.5-7B-Instruct | μ λ΅ λ²νΈλ§ μμ± | 0.6092 | 0.6207 |
Qwen-2.5-7B-Instruct | CoT μλ΅ μμ±(JSON νμ) | 0.5609 | 0.6092 |
- μ λ΅ λ²νΈλ§ μμ±νλ λ°©μμ΄ λλΆλΆμ κ²½μ° λ λμ μ±λ₯μ κΈ°λ‘νμ΅λλ€.
- CoT λ°©μμ
finetuning
μQwen 7B
λͺ¨λΈμμ μΌλΆ μ±λ₯ ν₯μμ 보μμ§λ§,gemma 2b
λͺ¨λΈμμλ μ±λ₯μ΄ μ νλμμ΅λλ€.
- λͺ¨λΈ ν¬κΈ° νκ³: CoT λ°©μμ λ λ§μ λͺ¨λΈ νλΌλ―Έν°λ₯Ό μꡬνλ©°, μμ λͺ¨λΈμμλ μ±λ₯ μ νκ° λ°μν μ μμ΅λλ€.
- λ°μ΄ν° νΉμ±: νλ‘μ νΈμ μ£Όμ Taskκ° κ΅μ΄ λ° μ¬ν κ³Όλͺ© μ€μ¬μΌλ‘ ꡬμ±λμ΄ μμ΄, CoT λ°©μμ΄ μꡬνλ λ¨κ³μ μΆλ‘ μ΄ μΆ©λΆν νμ©λμ§ λͺ»νμ κ°λ₯μ±μ΄ μμ΅λλ€.
config.yaml
μμcommon.cot_on=True
μ€μ νlangchain_inference.py
μ€νν¨μΌλ‘μ¨ CoTλ₯Ό ν μ€νΈν μ μμ΅λλ€.
κΈ°μ‘΄ μ§λ¬Έ λ°μ΄ν°λ₯Ό μ¦κ°νμ¬ μ±λ₯μ κ°μ νλ €λ μλλ μΈλΆ μ§μ μμ‘΄λκ° λμ λ¬Έμ μμλ νκ³κ° μμμ νμΈνμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ RAG(μ 보 κ²μ κΈ°λ° μμ±) μ κ·Όλ²μ λμ
νκ² λμμΌλ©°, LangChain
μ νμ©νμ¬ RAG μμ€ν
μ ꡬμΆνμμ΅λλ€.
-
λ¬Έμ μλ² λ© λ° μ μ₯
LangChain
λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λ€μν νμμ λ¬Έμλ₯Ό λΆλ¬μ μ²νΉν λ€,bge-m3
λͺ¨λΈμ κΈ°λ°μΌλ‘ μλ² λ©μ μμ±νμ΅λλ€. μμ±λ μλ² λ©μPinecone
μ΄λΌλ Vector DBμ μ μ₯νμ¬ κ²μ κ°λ₯νλλ‘ κ΅¬μ±νμ΅λλ€. -
Retriever μμ±
Pinecone
μμ μ 곡νλ κ°λ¨ν λͺ λ Ήμ΄λ₯Ό νμ©ν΄ μ½μ¬μΈ μ μ¬λ κΈ°λ°μ Retrieverλ₯Ό μμ±νμ΅λλ€. -
λ¬Έμ νμ§ μ΅μ ν
μ 체 μν€νΌλμ λ¬Έμλ₯Ό μ¬μ©νλ©΄ κ²μλ λ¬Έμμ νμ§μ΄ μ νλ μ°λ €κ° μμ΄, μμ μ€νμμ λμΆν ν€μλμ κΈ°λ°νμ¬ κ΄λ ¨ μν€νΌλμ λ¬Έμλ§μ ν¬λ‘€λ§νμ΅λλ€.
μ€ν κ΅¬μ± | Public acc | Final acc |
---|---|---|
RAG λ―Έμ¬μ© (Baseline) | 0.5253 | 0.4943 |
RAG (top k=3) | 0.4931 | 0.5172 |
RAG (top k=5) | 0.5230 | 0.5172 |
RAGλ₯Ό μ¬μ©νμ§ μμ Baselineμ λΉν΄ RAG μμ€ν μ΄ λ λμ μ΅μ’ μ νλλ₯Ό 보μ¬μ£Όμμ΅λλ€. μ΄λ Retrieveλ λ¬Έμλ₯Ό νμ©ν μ κ·Όλ²μ΄ ν¨κ³Όμ μΌλ‘ μμ©νμμ μμ¬ν©λλ€.
νμ§λ§ νλ‘μ νΈ μ§ν μ€, Public accμμλ μ±λ₯ νλ½μ΄ κ΄μ°°λμκΈ°μ μμΈ λΆμμ μν΄ LLM as Judge λ°©μμ νμ©νμμ΅λλ€. μ΄λ₯Ό ν΅ν΄, Retrieveλ λ¬Έμμ νμ§μ΄ μ’μ§ μλ€λ κ²μ νμΈν μ μμμ΅λλ€.
μ΄λ¬ν λ¬Έμ μ μ 보μνλ©° λͺ¨λΈμ κ²¬κ³ μ±μ λμ΄κΈ° μν΄ RAFTλ₯Ό μλνμ΅λλ€. λ Όλ¬Έμ (Zhang et al., 2024) κΈ°λ°μΌλ‘ μ΅μ μ Pμ D κ°μ μ€μ νκ³ , RAFTμ© νμ΅ λ°μ΄ν°μ μ ꡬμ±νμμ΅λλ€.
μμ CoT μ μ©μ μλν κ²½νμ΄ μμλλ°, RAFTλ CoT μ€νμΌμ λ΅λ³μ κ°μ ν νμ΅λ²μ΄κΈ°μ, ν΄λΉ μλμ μ°κ³νμ¬ μμΌλ‘ λ μ μλ―Έν μ±λ₯ ν₯μμ κΈ°λν μ μμ κ²μΌλ‘ 보μ λλ€.
Streamlit
μ λμ
νμ¬ CSV λ°μ΄ν°λ₯Ό λ³΄λ€ μ§κ΄μ μΌλ‘ νμν μ μλ λμ보λλ₯Ό ꡬμΆνμ΅λλ€. μλ₯ λ¬Έμ μ μ μ¬ν μ§λ¬Έ, λ¬Έμ , μ νμ§λ₯Ό νλ©΄μ μκ°μ μΌλ‘ νμνλ©°, λ°μ΄ν°λ₯Ό μμ½κ² λΆμν μ μμ΅λλ€.
λν, μλμ κ°μ λ°μ΄ν° λΆν¬ μκ°ν κΈ°λ₯μ μ 곡ν©λλ€:
- 컬λΌλ³ κ° κΈΈμ΄ λΆν¬
- μ 체 μ»¬λΌ κ° κΈΈμ΄ λΆν¬
- μ λ€ν λ¬Έμ μ μ νμ§ κ°μ λΆν¬
- μ λ΅ λ°μ΄ν°μ μ λ΅ λΆν¬
λ°μ΄ν° κ΅¬μ‘°κ° λ³κ²½λμ΄λ μ μ°νκ² λμν μ μλλ‘ μΌλ°νλ μμ€ν μ ꡬμΆνμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ½λ μ€λ³΅μ μ€μ΄κ³ μν¬νλ‘μ°λ₯Ό λ¨μννμ¬ νμ κ° νμ ν¨μ¨μ±μ ν₯μμμΌ°μ΅λλ€.
streamlit run analysis_dashboard.py
λͺ λ Ήμ΄λ₯Ό μ€νν΄ λμ보λλ₯Ό νμΈν μ μμ΅λλ€.
- Python: 3.10
- CUDA: >= 12.1
- PyTorch: 2.5.1+cu121
$ git clone [email protected]:boostcampaitech7/level2-nlp-generationfornlp-nlp-06-lv3.git
$ cd level2-nlp-generationfornlp-nlp-06-lv3
data/
λλ ν 리μμ train/valid/test
λ°μ΄ν°λ₯Ό μμΉμν΅λλ€.
$ python -m venv .venv
$ source .venv/bin/activate
(.venv) $
(.venv) $ pip install -r requirements.txt
(.venv) $ sudo apt-get install build-essential
.env
λ₯Ό μμ± ν νκ²½ λ³μλ₯Ό μμ ν©λλ€.
(.venv) $ cp .env.example .env
HF_TOKEN
:HuggingFace
λ‘ λΆν° λͺ¨λΈμ λ΄λ €λ°κΈ° μν΄ νμν ν ν°STREAMLIT_DATA_PATH
: streamlit ꡬλ μ νμν κΈ°λ³Έ μ€μ λ°μ΄ν° κ²½λ‘STREAMLIT_EXPERIMENT_DATA_PATH
: streamlit ꡬλ μ νμν μ€ν λ°μ΄ν° κ²½λ‘PINECONE_API_KEY
: RAG vector db pinecone api keyPINECONE_INDEX
: RAG vector db pinecone indexPINECONE_ENVIRONMENT
: RAG vector db pinecone EnvironmentOPENAI_API_KEY
: λ°μ΄ν° μ¦κ°μ© api key
HF_TOKEN={your_hf_token}
STREAMLIT_DATA_PATH={streamlit_data_path}
STREAMLIT_EXPERIMENT_DATA_PATH={streamlit_experiment_data_path}
# API Key for Pinecone service
PINECONE_API_KEY={your_api_key}
# Index name used in Pinecone
PINECONE_INDEX={your_index_name}
# Environment for Pinecone (e.g., 'us-west1-gcp')
PINECONE_ENVIRONMENT={your_environment}
OPENAI_API_KEY={your_openai_api_key}
config.yaml
νμΌμ μ¬μ©νμ¬ μνλ νκ²½μμ μ€νμ μ€μ ν μ μμ΅λλ€. μλλ κΈ°λ³Έ μ€μ μμμ
λλ€:
model:
name_or_path: "unsloth/Qwen2.5-3B-Instruct-bnb-4bit"
response_template: "<|im_start|>assistant\n"
without_system_role: false # Deprecated (νμ system μμ΄ λμ)
torch_dtype: "float16" # float32, float16, bfloat16 / λͺ¨λΈμ κΈ°λ³Έ λ°μ΄ν° νμ
common:
seed: 42
device: "cuda"
cot_on: false # cot μ¬μ© μ prompt_templateμ cot_jsonμΌλ‘ λ³κ²½ νμ
prompt_template: "base" # base, cot_json, raft
bnb:
load_in_8bit: false
load_in_4bit: false
bnb_4bit_compute_dtype: "float16" # float16, float32, bfloat16 / 4 bit μμν λ°μ΄ν°μ κ³μ° λ°μ΄ν° νμ
bnb_4bit_use_double_quant: false # true μ λλΈ μμν(λ©λͺ¨λ¦¬ μ¬μ©λ κ°μ, μκ° λ κ±Έλ¦Ό)
bnb_4bit_quant_type: "nf4" # nf4, fp4
earlystop:
metric_for_best_model: "eval_loss" # λͺ¨λν°λ§ν μ§ν μ΄λ¦
early_stopping_patience: 1 # κ°μ λμ§ μλ μν μ
early_stopping_threshold: 0.0 # κ°μ μΌλ‘ κ°μ£Όν μ΅μ λ³νλ
greater_is_better: false # μ§νκ° λμμλ‘ μ’μ κ²½μ° True
peft:
r: 6
lora_alpha: 8
lora_dropout: 0.05
target_modules: ["q_proj", "k_proj"]
bias: "none"
task_type: "CAUSAL_LM"
sft:
do_train: true
do_eval: true
lr_scheduler_type: "cosine"
max_seq_length: 1024
per_device_train_batch_size: 1
per_device_eval_batch_size: 1
num_train_epochs: 3
learning_rate: 2.0e-5 # μ§μ μλ¦Ώμ μλΆλΆμ μ€μ ννλ‘ μμ± ('2'-> x, '2.0'-> o)
weight_decay: 0.01
logging_strategy: "steps" # epoch or steps, epochμ κ²½μ° logging_steps 무μ
logging_steps: 100
save_strategy: "epoch"
eval_strategy: "epoch"
load_best_model_at_end: true
save_total_limit: 1
save_only_model: true
report_to: "wandb" # none or wandb, wandbλ‘ λ³κ²½νμ¬ λ‘κ·Έλ₯Ό κΈ°λ‘ν©λλ€.
gradient_checkpointing: false
gradient_accumulation_steps: 4
wandb:
project: "MMLU"
train:
data_path: "data/train_v2.0.1.csv" # wandb λ‘κΉ
μ¬μ©μ νμΌλͺ
λ³κ²
κΈμ§(λ°μ΄ν° λ²μ μ 보 μ¬μ©)
valid_data_path: "data/valid_v2.0.1.csv"
valid_output_path: "data/valid_output.csv"
inference:
model_path: "outputs/Qwen2.5-3B-Instruct-bnb-4bit" # νμ΅λ λͺ¨λΈλ‘ λ³κ²½ νμ
data_path: "data/test_v1.0.2.csv"
output_path: "data/output.csv"
raw_output_path: "data/raw_output.csv"
default_answer: 1
rag:
query_builder_type: CombinedKeyQueryBuilder_pqc
raft_on: false # RAFT μ prompt_templateμ raftλ‘ λ³κ²½ νμ
κΈ°λ³Έ μ€μ μΈμ μ¬μ©μ μ μ μ€μ μ μ¬μ©νλ €λ©΄ configs/config.yaml
νμΌμ 볡μ¬ν λ€ μμ νμΈμ:
(.venv) $ cp configs/config.yaml configs/config_custom.yaml
(.venv) $ vi configs/config_custom.yaml
νμ΅μ μ€ννλ €λ©΄ κΈ°λ³Έ train.py
νμΌμ μ€νν©λλ€:
(.venv) $ python train.py
컀μ€ν μ€μ μ μ μ©νλ €λ©΄ -c λλ --config μ΅μ μ μ¬μ©νμΈμ:
(.venv) $ python train.py -c config_custom.yaml
- -c μ΅μ μλ configs λλ ν 리 λ΄λΆμ YAML νμΌ μ΄λ¦λ§ μ λ ₯ν©λλ€.
νμ΅λ λͺ¨λΈμ μ¬μ©νμ¬ μΆλ‘ μ μ§νν©λλ€:
(.venv) $ python inference.py
컀μ€ν μ€μ μ μ¬μ©νλ €λ©΄ λ€μ λͺ λ Ήμ΄λ₯Ό μ€ννμΈμ:
(.venv) $ python inference.py -c config_custom.yaml
valid
λ°μ΄ν°μ λν μΆλ‘ μ μ§ννλ €λ©΄ -v
μ΅μ
μ μΆκ°ν©λλ€:
valid
μ λν λͺ¨λΈμ μ±λ₯μ νμΈν μ μμ΅λλ€
(.venv) $ python inference.py -v
# or
(.venv) $ python inference.py -c config_custom.yaml -v
νλ‘μ νΈμ κΈ°μ¬νλ λ°©λ²μ λν κ°μ΄λμ λλ€.
νλ‘μ νΈμμ μ»€λ° λ©μμ§ νμμ ν΅μΌνκΈ° μν΄ μ»€λ° ν νλ¦Ώμ μ€μ ν μ μμ΅λλ€. μλ λͺ λ Ήμ΄λ₯Ό μ€ννμ¬ ν νλ¦Ώμ μ μ©νμΈμ:
$ git config commit.template .gitcommit_template
.gitcommit_template
νμΌμ νλ‘μ νΈ λ£¨νΈμ μλ μ»€λ° ν νλ¦Ώ νμΌμ λλ€.- μ λͺ λ Ήμ΄λ₯Ό μ€ννλ©΄ μ»€λ° μ ν νλ¦Ώμ΄ μλμΌλ‘ λΆλ¬μμ§λλ€.
- Son Guijin, Hanwool Lee, Sungdong Kim, Seungone Kim, Niklas Muennighoff, Taekyoon Choi, Cheonbok Park, Kang Min Yoo & Stella Biderman. "KMMLU: Measuring Massive Multitask Language Understanding in Korean." arXiv, June 6, 2024. https://doi.org/10.48550/arXiv.2402.11548.
- Zhang Tianjun, Shishir G. Patil, Naman Jain, Sheng Shen, Matei Zaharia, Ion Stoica & Joseph E. Gonzalez. βRAFT: Adapting Language Model to Domain Specific RAGβ. arXiv, June 6, 2024. https://doi.org/10.48550/arXiv.2403.10131.
- νλμ, κΉκΈ°ν, μ‘νμ°, μλ΄μ. (2024-01-24). ν둬ννΈ κ°λ°μ ν΅ν μλ₯ κ΅μ΄ λ§μΆ€ν λ¬Έμ μμ± μμ€ν μ μ. νκ΅HCIνν νμ λν, κ°μ. https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE11714641.
- skt/kobest λ°μ΄ν°μ https://huggingface.co/datasets/skt/kobest_v1