llama3_데이터생성_파인튜닝_finetuning_gguf_ollama_rag

Поделиться
HTML-код
  • Опубликовано: 10 янв 2025

Комментарии •

  • @HKCODE
    @HKCODE  7 месяцев назад +5

    코드 깃허브에 전체 공유함
    github.com/hyokwan/llama_repository
    - ModelFile 샘플도 github 내 modelfile 폴더에 저장함
    - dataset 샘플도 github 내 dataset 폴더에 저장함
    - ollama 모델파일 정보 불러오기 ollama show [모델명] --modelfile
    ★깃허브 외에 코랩 사본만들기로 작업하실분은 아래 활용★ -뷰어-
    [1. data preparation]
    drive.google.com/file/d/1mX78E3T0HBd6sr1AGVeMVJAd7tnAWTJX/view?usp=sharing
    drive.google.com/file/d/10rWF0B6OKGbp4Yx1U04dN7H6DNvSyLIy/view?usp=sharing
    [2. fine tuning]
    colab.research.google.com/drive/1ufoWVRfdLO1JYuPeRA886XmAzUShqyZ8?usp=sharing
    [3. load and save]
    colab.research.google.com/drive/1nqXbcqAaKP7I4z1YwXCSTSbDc-JTFTGk?usp=sharing
    [4. retrain]
    colab.research.google.com/drive/1aU4a7qNGVTGuhI3ZwO6hmqtf0GKW_Df7?usp=sharing
    [5. hf to gguf]
    colab.research.google.com/drive/1agoj1qP8FnO-yQyx3R50oBsGEPBrd8ZL?usp=sharing
    [6. RAG]
    : github.com/hyokwan/llama_repository *pdf 폴더도 같이!!!

    • @dangungo
      @dangungo 7 месяцев назад

      정말 감사합니다.

  • @yuko7071
    @yuko7071 3 месяца назад

    고생 많으셨습니다. 좋은 정보 감사해요.

  • @musicphimhan7530
    @musicphimhan7530 6 месяцев назад +1

    강의 감사합니다.

  • @five-line-lion
    @five-line-lion 7 месяцев назад

    좋은 자료 공유 감사합니다.

  • @geoffrey3961
    @geoffrey3961 7 месяцев назад +1

    감사합니다. 잘 볼게요~

  • @byungtaekim2753
    @byungtaekim2753 Месяц назад

    2번째 질문은...Msty 로도 서비스를 하든데 ollama 와는 많이 다른가요?
    실제 기업에서 sllm gguf 를 만들어서 서비스 할때는 어떤걸 주로 많이 사용하나요? gradio 나 streamlit 도 가능할까요?
    아님 fast-api나 flask 로도 혹시 가능할까요...감사합니다~

    • @HKCODE
      @HKCODE  Месяц назад +1

      POC가 아닌 실 프로젝트 에서는 gradio나 streamlit 말고 fast-api 나 flask로 api 분석서버 오픈하고 화면은 자바나(공공사업이라면) js랑 연동하여 개발하는게 일반적입니다~

  • @daebbong
    @daebbong 5 месяцев назад +1

    강의잘봤습니다. 한가지 궁금한게 있는데요 제가 허깅페이스는 모델만 활용한다는 개념이 있어서 그런것 같은데요, 파인튜닝 학습데이터를 허깅페이스에 다시 올리는 이유는 뭔가요? Colab 기반이면 그냥 변환된 포맷도 구글드라이브에 있어도 되지않나해서요.

    • @HKCODE
      @HKCODE  5 месяцев назад +1

      @@daebbong 네 전혀상관없습니다! 다만 허깅페이스는 깃허브와같이 형상관리를 해주어서 튜닝데이터의 변화관리를 해주기 때문에 사용합니다

  • @ariari-g3u
    @ariari-g3u 6 месяцев назад

    정말 감사합니다 !! 설명 너무 잘해주셔서 무사히 마쳤습니다!!
    ollama 로 기존 8B-instruct 를 할때는 VRam 이 5GB정도 차지하는데
    8B-instruct 모델을 파인 튜닝하고 나서는 15GB쯤 VRam이 차지하네요.. ㅜ 데이터는 주신 csv로 진행하였습니다.
    파인튜닝 할때, 하이퍼 파라메터를 조정해서 모델의 VRam 사양을 낮출 수 있을까요?

  • @byungtaekim2753
    @byungtaekim2753 Месяц назад

    정말 잘 보고 갑니다..그런데 강사님 질문이 있는데요.
    현재 시점에서 어떤 한국어모델을 가져와서 파인튜닝 후 서비스하는게 성능과 정확도가 좋을까요?
    1안 llama3.2 2안 gemma 3안 llama3.2-ko-8b? 4안 llama3.2-ko-8b-instruct 등 질문드립니다.~~😄

    • @HKCODE
      @HKCODE  Месяц назад +1

      일단 전 2안 gemma로 보긴합니다.
      내년에 답은 llama 일듯 합니다 (한국어 정식 지원된다는 가정하에, 이번년도 말에 될줄 알았는데 ... 안된 상황이기 때문에요)
      추가로 모델중에 instruct 모델이 문제/답 질의응답에 특화된 모델이니 챗봇이라면 instruct 들어간 모델이 좋습니다 (질의응답 특화모델임)

    • @byungtaekim2753
      @byungtaekim2753 Месяц назад +1

      @@HKCODE 진심으로 감사드립니다.

  • @bestdriver1863
    @bestdriver1863 5 месяцев назад

    안녕하세요. 혹시 허깅페이스에 파인튜닝한 모델을 업로드하지 않고 추가학습 시킬 수는 없나요?
    저는 베이스모델에 어뎁터를 결합한 이후 추가 데이터를 학습시키고 있는데요.
    이렇게 하면 추가학습이 완료된 이후 모델을 사용할 때 두 어뎁터를 모두 결합해야하나요?
    아니면 제 추가학습 방식이 잘못 되었나요?

  • @jlive8135
    @jlive8135 5 месяцев назад

    라마3-8B모델 L4로 파인튜닝중인데 메모리 부족으로 계속 세션종료됩니다. ㅜㅠ

  • @siuahn8237
    @siuahn8237 4 месяца назад

    혹시 이 모델을 서버에 띄워서 구동한다고하면 서버 성능이 어느정도 되야 될까요?
    학습시킬땐 코랩을 사용하고 실 사용할때는 어느정도 사양이 되어야되는지 궁금합니다!

  • @최연준-o2y
    @최연준-o2y 4 месяца назад

    rag를 사용해서 답변을 생성하려 했을 때 아래같은 오류가 나옵니다.
    ConnectionError: HTTPConnectionPool(host='localhost', port=11434): Max retries exceeded with url: /api/generate (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))
    코랩과 로컬 서버간 연동이 안돼서 그런 것 같은데 이는 코랩에서 사용이 불가능한걸까요?? ㅠㅠ
    노트북에서 실습을 진행중이라 CPU 환경에서 돌리기가 좀 부담스럽네요 ㅠㅠ

  • @sweetpour
    @sweetpour 5 месяцев назад

    감사합니다~!

  • @skilove13hong33
    @skilove13hong33 6 месяцев назад

    좋은 강의 감사합니다.한국어 요약 문서 데이터셋을 학습시킬때 instruction과 output형태로 index를 변환해서 동일하게 학슫시키면 될까요?아니면 프롬프팅에서 한국어 요약 관련된 내용을 추가해야 될까요?

    • @HKCODE
      @HKCODE  6 месяцев назад

      한국어데이터셋 요약등을 위해서는 요약 내용을 추가해야합니다. 다만 아래 링크 내용을 참고해보면 마커에서 요약 등 고 퀄리티 데이터셋을 이미 공개해둔게 있어서 관련 내용도 참고하면 좋을듯 합니다! didi-universe.tistory.com/entry/%EB%8C%80%EC%9A%A9%EB%9F%89-%ED%95%9C%EA%B5%AD%EC%96%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8B-Markr-AI-KoCommercial-Dataset

  • @light8013
    @light8013 6 месяцев назад

    안녕하세요 교수님 좋은 강의 올려주셔서 감사드립니다.
    질문이 있는데 받아주시면 감사하겠습니다.
    저장하신 파인튜닝된 모델과 저장하신 어댑터는 다른 개념인가요?

    • @HKCODE
      @HKCODE  6 месяцев назад +1

      안녕하세요!
      일단 파인튜닝된 모델과 어댑터는 비슷하지만 다르긴 합니다!
      쉽게말해서 어댑터만 저장했을 경우
      baseModel이 있어야만 작동을 함
      (예를 들어 baseModel이 Meta-Llama-3-8B-Instruct 모델이면 매번 해당 모델을 불러오고 어댑터 연결해야함
      ## baseModel + 어댑터
      model = PeftModel.from_pretrained(baseModel, new_model)
      만약 어댑터를 붙인 위코드에서 아래 코드까지 실행 시킨다면!
      mergedModel = model.merge_and_unload()
      baseModel이 없어도 단독으로 실행 가능한 병합모델로 활용 가능합니다!
      (다음부턴 baseModel 을 불러오지 않고 병합시킨 모델만 불러와서 바로 사용가능함)
      baseModel의 의존성을 가진 상태로 모델을 관리하는지 아니면 독립적으로 관리하는지의 포인트입니다!

    • @light8013
      @light8013 6 месяцев назад

      ​@@HKCODE
      선생님 가르쳐주셔서 고맙습니다.
      혹시 선생님 말씀을 아래처럼 이해해도 되나요?
      1. baseModel 을 파인데이터셋으로 파인튜닝하여 new_model 이라는 어댑터를 만들 수 있습니다.
      이 어댑터들은 파인 튜닝 데이터셋에 따라서 하나의 baseModel로 여러개의 new_model 어댑터를 만들 수 있습니다.
      2. 이 어댑터를 한번 만들어두면 다시 똑같은 데이터셋을 학습시킬 필요가 없다는 장점이 있습니다.
      baseModel에 어댑터인 new_model을 붙이기만 하면 되기 때문입니다.
      3. 데이터셋1 로 만든 어댑터1과 데이터셋2로 만든 어댑터2가 있을 때 어댑터끼리 병합 가능합니다.
      4. 단, 같은 베이스모델로 학습한 어댑터끼리만 병합 가능합니다.
      라고 이해해도 되는지 봐주시면 정말 감사하겠습니다
      긴 질문을 읽어주셔서 감사합니다.

    • @HKCODE
      @HKCODE  6 месяцев назад +1

      @@light8013 네 맞습니다. 다만 3번 어댑터끼리 합치진 않고 base에 어댑터는 하나만 연결 하기때문에 하나연결 하고 병합하고 병합한 모델예 신규 어댑터 연결하고 병합하는 형태로 진행합니다!

    • @light8013
      @light8013 6 месяцев назад

      @@HKCODE 선생님 답변해주셔서 정말 감사드립니다.

  • @light8013
    @light8013 6 месяцев назад

    안녕하세요 교수님 좋은 강의 올려주셔서 감사드립니다.
    질문이 있는데 받아주시면 감사하겠습니다.
    llama 확장자에 대해 혹시 이렇게 이해해도 되는지 여쭤보고 싶습니다.
    1. llama 모델은 다양한 확장자가 있습니다.
    2. 다만, 허깅페이스에 모델을 저장할 때는 .hf 확장자로 저장이 됩니다.
    3. 모델을 로컬에 저장할 때는 llama.cpp를 통해서 .hf 확장자를 .gguf 확장자로 저장해야 합니다.
    .gguf 확장자로 변환해야 하는 이유는, .gguf 확장자가 로컬 pc에서 ollama 또는 파이썬을 통해 모델을 import하여 사용 가능하기 때문입니다.
    이렇게 이해했는데 제가 제대로 이해했는지 봐주시면 감사하겠습니다

    • @light8013
      @light8013 6 месяцев назад

      그리고 하나만 더 질문을 드리고 싶습니다.
      강의 54분에 ModelFile2를 만드신 이유에 대해서도 가르쳐주시면 정말 감사하겠습니다.

    • @HKCODE
      @HKCODE  6 месяцев назад

      @@light8013 54분에 ModelFile2만든건 이미 동일파일명이 있었어서 그런겁니다! 그냥 하나만 놔두시면 됩니다! 그리고 위에서 이해하신게 맞습니다!
      추가로
      2. 허깅페이스에 올릴때 파일 확장자가 .hf로 저장되지는 않습니다.
      허깅페이스는 모델을 웹상에서 형상관리(버전업 등) 편하게 하기 위하여 올려둔다라고 보면됩니다
      * 프로젝트 사이트에 따라 (예를들어 국방) 보안때문에 인터넷이 연결안되는경우 보통 로컬에서 돌려야하는데 이때 허깅페이스에 접속을 못하기때문에 gguf 확장자로 변환하여 로컬모드로 돌리는 겁니다! llama.cpp는 정확히 이해하신거 같습니다!
      추가 비디오 영상에서는 local모드 + rag를 조금더 완성형태로 올릴 예정입니다!

    • @light8013
      @light8013 6 месяцев назад

      @@HKCODE 선생님 많은 가르침 주셔서 감사드립니다.

  • @이유정-p3g
    @이유정-p3g 6 месяцев назад

    영상 감사합니다. 근데 코드 똑같이 가져다가 따라하는데 허깅페이스에 모델 업로드하는 단계의 코드 중에서 기존 파인튜닝해서 구글 드라이브에 저장한 모델을 불러와서 잘 작동되는지 테스트하는 부분이 좀 이상합니다.. 파인튜닝해서 잘 작동하는지 확인했을 때는 원하는 답변만 출력하는데 해당 부분에서는 원하는 답변 이후에 추가적으로 너무 많은 답변이 출력됩니다...ㅜㅜ

    • @이유정-p3g
      @이유정-p3g 6 месяцев назад

      파인튜닝할 때는 데이터셋에 종료 토큰을 추가하는 과정이 있는데 허깅페이스에 올리는 단계에서는 base model을 불러와서 잘 작동되는지 테스트하기 위해 base model의 tokenizer를 불러오는 과정에는 종료 토큰 추가하는 과정 없는데 이것 때문인가요?

    • @이유정-p3g
      @이유정-p3g 6 месяцев назад

      mergeModel로도 잘 출력하는지 확인해 봤는데 "알약 먹을 수 있어요?"라는 입력을 보냈을 때
      네 알약 먹을 수 있어요! 감사합니다! 알약 먹었어요! ㅎㅎ 선생님! 선생님! 선생님! ㅎㅎ! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선생님! 선
      위와 같이 출력이 됩니다 ㅠㅠ

    • @HKCODE
      @HKCODE  5 месяцев назад

      답변이 늦어서 죄송합니다. 최근에 프로젝트 준비하느라., 유튜브를 조금 늦게 확인했네요
      아래내용은 EOS(End Of Sequence) 토큰을 못찾아서 무한 반복되는 현상으로 학습시에는 eos_token을 명시적으로 주었으나 검증할때 아래 내용으로 검증하면 무한재생되지 않습니다!
      파인튜닝 링크에도 검증방법 (verify)쪽에 내용 추가해 놨습니다!
      (파인튜닝 모델 자체는 문제가 없어서 그대로 두었는데 업데이트가 늦었네요 죄송합니다)
      링크 참조 (verify 부분에 7/22추가한 내용)
      colab.research.google.com/drive/1ufoWVRfdLO1JYuPeRA886XmAzUShqyZ8?usp=sharing#scrollTo=BD7WISoKuXAo
      아래는 관련 터미네이터 적용하여 확인하는 부분입니다!
      def generatePrompt(instruction):
      PROMPT = '''당신은 유용한 AI 어시스턴트입니다. 사용자의 질의에 대해 친절하고 정확하게 답변해야 합니다.
      You are a helpful AI assistant, you'll need to answer users' queries in a friendly and accurate manner.'''
      messages = [
      {"role": "system", "content": f"{PROMPT}"},
      {"role": "user", "content": f"{instruction}"}
      ]
      input_ids = tokenizer.apply_chat_template(
      messages,
      add_generation_prompt=True,
      return_tensors="pt"
      ).to(model.device)
      terminators = [
      tokenizer.eos_token_id,
      tokenizer.convert_tokens_to_ids("")
      ]
      outputs = model.generate(
      input_ids,
      max_new_tokens=200,
      eos_token_id=terminators,
      do_sample=True,
      temperature=0.6,
      top_p=0.9
      )
      print(tokenizer.decode(outputs[0][input_ids.shape[-1]:], skip_special_tokens=True))
      prompt = f"""
      ### User:

      hkcode 유튜브 채널은 누가 운영하나요
      ### Assistant:"""
      # prompt = "hkcode 유튜브 채널은 누가 운영하나요?"
      generatePrompt(prompt)

    • @datastudy-s5s
      @datastudy-s5s 4 месяца назад

      @@HKCODE 검증해서 준 코드로 해보았는데도, 반복되는 메시지를 계속 출력하네요 ㅠㅠ
      The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
      이런 오류가 뜰때는 어떻게 해야할까요

  • @Han_taz
    @Han_taz 6 месяцев назад

    혹시 프롬프트를 Llama3 프롬프트 형식이 아니라 알파카 형식으로 사용하시는 이유가 있으실까요?

    • @HKCODE
      @HKCODE  6 месяцев назад

      안녕하세요^^ 답변이 늦었습니다! 보통 개발자입장에서 미스트랄이나 알파카 포맷을 많이 사용하는 이유가.. 알파카나 미스트랄 포맷이 사용자에게 더 친숙하거나 사용하기 쉬운 경우가 많습니다. 이게 사용자 피드백과 사용 편의성을 고려하여 설계되었기 때문에, 실제 애플리케이션에서 더 유용합니다! (문제/답 형태이기도 하고 실제 알파카 포맷으로 튜닝 후 성능도 좋은 평가를 받고 있습니다)
      최근에 나온 ORPO등 다른 튜닝 방식에서는 조금 실험을 더 해봐야 하지만요!
      아래는 알파카 포맷 예시 입니다!
      {
      "instruction": "문장 요약을 해보세요.",
      "input": "문장원문.",
      "output": "텍스트 요약 결과"
      }

  • @임대호-o3u
    @임대호-o3u 7 месяцев назад

    제가 그래픽카드가 gtx370(ram2gb) 사양밖에 안되는데 파인튜닝 많이 어려울까요?

    • @HKCODE
      @HKCODE  7 месяцев назад +1

      네 메모리 2gb면 colab으로 그냥 파인튜닝하고 rag도 colab으로 띄우는게 맞습니다. rag 를 ollama 말고 colab으로 하는부분도 올려볼께요