파이썬 AI 실습/메타의 라마(llama) 파인튜닝(전문가GPT) 하기

메타의 라마(llama) 파인튜닝(전문가GPT) 하기 - 5. colab에서 튜닝된 모델 사용해 보기

파기차차 2024. 8. 18. 16:26
728x90
반응형
SMALL

ㅁ 개요

 

O 프로젝트 소개

 

 

 - 이번 글은 이전글(메타의 라마(llama) 파인튜닝(전문가GPT) 하기 - 4. 다운로드한 튜닝 모델파일 사용하기)에 이은 6번째 마지막 글로 이전글에서 다운로드한 튜닝 모델을 사용하는데 실패하여 이번에는 구글 colab에서 colab의 자원을 이용하여 서버를 띄우고 그 서버에 접속하여 채팅하는 방법에 대하여 알아보겠습니다.

 

 

O 완성된 프로그램 실행 화면

 

 

 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

아래 화면에서와 같이 코드를 실행하면 공개 url이 나오는데, 이 공개 url로 접속하면 AI챗봇 대화창이 나오고 이곳에서 ai에게 질의/응답을 하시면 되겠습니다.

 

 

 

 

 

 


ㅁ 세부 내용

 

O 완성된 소스

 

소스파일 : 소스파일 이름은 없음(그냥 전체 복사 후 구글 colab 셀에 붙여넣기 하시면 됩니다.)

from flask import Flask, request, jsonify, render_template_string
from flask_cors import CORS
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
from threading import Thread
from pyngrok import ngrok

app = Flask(__name__)
CORS(app)

# 모델 로드
model_dir = "./fine_tuned_llama"
model = AutoModelForCausalLM.from_pretrained(model_dir)
tokenizer = AutoTokenizer.from_pretrained(model_dir)

# HTML 템플릿
HTML_TEMPLATE = '''
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AI 챗봇</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; }
        #chatbox { height: 400px; border: 1px solid #ddd; overflow-y: scroll; padding: 10px; margin-bottom: 10px; }
        #user_input { width: 70%; padding: 5px; }
        #send_button { padding: 5px 10px; }
    </style>
</head>
<body>
    <h1>AI 챗봇</h1>
    <div id="chatbox"></div>
    <input type="text" id="user_input" placeholder="메시지를 입력하세요...">
    <button id="send_button">전송</button>

    <script>
        function addMessage(sender, message) {
            $("#chatbox").append("<p><strong>" + sender + ":</strong> " + message + "</p>");
            $("#chatbox").scrollTop($("#chatbox")[0].scrollHeight);
        }

        $("#send_button").click(function() {
            var userMessage = $("#user_input").val();
            if (userMessage.trim() !== "") {
                addMessage("You", userMessage);
                $.ajax({
                    url: "/generate",
                    type: "POST",
                    contentType: "application/json",
                    data: JSON.stringify({"text": userMessage}),
                    success: function(response) {
                        addMessage("AI", response.generated_text);
                    },
                    error: function(error) {
                        console.log("Error:", error);
                    }
                });
                $("#user_input").val("");
            }
        });

        $("#user_input").keypress(function(e) {
            if (e.which == 13) {
                $("#send_button").click();
            }
        });
    </script>
</body>
</html>
'''

@app.route('/')
def home():
    return render_template_string(HTML_TEMPLATE)

@app.route('/generate', methods=['POST'])
def generate_text():
    input_text = request.json.get('text', '')
    inputs = tokenizer(input_text, return_tensors="pt")
    with torch.no_grad():
        outputs = model.generate(**inputs, max_length=1000)
    generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return jsonify({'generated_text': generated_text})

def run_app():
    app.run(host='0.0.0.0', port=5003)

if __name__ == '__main__':
    # 백그라운드에서 Flask 앱 실행
    server_thread = Thread(target=run_app)
    server_thread.start()
    print("서버가 백그라운드에서 실행 중입니다.")

    # ngrok을 사용하여 public URL 생성
    ngrok.set_auth_token("ngrok사이트에서 발급받은 인증토큰 입력")
    public_url = ngrok.connect(5003)
    print(f"Public URL: {public_url}")

 

 

 

 

O 소스 실행 방법

 
 
 - 구글 colab에서 위의 소스코드를 셀에 붙여넣어 실행하시면 ngrok이 웹으로 접속가능한 공개 url을 만들어 주는데, 그 url로 접속하시면 AI챗봇창에 연결되어 질의/응답을 주고 받을 수 있습니다.
 

 

 

 


 
 

O 주요 내용

 

 

이전 글과 다른 부분만 간단하게 설명드리겠습니다.

 

 

'여기서부터 ===========> 여기까지'는 이전 글의 내용과 동일합니다.

 

 

================  여기서 부터 ==========================

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

================  여기까지 ==========================

 

1.파인 튜닝한 파일이 서버에 잘 저장되었습니다.

플라스크 웹서버와 공개url을 얻기 위한 ngrok 관련 모듈을 설치해 줍니다.

 

 

 

 

 

 

2.아래와 같이 코드를 실행합니다. (위의 완성된 소스 참고)

 

 

 

2-1 코드가 성공적으로 실행되기 위해서는 ngrok 사이트 회원가입 후 아래와 같이 authtoken을 발급받아 복사한 후

소스하단에 ngrok.set_auth_token('ngrok에서 발급받은 인증토근 입력') <-- 이 부분에 authtoken을 입력합니다.

 

 

 

 

 

 

 

 

3. 마지막 줄을 보면 'https://021b-34-173-126-131.ngrok-free.app' <-- 이렇게 된 부분을 클릭합니다.

 

 

 

4. 그러면 아래와 같이 뜨는데, ngrok에서 띄우는 안내 페이지이며, 왼쪽 하단의 'Visit Site'를 클릭합니다.

 

 

 

5. 드디어 아래와 같이 우리가 원하던 ai채팅창이 떳습니다. 여기서 우리는 AI챗봇과 원하는 질의/응답을 하실 수 있습니다.

 

 

 


 

ㅁ 정리

 

O 우리가 배운 내용

 
 - 오늘은 이전글에서 다운로드한 튜닝 모델을 사용하는데 실패하여 구글 colab의 자원을 이용하여 서버를 띄우고 그 서버에 접속하여 채팅하는 방법에 대하여 알아보았습니다.

 


 

다만, 최초 포스팅 시 우리가 하고자 했던 튜닝 결과(who are you? 라고 물어봤을때 i am pygichacha 라고 대답하지 않음)를 얻지 못했습니다.

 

그리고 라마2의 응답도 조금 이상합니다.

따라서 무엇이 잘못되었는지, 어떻게 하면 이런 부분들을 개선할 수 있는지에 대해 다음편에서는 우리가 학습시킨 내용을 잘 이해하고 원하는 응답을 해줄 수 있도록 하는 개선방법에 대해서 알아볼 예정입니다.

 

 

 

이것으로 메타의 라마2를 이용한 파인튜닝하기 포스팅을 마칩니다. 오늘은 여기까지이며, 위의 내용이 유익하셨다면, 광고 한번씩만 클릭 부탁드립니다.

 

 

감사합니다.

728x90
반응형
LIST