본문 바로가기

LM Studio 기능 및 사용법 - Llama 3.1-7B 로컬 챗봇 만들기(파이썬)

hyunicecream 2024. 9. 25.

블로그 로고
블로그 로고

LM Studio 다운로드

먼저 LM Studio를 사용하기 위해서는 다운로드하셔야 합니다. 

링크를 들어가시면 다운로드 받으실 수 있습니다. 

다운로드 링크 : LM Stuido 다운로드

링크를 통해 들어가시면 다음과 같은 화면이 나오는데, 자신의 OS에 맞게 다운로드하고 설치해 주시면 끝입니다.

LM Studio 다운로드 화면
LM Studio 다운로드 화면

LM Studio 기능 1 - Home 화면 (모델 다운로드)

LM Studio를 실행하시면 다음과 같은 화면이 나옵니다. 

LM Studio는 Huggingface에 공개되어 있는 양자화모델(gguf)을 쉽게 검색하고 다운로드하실 수 있습니다. 

첫 화면에는 해당 화면에 인기 있는 Model을 추천해 줍니다. 

! LM Stuido는 인터넷 연결 없이 사용할 수 있습니다. 하지만 모델을 다운로드하실 때는 반드시 인터넷이 연결되어 있어야 합니다. 

LM Studio Home 화면
LM Studio Home 화면

LM Studio 아래에 추천하고 있는 모델들입니다. 

LM Studio 모델 추천 화면
LM Studio 모델 추천 화면

한 번 Llama 3.1도 검색해 보겠습니다. 2번째 Search 돋보기 모양과 똑같은 기능입니다.

Llama 3.1 검색화면
Llama 3.1 검색화면

다음과 같은 Llama 3.1 관련 모델들을 보실 수 있습니다. 

Llama 3.1 검색 결과
Llama 3.1 검색 결과

Huggingface에 Llama 3.1 모델을 활용하여 튜닝한 모델들도 보실 수 있습니다. 

오른쪽 화면은 해당 모델에 대한 모델 크기를 선택하실 수 있습니다. 

보시면 총 3개의  초록색, 파란색, 빨간색 메시지를 보실 수 있습니다.

  Full GPU OFFLOAD
POSSIBLE(초록색) 
GPU OFFLOAD MAYBE
POSSIBLE
(파란색)
Likely too large
for this machine
(빨간색)
모델 사용가능 O O X
GPU 사용가능 O X

다운로드 화면
다운로드 화면

여기서 오른쪽에 "Downlad"를 클릭하시면 바로 모델을 다운로드하실 수 있습니다. 

그러면 맨 아래에 다운로드 상태바가 파란색으로 변하면서 다운로드 진행률을 보실 수 있습니다.  

모델 다운로드 상태바
모델 다운로드 상태바

LM Studio 기능 2 - My models 화면 (모델 관리)

다운로드한 모델을 왼쪽 사이드 마지막에 폴더 모양으로 표시된 My Models에서 관리하실 수 있습니다.

! 모델 용량이 크기 때문에 여러 개 다운로드하시면 용량이 금방 찰 수 있습니다. 

사용하지 않거나, 사용해 봤는데 마음에 들지 않는 모델을 삭제하실 수 있습니다. 

LM Studio My models 화면
LM Studio My models 화면

LM Studio 기능 3 - AI Chat 화면 (Llama 3.1 모델 사용)

3번째 말풍선 아이콘인 AI Chat을 들어오면 최상단에 "Select a model to load" 클릭하시면 됩니다.

LM Stuido AI Chat 페이지 화면
LM Stuido AI Chat 페이지 화면

여기서 다운로드 받으신 모델 중에서 사용하고 싶은 모델을 선택해 주시면 됩니다. 

다운로드된 모델 선택 화면
다운로드된 모델 선택 화면

테스트해보겠습니다. 다음 아래 질문으로 물어보겠습니다.

"미역국을 만들려고 하는데, 필요한 재료와 만드는 방법에 대해 설명해 줄래?"

LLama 3.1 AI Chat
LLama 3.1 AI Chat

잘 대답해 준 걸 볼 수 있습니다.  다만, 답변속도가 좀 느립니다. 

그리고 아래에 다음과 같은 상태창이 있는데, 상태 창의 내용은 다음과 같습니다.

상태창
상태창

  1. time to first token: 2.46s
    • 첫 번째 토큰이 생성되기까지 걸린 시간입니다. 모델이 응답을 시작하는 데 2.46초가 걸렸다는 의미입니다.
  2. gen t: 33.81s
    • 전체 텍스트 생성에 걸린 총시간입니다. 응답 전체를 생성하는 데 33.81초가 소요되었습니다.
  3. speed: 9.24 tok/s
    • 초당 생성된 토큰의 수입니다. 평균적으로 초당 9.24개의 토큰을 생성했습니다.
  4. stop reason: eosFound
    • 텍스트 생성이 멈춘 이유입니다. "eosFound"는 "End of Sequence Found"의 약자로, 모델이 응답을 완료했다는 것을 의미합니다.
  5. gpu layers: 20
    • GPU에서 처리된 모델 레이어의 수입니다. 20개의 레이어가 GPU에서 처리되었습니다.
  6. cpu threads: 4
    • 사용된 CPU 스레드의 수입니다. 4개의 CPU 스레드가 작업에 사용되었습니다.
  7. mlock: true
    • 메모리 잠금 기능이 활성화되어 있음을 나타냅니다.  모델이 사용하는 메모리가 디스크로 스왑 되지 않도록 보장합니다.
  8. token count: 378/2048
    • 생성된 토큰 수와 최대 허용 토큰 수의 비율입니다. 총 378개의 토큰이 생성되었으며, 최대 2048개까지 생성 가능했습니다.

CPU와 GPU 사용량도 확인해 봤는데, 질문할 때마다 잘 사용된 것을 확인하실 수 있습니다. 

CPU, GPU 사용량
CPU, GPU 사용량

그리고 오른쪽 상단에 톱니바퀴 모양의 설정을 누르면, 모델을 미세조정 하실 수 있습니다.

미세 조정할 때는 많이 어렵습니다. System Prompt와 Temperature만 설정한다고 생각하시고 하시면 될 것 같습니다. 

Llama 3.1 모델 설정 화면
Llama 3.1 모델 설정 화면

LM Studio 기능 4 - Playgroud 화면 (멀티 모델 세션)

LM Studio의 Playground기능은 멀티 모델 세션 기능입니다. 

여러 모델을 한 번에 로드하고, 동일한 프롬프트로 다른 모델들을 평가할 수 있게 해 줍니다. 그리고 API를 사용하여 다중 LLM앱을 구축할 수 있습니다.

컴퓨터 성능이 엄청 좋지 않으면, 하지 않는 걸 추천드립니다. 컴퓨터가 멈춥니다. 

Playground 화면
Playground 화면

아래 로컬 서버포트로 연결하여 모델의 성능을 비교 평가 할 수 있습니다. 어떤 모델이 해당 내가 만들려고 하는 LLM 모델과 어울리는지 평가해보실 수 있습니다. 

LM Studio 기능 5 - Local Server 화면  "로컬 챗봇 만들기(파이썬)"

LM Studio 기능 - Local Server - 처음 화면 및 서버에 모델 연결

4번째 탭에 보시면 로컬 서버에 다운로드 받은 LLM 모델을 연결하여 사용할 수 있게 할 수 있습니다. 

Local Server 접속 화면
Local Server 접속 화면

일단 최상단에 모델을 로드해줍니다.

로드하면 다음과 같은 화면이 나옵니다.

아까와 다르게, 파란색으로 모델이 로컬 서버와 연결된 것을 보실 수 있습니다. 

Local Server 모델 Load 화면
Local Server 모델 Load 화면

그리고 해당 Server logs를 통해 어떻게 작동되고 있는지 확인하실 수 있습니다.

Server logs 화면
Server logs 화면

LM Studio 기능 - Local Server 3 가지 기능

우선 3가지로 나눠 말씀드리면 다음과 같습니다.

1.Local Inference Server는 OpenAI API 엔드포인트를 모방하는 로컬 HTTP로 서버를 시작할 수 있게 하는 것입니다.

쉽게 말하면, OpenAI의 서비스처럼 작동한다는 뜻입니다. 

더 쉽게 말하면, OpenAI에 연결하는 대신, 자신의 로컬 컴퓨터에서 비슷한 AI 서비스를 실행할 수 있게 해 준다는 겁니다.

이렇게 하면, 인터넷 연결 없이도 AI를 사용할 수 있습니다.

간단히 요약하면 이 기능은 컴퓨터를 작은 AI 서버로 만들어주는 도구라고 생각하시면 됩니다.
모든 작업 과정이 로컬 컴퓨터 안에서 이루어집니다. 

그리고 아래 Start ServerStop Server으로 서버를 연결하고 연결을 끊을 수 있습니다. 

Local Server 기능-1
Local Server 기능-1

2.Embedding Model Settings는 텍스트를 숫자 벡터로 변환하는 특별한 AI 모델을 설정하는 부분입니다. 임베딩 모델은 주로 RAG(Retrieval-Augmented Generation) 시스템에서 중요한 역할을 합니다.

RAG란 AI가 질문에 답할 때 외부 정보를 검색하여 더 정확하고 풍부한 답변을 생성하는 기술입니다. 임베딩 모델은 이 과정에서 텍스트를 쉽게 검색할 수 있는 형태로 변환합니다.

'nomic-ai/nomic embed text v1.5' 모델을 다운로드받아 사용할 수 있습니다. 모델을 설치하면, RAG 시스템을 구축할 때 외부 서비스 없이 로컬에서 직접 텍스트를 벡터로 변환할 수 있습니다.

일반적인 대화에서는 이 임베딩 모델이 필요 없지만, 대규모 문서 검색이나 정보 추출이 필요하신 분만 사용하시면 될 것 같습니다.

Local Server 기능-2
Local Server 기능-2

임베딩 모델을 다운로드 받으시면 다음과 같이 나오는 것을 확인하실 수 있습니다. 

임베딩 모델 다운로드 및 로드 화면
임베딩 모델 다운로드 및 로드 화면

다음 3.Examples는 LM Studio에서 제공하는 다양한 LLM모델 접근 방식입니다. 

Examples 및 코드 화면
Examples 및 코드 화면

Examples 기능 설명
hello world (curl) 가장 기본적인 API 호출 예제로, curl 명령어로 실행하는 방법입니다.
chat (python) Python을 사용하여 대화형 AI 시스템을 실행하는 방법입니다.
ai assistant (python): Python으로 AI 어시스턴트를 실행하는 방법입니다.
vision (python) 이미지 처리나 컴퓨터 비전 관련 기능을 Python으로 실행하는 방법입니다.
embeddings (python) 텍스트 임베딩을 생성하고 활용하는 Python 실행하는 방법입니다.

이 화면은 4.Server Model Settings는 사용하고자 하는 LLM 모델의 상세한 설정을 조정할 수 있는 곳입니다. 

여기서 모델과, GPU 레이어, 프롬프트 포맷, 컨텍스트 길이 등을 조정하실 수 있습니다. 

Local Server 기능-3
Local Server 기능-3

LM Studio - Llama 3.1-7B로 챗봇 만들기(파이썬 코드로 구현)

먼저 1.Start Server를 눌러 서버에 연결해 줍니다.  그리고 2.Chat(Python)에서 나와 있는 코드의 3.Copy Code로 코드를 복사해줍니다.

파이썬 에디터를 실행하시고, 코드를 만들어 줍니다. 서버에서 사용하실 수 있게 만듭니다.

코드 원하시는 분은 복사하시면 됩니다.

import os
from dotenv import load_dotenv
from openai import OpenAI

# 환경 변수 로드
load_dotenv()

# 로컬 서버 연결하기
client = OpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio")

# Llama 3.1 모델설정
def local_llm_predict(prompt):
    try:
        completion = client.chat.completions.create(
            model="lmstudio-community/Meta-Llama-3.1-8B-Instruct-GGUF",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.5,
            max_tokens= 1024
        )
        return completion.choices[0].message.content
    except Exception as e:
        return f"Error in local LLM prediction: {str(e)}"

# 요리 도우미 프롬프트 템플릿
My_prompt = """
당신은 양식 전문요리사 입니다. 당신은 신라호텔의 해드쉐프로써 요리 경력은 20년 베태랑 요리사 입니다. 사용자가 음식 조에 관련된 질문을 하면 명확하고 자세하게 답변을 제공해야 합니다. 
이해하기 쉽도록 <지침>을  정확하게 따라야 합니다. 

다음 <지침>을 따라 답변을 작성하세요:
1. 질문을 주의 깊게 읽고 이해합니다.
2. 가능한 한 정확하고 간결한 설명을 제공합니다.
3. 소스류는 스쿱으로 표시해줍니다. 
4. 액체류는 종이컵으로 이해하기 쉽도록 설명합니다. 
5. 조리 중 시간이 필요한 경우, 분과 초를 명확히 알려줘야 합니다. 
6. 복잡한 개념은 단계별로 설명합니다.
7. 가능한 경우 당신의 Secret recipe를 공개하면서 관련 경험을 같이 공유 합니다. 

사용자 질문: {question}

답변:
"""

def My_prompt_helper(question):
    prompt = My_prompt.format(question=question)
    response = local_llm_predict(prompt)

    return response

if __name__ == "__main__":
    print("안녕하세요, 미슐랭 3스타 신라호텔 해드쉐프입니다. 질문해 주세요. ('종료'를 입력하면 프로그램이 종료됩니다)")
    while True:
        user_question = input("질문: ")
        if user_question.lower() in ['종료', 'exit', 'bye', 'quit']:
            print("프로그램을 종료합니다. 감사합니다!")
            break
        answer = My_prompt_helper(user_question)
        print(f"\n답변:\n{answer}\n")

만약에, 서버에 연결하지 않고 실행하면 다음과 같은 문구가 나옵니다. 

Server 연결 하지 않을 시
Server 연결 하지 않을 시

 

LM Studio - Llama 3.1-7B로 챗봇 만들기(예시 및 결과)

Roast Beef Smoked Gouda Grilled Cheese 레시피를 만들어 달라고 해보겠습니다.

Roast Beef Smoked Gouda Grilled Cheese
Roast Beef Smoked Gouda Grilled Cheese 이미지

<질문 : 지침을 따라 "Roast Beef Smoked Gouda Grilled Cheese"를 만드는 방법을 알려주세요.>

모델 : Llama 3.1-7B-Q5_K_M gguf

답변 생성 시간 :  1분 30초

사용한 Llama 3.1 7B Q5 모델의 답변은 다음과 같습니다.

Llama 3.1 답변-1
Llama 3.1 답변-1

Output 토큰 설정 때문에, 맨 끝에 글이 잘린 듯합니다. 더 길에 하면 괜찮을 것 같습니다. 

그리고 위에 봤었던 Server Logs에 하면 다음과 같이 나옵니다.

Server Logs 화면
Server Logs 화면

한 번 더 질문해보겠습니다. 

<질문 : 지침을 따라 "해산물 크림 파스타"를 만드는 방법을 알려주세요.>

모델 : Llama 3.1-7B-Q5_K_M gguf

답변 생성 시간 : 1분 33초

Llama 3.1 답변-2
Llama 3.1 답변-2

답변하는 시간이 아무것도 설정하지 않고 하였을 때 느립니다.

그리고 로컬에서 CPU와 GPU도 잘 사용한 것 같습니다.

CPU, GPU 사용량
CPU, GPU 사용량

아마 설정하셔도 돈 내고 사용하시는 챗GPT(ChatGPT), 클로드 AI(Claude.AI)보다 속도가 느릴 겁니다. 가만하시면 될 것 같습니다. 

그래도 인정보 유출, 데이터 유출, 보안에 민감하신 분들은 Llama 3.1을 튜닝해서 사용하는 방안도 충분히 메리트 있다고 생각합니다.

그리고 RAG기법을 사용하시면 보다 더 성능이 좋아진다고 하니, 원하시는 분은 RAG를 통해 해 보시는 것도 괜찮을 것 같습니다. 

댓글