[AI] 파인튜닝 - OpenOrca 로 Instruction dataset 만들자.

늘 공부하는 괴짜·2025년 5월 11일
0

AI : Fine Tuning

목록 보기
3/15

1. make_jsonl.py

import requests
import json
import time

def ask_openorca(prompt, model='mistral-openorca'):
    response = requests.post(
        'http://localhost:11434/api/generate',
        json={
            'model': model,
            'prompt': prompt,
            'stream': False
        }
    )
    return response.json()['response']

# 입력 텍스트
context = """
삼성은 일제강점기 시절인 1938년 3월, 협동정미소 주인이었던 이병철이 대구부 수동(현 대구광역시 중구 인교동)에 '삼성상회(三星商會)'를 개업한 게 본 그룹의 시초이다. 당시 29세의 이병철은 경상남도 김해에서 농지 투기에 실패한 후 심기일전을 굳히며 자본금 3만 원으로 삼성상회를 세우게 되었다.
"""

qa_list = []

# 10개씩 10번 반복
for i in range(20):
    print(f"🔁 {i+1}번째 요청 중...")

    prompt = f"""
    다음 문장을 바탕으로 **10개의 질문과 답변 쌍**을 JSON 형식의 리스트로 생성하세요.
    각 항목은 "question"과 "answer" 키를 포함해야 합니다. 같은 질문이 반복되면 안 됩니다.

    문장:
    \"\"\"{context}\"\"\"

    출력 형식 예:
    [
      {{ "question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다." }},
      {{ "question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다." }}
    ]

    리스트 길이: 10개
    """

    output = ask_openorca(prompt)

    try:
        chunk = json.loads(output)
        if isinstance(chunk, list):
            qa_list.extend(chunk)
        else:
            print(f"⚠️ 리스트가 아님: {type(chunk)}")
    except json.JSONDecodeError:
        print("⚠️ JSON 파싱 실패. 원시 응답 출력:")
        print(output)

    time.sleep(1)  # 과도한 요청 방지 (옵션)

# 결과를 JSONL로 저장
with open("samsung_dataset.jsonl", "w", encoding="utf-8") as f:
    for qa in qa_list:
        f.write(json.dumps(qa, ensure_ascii=False) + "\n")

print(f"✅ 총 {len(qa_list)}개의 Q&A를 qa_dataset.jsonl 파일로 저장했습니다.")

2. 만드는 과정이 너무 지루하다...

  • 6번 실패해서 총 140개의 질문과 대답이 만들어졌다.

  • 근데 자세히 보면 질문이 아닌 평문이 question 에 들어가 있는 것을 볼 수 있다.
    이런 것은 미조정이 필요하다. 질문에 대한 답변이 이상한 것도 많이 보인다.

{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다."}
{"question": "이병철의 연령은 무엇인가요?", "answer": "29세입니다."}
{"question": "대구 수동에서 삼성상회가 개업된 현재 어디로 갈아입혀졌나요?", "answer": "대구광역시 중구 인교동"}
{"question": "삼성상회의 자본금은 얼마였는가요?", "answer": "3만 원"}
{"question": "이병철이 경영에 실패한 후 무엇을 굳게 하였나요?", "answer": "심기일전"}
{"question": "1938년 3월 삼성상회가 개업된 시점에, 이병철은 농지투기와 무엇을 연결했나요?", "answer": "자본금 3만 원"}
{"question": "이병철의 협동정미소는 일제강점기 시절에 주인으로써 어디를 지냈나요?", "answer": "1938년 3월"}
{"question": "삼성상회의 개업 시, 이병철은 그의 사업을 어떻게 하려는지 선언했나요?", "answer": "삼성상회는 상공수급업과 유통업에 투자하겠다"}
{"question": "1938년 3월의 시기에, 삼성은 어떤 분야에서 활동했나요?", "answer": "상공수급업과 유통업"}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다."}
{"question": "1938년 3월의 29세 이병철이 누가 되어 삼성상회를 개업했나요?", "answer": "당시 29세의 이병철"}
{"question": "삼성상회에서 자본금을 얼마나 투기했나요?", "answer": "3만 원으로 투기였습니다."}
{"question": "삼성상회가 개업한 곳은 대구부 수동입니다.", "answer": "현 대구광역시 중구 인교동"}
{"question": "당시 이병철의 성적 건전도는 어떤지", "answer": "심기일전을 굳히었습니다."}
{"question": "1938년 3월에서 삼성상회가 시작된 후, 삼성그룹의 본 시초는 무엇인가요?", "answer": "본 그룹의 시초입니다."}
{"question": "삼성상회는 경상남도 김해에서 농지투기로 실패를 겪었나요?", "answer": "Yes, he failed in nongji tugeo in Kimhae."}
{"question": "삼성상회의 협동정미소 주인이 어떤 사람인가요?", "answer": "이병철"}
{"question": "삼성상회는 무엇을 대표하는 기업명을 지었나요?", "answer": "삼성상회(三星商會)"}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다."}
{"question": "당시 이병철의 연령은 얼마인가요?", "answer": "29세였습니다."}
{"question": "투기에 실패한 후 자본금을 얼마나 모았나요?", "answer": "3만 원입니다."}
{"question": "삼성상회는 어떤 종류의 법인이었나요?", "answer": "협동정미소입니다."}
{"question": "삼성은 일제강점기 시절에 창설되었으며, 왜 그런지 설명해 주세요.", "answer": "김해 농지 투기를 겪고 자본금을 모아 비즈니스에 진입했습니다."}
{"question": "이병철은 어떤 산업의 가장 큰 공급주자가 되었나요?", "answer": "없음 (시초만 함)"}
{"question": "삼성상회는 현재 삼성그룹의 기원을 갖고 있나요?", "answer": "예, 본 그룹의 시초입니다."}
{"question": "대구 수동에서 삼성상회가 개업한 이유는 무엇인가요?", "answer": "현지 경쟁을 탈출하고 자본의 중심으로 옮기기 위해서입니다."}
{"question": "현재 삼성그룹이 가지고 있는 성공적인 사업을 시작한 이후 경쟁 분야에서 큰 공급주자가 되었나요?", "answer": "없음 (지난 10년은 포함)"}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "당시 이병철의 연령은 얼마였나요?", "answer": "29세였습니다."}
{"question": "그는 협동정미소 주인이었던 지역에서 삼성상회를 개업한 것입니까?", "answer": "대구부 수동입니다."}
{"question": "삼성상회가 시작된 지역의 현재 이름은 어딘가?", "answer": "대구광역시 중구 인교동"}
{"question": "이병철의 경영 투기로 실패한 후, 자본금을 얼마나 확보했나요?", "answer": "3만 원으로 세웁니다."}
{"question": "삼성상회는 현재 있는 형태의 그룹의 시초인 것입니까?", "answer": "본 그룹의 시초이며 대구 수동에서 개업한 삼성상회입니다."}
{"question": "김해에서 농지 투기로 실패했는가요?", "answer": "예"}
{"question": "삼성은 현재 어떤 형태의 그룹을 구성하고 있나요?", "answer": "본 그룹입니다."}
{"question": "삼성상회가 시작된 지역의 현재 이름은 무엇인가요?", "answer": "대구광역시 중구 인교동"}
{"question": "1938년 3월에 삼성상회를 개업한 것입니까?", "answer": "예"}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다."}
{"question": "당시 29세의 이병철은 자본금을 얼마나 모았나요?", "answer": "3만 원으로 모았습니다."}
{"question": "삼성상회가 협동정미소 주인인지 확인해보세요.", "answer": "예, 이병철은 협동정미소 주인이었습니다."}
{"question": "김해에서의 농지 투기로 실패한 후 어디로 이동했나요?", "answer": "대구 수동으로 이동하였습니다."}
{"question": "삼성상회가 세워진 당시 이병철의 연령은 얼마나 되었나요?", "answer": "29세입니다."}
{"question": "삼성상회를 설립한 후 이병철은 대구부에서 어디로 이동했나요?", "answer": "심기일전으로 이동하였습니다."}
{"question": "삼성상회의 초기 자본금은 얼마인가요?", "answer": "3만 원입니다."}
{"question": "1938년 3월 삼성상회가 개업한 지역은 어디었나요?", "answer": "대구부 수동에서 개업하였습니다."}
{"question": "삼성상회 설립 시 이병철의 투자 목적은 무엇이었나요?", "answer": "심기일전으로 자본금을 보증하려고 했습니다."}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다."}
{"question": "이병철의 나이가 몇살인가요?", "answer": "29세였습니다."}
{"question": "이병철은 경성남도 김해에서 무엇을 시작했는지?", "answer": "투기 때문에 실패한 농장입니다."}
{"question": "삼성상회의 자본금은 얼마였나요?", "answer": "3만 원으로 세웠습니다."}
{"question": "삼성의 시초는 협동정미소 주인이었던 누구입니까?", "answer": "이병철입니다."}
{"question": "삼성상회가 개업한 시기에 대국가는 어떤 지역으로 알려져 있습니까?", "answer": "일제강점기 시절입니다."}
{"question": "삼성상회의 개업 장소는 현재 대구광역시 중구 인교동에 위치해 있습니까?", "answer": "예, 현재 대구광역시 중구 인교동에 위치해 있습니다."}
{"question": "삼성상회를 설립한 이병철은 군인으로서의 활약을 굳히며 자본금을 얻었습니까?", "answer": "예, 심기일전에서 자본금을 얻었습니다."}
{"question": "삼성상회의 창업 목적은 무엇이었나요?", "answer": "현재까지 알려진 내용에 따라, 경영단체로서의 활동을 기대했을 것입니다."}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "당시 29세였던 이병철의 경우, 어디서 농장 투자를 실패한 것인가요?", "answer": "경상남도 김해입니다."}
{"question": "삼성상회는 누구로 주인이 되었나요?", "answer": "협동정미소 주인, 이병철입니다."}
{"question": "삼성상회의 자본금은 어느 도화지로 시작되었나요?", "answer": "3만 원입니다."}
{"question": "1938년 3월, 삼성상회가 런칭된 곳의 현재 지도에서의 위치는 어디나요?", "answer": "대구광역시 중구 인교동입니다."}
{"question": "삼성상회가 창설된 당시, 이병철의 나이는 얼마인가요?", "answer": "29세입니다."}
{"question": "삼성은 자본금 3만 원으로 삼성상회를 세우게 된 사유는 무엇이었나요?", "answer": "심기일전을 굳히기 위한 의지입니다."}
{"question": "1938년 3월, 삼성상회가 개업한 곳은 현재 대구광역시인 경춘구 중구 인교동에 위치합니다.", "answer": "현 대구광역시 중구 인교동"}
{"question": "1938년 3월, 이병철은 협동정미소 주인으로 삼성상회를 개업한 것입니다.", "answer": "삼성상회를 개업한 것입니다."}
{"question": "1938년 3월에 삼성상회가 창설된 곳의 현재 위치는 대구광역시 중구 인교동입니다.", "answer": "대구광역시 중구 인교동"}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다."}
{"question": "당시 이병철의 나이가 무엇인가요?", "answer": "29세입니다."}
{"question": "경상남도 김해에서 농지 투기로 실패한 이후, 그는 어디를 굳히셨나요?", "answer": "심기일전을 굳히셨습니다."}
{"question": "삼성상회의 자본금은 몇 만 원인가요?", "answer": "3만 원입니다."}
{"question": "삼성상회는 삼성 그룹의 시초이다.", "answer": "참고로 맞습니다."}
{"question": "1938년 3월 삼성상회가 개업한 지역은 대구부 수동에서 시작되었습니다.", "answer": "참고로 맞습니다."}
{"question": "삼성상회의 창설자는 이병철입니다.", "answer": "참고로 맞습니다."}
{"question": "1938년 3월 삼성상회가 개업한 시점은 일제강점기 시절입니다.", "answer": "참고로 맞습니다."}
{"question": "삼성상회는 협동정미소 주인이었던 이병철의 창작물입니다.", "answer": "참고로 맞습니다."}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "대한민국 시대의 삼성 창립자는 누구였나요?", "answer": "이병철이었습니다."}
{"question": "삼성상회가 어디에서 개업되었나요?", "answer": "대구부 수동에서 개업되었습니다."}
{"question": "당시 삼성 창립자의 연령은 몇 살인가요?", "answer": "29세였습니다."}
{"question": "삼성상회를 창업한 자본금 수량은 얼마였나요?", "answer": "3만 원입니다."}
{"question": "이병철의 경영 계획은 무엇인가요?", "answer": "경성남도 김해에서 농지 투기에 실패한 후, 심기일전을 굳히고 자본금 3만 원으로 삼성상회를 세웠습니다."}
{"question": "현대 삼성그룹의 시초인 이병철은 무엇을 실패한 후 창업했나요?", "answer": "경성남도 김해에서 농지 투기에 실패한 후입니다."}
{"question": "1938년 삼성상회가 개업된 시기는 무엇인가요?", "answer": "일제강점기 시절입니다."}
{"question": "삼성상회가 개업하면서 창업자의 대표적인 목적은 무엇이었나요?", "answer": "자본금 3만 원으로 삼성상회를 세우고 심기일전을 굳혔습니다."}
{"question": "삼성상회의 창립 시점에서 이병철의 장래 계획은 무엇인가요?", "answer": "자본금 3만 원으로 개업한 삼성상회를 통해 대기업으로 성장하는 계획이었습니다."}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다."}
{"question": "삼성의 창업자는 누구입니까?", "answer": "이병철입니다."}
{"question": "삼성상회에서 시작한 이병철의 나이는 몇 살인가요?", "answer": "29세였습니다."}
{"question": "삼성상회의 자본금은 얼마였나요?", "answer": "3만 원입니다."}
{"question": "삼성상회는 농업 투기로부터 시작되었나요?", "answer": "그렇습니다."}
{"question": "삼성상회에서 시작한 이병철의 경영 전략은 무엇인가요?", "answer": "심기일전 굳히기입니다."}
{"question": "삼성상회는 대구부에서 시작되었나요?", "answer": "대구수동에서 시작했습니다."}
{"question": "현재 대구광역시 중구 인교동은 어디에 위치해 있나요?", "answer": "대구광역시 중구 인교동은 대구시에 위치합니다."}
{"question": "삼성상회는 1938년 3월 당시의 주 업종은 무엇이었나요?", "answer": "그것은 정밀공기업입니다."}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다."}
{"question": "이병철의 나이는 몇 세였나요?", "answer": "29세였습니다."}
{"question": "삼성상회의 초기 자본금은 어느 정도인가요?", "answer": "3만 원입니다."}
{"question": "이병철은 경상남도 김해에서 농지 투기를 시도해 실패한 후 무엇을 했나요?", "answer": "심기일전을 굳히며 자본금 3만 원으로 삼성상회를 세웠습니다."}
{"question": "당시의 이병철은 무엇으로 정미소 주인이었나요?", "answer": "협동정미소 주인이었습니다."}
{"question": "삼성상회가 개업한 지역의 도시는 어디였나요?", "answer": "대구광역시 중구 인교동입니다."}
{"question": "삼성상회는 어떤 종목으로 활동했나요?", "answer": "삼성상회는 정미소 주인이었습니다."}
{"question": "1938년 3월 삼성상회가 개업한 후, 그 시점에서 대한민국의 경제는 어떤 상황인가요?", "answer": "일제강점기 시절입니다."}
{"question": "삼성상회로 그 시작은 삼성 그룹의 본 이음을 마크한 것인가요?", "answer": "삼성 그룹의 시초입니다."}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다."}
{"question": "본 그룹의 시초는 누구인가요?", "answer": "이병철입니다."}
{"question": "당시 이병철의 나이는 어떻게 되었나요?", "answer": "29세였습니다."}
{"question": "이병철의 경영생활에서 실패했던 농지 투기는 어디에서 있었나요?", "answer": "김해에서였습니다."}
{"question": "삼성상회의 자본금은 얼마였나요?", "answer": "3만 원입니다."}
{"question": "삼성상회가 뭐라고 콩한 기업인가요?", "answer": "협동정미소 주인이었습니다."}
{"question": "1938년 3월에 삼성상회를 세운 시점에서 현재의 대구광역시는 어떤 지역일까요?", "answer": "중구 인교동"}
{"question": "삼성상회의 창업을 시작한 시점에서 경영생활을 통해 굳힌 지속력은 무엇이었나요?", "answer": "심기일전"}
{"question": "1938년 3월의 삼성상회와 현재의 삼성그룹은 관련이 있는가요?", "answer": "본 그룹의 시초입니다."}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "삼성상회는 어디에서 시작되었나요?", "answer": "대구 수동에서 시작되었습니다."}
{"question": "삼성상회의 주인은 누구인가요?", "answer": "협동정미소 주인이던 이병철입니다."}
{"question": "삼성상회의 시작시점에서 이병철의 나이는 얼마인가요?", "answer": "29세였습니다."}
{"question": "이병철은 경상남도 김해에서 농지 투기를 시도한 적이 있나요?", "answer": "예, 실패했습니다."}
{"question": "삼성상회의 자본금은 얼마였나요?", "answer": "3만 원입니다."}
{"question": "삼성 그룹의 시초인 이병철의 주로 사용한 지역은 어디인가요?", "answer": "대구 수동"}
{"question": "1938년 3월에 삼성상회를 개업하면서, 이병철의 주요 목표는 무엇인가요?", "answer": "심기일전을 굳히고자 했습니다."}
{"question": "삼성상회의 창업시 이병철은 어떤 직업을 하고 있었나요?", "answer": "협동정미소 주인이었습니다."}
{"question": "1938년 3월에 삼성상회가 창설되면서, 대구 수동은 어떤 역할을 하였나요?", "answer": "시초의 장소로 등장했습니다."}
{"question": "삼성은 언제 창립되었나요?", "answer": "1938년 3월입니다."}
{"question": "대한민국 혹은 일본에서 삼성이 창립된 지역을 알아보세요?", "answer": "대구광역시 중구 인교동에서 창립되었습니다."}
{"question": "1938년 3월, 삼성상회를 개업한 이병철의 나이는 어떻게 되나요?", "answer": "29세였습니다."}
{"question": "삼성상회가 창설된 시기, 이병철은 경상남도 김해에서 뭘로 시작했나요?", "answer": "투기에 실패한 농업에서 시작했습니다."}
{"question": "1938년 3월, 삼성상회를 세우게 된 자본금의 액수는?", "answer": "3만 원입니다."}
{"question": "삼성상회는 뭘로 시작되었나요?", "answer": "심기일전을 굳히며 창설되었습니다."}
{"question": "1938년 3월에 삼성상회를 개업한 이병철의 나이는 어떻게 되나요?", "answer": "29세였습니다."}
{"question": "1938년 3월 삼성상회가 개업된 지역은 대구부 수동에서 시작되었습니다.", "answer": "현 대구광역시 중구 인교동"}
{"question": "1938년 3월, 삼성상회를 개업한 이병철의 자본금은?", "answer": "3만 원으로 세워졌습니다."}
{"question": "삼성 그룹의 시초인 삼성상회가 개업한 지역은 대구광역시 중구 인교동에서 시작되었습니다.", "answer": "당시 29세였습니다."}

3. 날것 그대로 훈련해보자.

# 필요한 라이브러리 임포트
from peft import LoraConfig, get_peft_model  # LoRA 기반 파인튜닝 구성
from transformers import AutoModelForCausalLM, AutoTokenizer  # 사전 학습 언어 모델 및 토크나이저
from datasets import load_dataset  # HuggingFace 데이터셋 로딩 유틸
from transformers import TrainingArguments, Trainer, DataCollatorForLanguageModeling  # 학습 관련 도구들
import torch
import os
from dotenv import load_dotenv  # .env 파일에서 환경변수 불러오기

# .env 파일 로드 (Hugging Face 토큰 등)
load_dotenv()

# ✅ 1. 사전학습 모델 및 토크나이저 로딩
model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16).to("mps")  # M1/M2 Mac용 MPS 디바이스 사용

# ✅ 2. JSONL 데이터셋 로딩 및 전처리
# 질문-답변 형태를 텍스트로 변환
def format_example(example):
    return {
        "text": f"### 질문:\n{example['instruction']}\n\n### 답변:\n{example['output']}"
    }

dataset = load_dataset("json", data_files="samsung_dataset.jsonl")["train"]
dataset = dataset.map(format_example)

# 텍스트를 토크나이즈하여 학습에 사용
def tokenize(example):
    return tokenizer(example["text"], padding="max_length", truncation=True, max_length=256)

tokenized_dataset = dataset.map(tokenize)

# ✅ 3. LoRA 파인튜닝 구성
lora_config = LoraConfig(
    r=4,                           # 랭크 (저차원 표현의 크기)
    lora_alpha=16,                 # LoRA 스케일링 인자
    target_modules=["q_proj", "v_proj"],  # 변경할 모델의 특정 모듈
    lora_dropout=0.05,             # 드롭아웃 비율
    bias="none",                   # 바이어스 업데이트 안 함
    task_type="CAUSAL_LM"          # 인과적 언어모델(Causal Language Modeling) 태스크
)

# 기존 모델을 LoRA 기반으로 변환
model = get_peft_model(model, lora_config)

# ✅ 4. 학습 설정
training_args = TrainingArguments(
    output_dir="./tiny_output",             # 결과 저장 경로
    per_device_train_batch_size=1,          # 배치 크기 (작은 모델이므로 1)
    num_train_epochs=3,                     # 학습 에폭 수
    logging_steps=10,                       # 로그 출력 간격
    save_steps=20,                          # 모델 저장 간격
    fp16=False,                             # MPS에서는 fp16 비활성화
    report_to="none"                        # WandB 같은 로깅 비활성화
)

# ✅ 5. Trainer 생성 및 학습 시작
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset,
    data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False)  # MLM 비활성화: causal LM용
)

trainer.train()  # 학습 수행

# ✅ 6. 결과 저장
model.save_pretrained("./tiny_output")
tokenizer.save_pretrained("./tiny_output")

4. 훈련 데이터로 학습

{'loss': 1.9945, 'grad_norm': 2.1987180709838867, 'learning_rate': 4.892857142857143e-05, 'epoch': 0.07}                                                  
{'loss': 1.7197, 'grad_norm': 4.602228164672852, 'learning_rate': 4.7738095238095245e-05, 'epoch': 0.14}                                                  
{'loss': 1.6852, 'grad_norm': 5.33855676651001, 'learning_rate': 4.6547619047619054e-05, 'epoch': 0.21}                                                   
{'loss': 1.7227, 'grad_norm': 3.4878764152526855, 'learning_rate': 4.5357142857142856e-05, 'epoch': 0.29}                                                 
{'loss': 1.6114, 'grad_norm': 4.651153087615967, 'learning_rate': 4.4166666666666665e-05, 'epoch': 0.36}                                                  
{'loss': 1.3088, 'grad_norm': 4.940483570098877, 'learning_rate': 4.297619047619048e-05, 'epoch': 0.43}                                                   
{'loss': 1.3351, 'grad_norm': 5.07916784286499, 'learning_rate': 4.178571428571429e-05, 'epoch': 0.5}                                                     
{'loss': 1.3304, 'grad_norm': 3.5228569507598877, 'learning_rate': 4.05952380952381e-05, 'epoch': 0.57}                                                   
{'loss': 1.223, 'grad_norm': 6.015748977661133, 'learning_rate': 3.940476190476191e-05, 'epoch': 0.64}                                                    
{'loss': 1.1076, 'grad_norm': 3.7627041339874268, 'learning_rate': 3.821428571428572e-05, 'epoch': 0.71}                                                  
{'loss': 1.1197, 'grad_norm': 5.114861488342285, 'learning_rate': 3.7023809523809526e-05, 'epoch': 0.79}                                                  
{'loss': 0.8869, 'grad_norm': 5.513253688812256, 'learning_rate': 3.5833333333333335e-05, 'epoch': 0.86}                                                  
{'loss': 0.8751, 'grad_norm': 3.935628890991211, 'learning_rate': 3.4642857142857144e-05, 'epoch': 0.93}                                                  
{'loss': 0.8308, 'grad_norm': 6.628445625305176, 'learning_rate': 3.345238095238095e-05, 'epoch': 1.0}                                                    
 33%|██████████████████████████████████████▎                                                                            | 140/420 [02:18<04:27,  1.05it/s]/Users/exoluse/Desktop/dev/fine_tuning/.venv/lib/python3.11/site-packages/torch/utils/data/dataloader.py:683: UserWarning: 'pin_memory' argument is set as true but not supported on MPS now, then device pinned memory won't be used.
  warnings.warn(warn_msg)
{'loss': 0.8719, 'grad_norm': 5.300260543823242, 'learning_rate': 3.226190476190477e-05, 'epoch': 1.07}                                                   
{'loss': 0.8935, 'grad_norm': 8.295411109924316, 'learning_rate': 3.107142857142857e-05, 'epoch': 1.14}                                                   
{'loss': 0.7802, 'grad_norm': 5.682880401611328, 'learning_rate': 2.9880952380952383e-05, 'epoch': 1.21}                                                  
{'loss': 0.7649, 'grad_norm': 5.584082126617432, 'learning_rate': 2.869047619047619e-05, 'epoch': 1.29}                                                   
{'loss': 0.7721, 'grad_norm': 6.427451133728027, 'learning_rate': 2.7500000000000004e-05, 'epoch': 1.36}                                                  
{'loss': 0.6995, 'grad_norm': 6.207462310791016, 'learning_rate': 2.6309523809523813e-05, 'epoch': 1.43}                                                  
{'loss': 0.8363, 'grad_norm': 5.660304069519043, 'learning_rate': 2.511904761904762e-05, 'epoch': 1.5}                                                    
{'loss': 0.6947, 'grad_norm': 7.700762748718262, 'learning_rate': 2.392857142857143e-05, 'epoch': 1.57}                                                   
{'loss': 0.7739, 'grad_norm': 6.668677806854248, 'learning_rate': 2.273809523809524e-05, 'epoch': 1.64}                                                   
{'loss': 0.6553, 'grad_norm': 7.087283134460449, 'learning_rate': 2.154761904761905e-05, 'epoch': 1.71}                                                   
{'loss': 0.7326, 'grad_norm': 6.270294666290283, 'learning_rate': 2.0357142857142858e-05, 'epoch': 1.79}                                                  
{'loss': 0.8958, 'grad_norm': 9.69637393951416, 'learning_rate': 1.9166666666666667e-05, 'epoch': 1.86}                                                   
{'loss': 0.71, 'grad_norm': 3.1117563247680664, 'learning_rate': 1.7976190476190476e-05, 'epoch': 1.93}                                                   
{'loss': 0.6139, 'grad_norm': 4.9040422439575195, 'learning_rate': 1.6785714285714285e-05, 'epoch': 2.0}                                                  
 67%|████████████████████████████████████████████████████████████████████████████▋                                      | 280/420 [04:36<02:13,  1.05it/s]/Users/exoluse/Desktop/dev/fine_tuning/.venv/lib/python3.11/site-packages/torch/utils/data/dataloader.py:683: UserWarning: 'pin_memory' argument is set as true but not supported on MPS now, then device pinned memory won't be used.
  warnings.warn(warn_msg)
{'loss': 0.7363, 'grad_norm': 7.326269626617432, 'learning_rate': 1.5595238095238098e-05, 'epoch': 2.07}                                                  
{'loss': 0.705, 'grad_norm': 7.917914867401123, 'learning_rate': 1.4404761904761905e-05, 'epoch': 2.14}                                                   
{'loss': 0.564, 'grad_norm': 9.029276847839355, 'learning_rate': 1.3214285714285716e-05, 'epoch': 2.21}                                                   
{'loss': 0.7955, 'grad_norm': 9.244638442993164, 'learning_rate': 1.2023809523809525e-05, 'epoch': 2.29}                                                  
{'loss': 0.5358, 'grad_norm': 4.001011848449707, 'learning_rate': 1.0833333333333334e-05, 'epoch': 2.36}                                                  
{'loss': 0.6721, 'grad_norm': 3.608583927154541, 'learning_rate': 9.642857142857144e-06, 'epoch': 2.43}                                                   
{'loss': 0.6187, 'grad_norm': 3.597546339035034, 'learning_rate': 8.452380952380953e-06, 'epoch': 2.5}                                                    
{'loss': 0.6923, 'grad_norm': 6.542040824890137, 'learning_rate': 7.261904761904763e-06, 'epoch': 2.57}                                                   
{'loss': 0.6048, 'grad_norm': 5.927872657775879, 'learning_rate': 6.071428571428572e-06, 'epoch': 2.64}                                                   
{'loss': 0.6313, 'grad_norm': 7.776735305786133, 'learning_rate': 4.880952380952381e-06, 'epoch': 2.71}                                                   
{'loss': 0.6881, 'grad_norm': 8.767589569091797, 'learning_rate': 3.690476190476191e-06, 'epoch': 2.79}                                                   
{'loss': 0.7705, 'grad_norm': 7.336471080780029, 'learning_rate': 2.5e-06, 'epoch': 2.86}                                                                 
{'loss': 0.6812, 'grad_norm': 4.623227596282959, 'learning_rate': 1.3095238095238096e-06, 'epoch': 2.93}                                                  
{'loss': 0.7268, 'grad_norm': 5.145808696746826, 'learning_rate': 1.1904761904761907e-07, 'epoch': 3.0}                                                   
{'train_runtime': 417.0556, 'train_samples_per_second': 1.007, 'train_steps_per_second': 1.007, 'train_loss': 0.9254244077773321, 'epoch': 3.0}           
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 420/420 [06:57<00:00,  1.01it/s]

5. 질문!

  • 오오...

  • 왜 3000원?

  • 흠...

  • 허허허...

6. 결과에 대한 고찰

질문, 답변 세트를 만드는 데에 어려움이 있었고 정확하지 않은 답을 학습하여 엉뚱한 답변을 받게 되었다. openorca가 문맥은 대충 정리는 했으나 문제가 있었다는 것을 꺠달았다.
정답율이 50% 정도 되는데... 아마 질문을 돌려서 하면 분명 오답을 낼 것이다.

profile
인공지능이라는 옷을 입었습니다. 뭔가 멋지면서도 잘 맞습니다.

0개의 댓글