Gradio

2024. 12. 11. 14:27LLM(Large Language Model)의 기초

1.Gradio란?
머신러닝 모델을 간단히 웹 애플리케이션 형태로 배포할 수 있게 해주는 파이썬 라이브러리입니다. 이를 통해 사용자는 인터랙티브 웹 인터페이스를 통해 모델을 테스트하고 공유할 수 있습니다. Gradio는 머신러닝 엔지니어, 데이터 과학자, 연구자들이 복잡한 웹 개발 지식 없이도 직관적인 UI를 생성할 수 있도록 설계되었습니다. 모델의 입력과 출력을 정의하면 Gradio가 자동으로 웹 기반 인터페이스를 생성하며, 이를 로컬에서 실행하거나 웹에 배포할 수 있습니다.
[주소] https://www.gradio.app/

Gradio

Build & Share Delightful Machine Learning Apps

www.gradio.app

 
2. Gradio 실행방법
1) gradio 명령어 실행

pip install gradio

 
2) vscode 실행
-Python 프로그램 설치
-Python Indent 프로그램 설치
Python Indent 프로그램을 설치해 주면 python 좀 더 편리하게 이용 가능하고 들여 쓰기가 편해진다
 
3) 가상환경 구축하기
python -m venv 가상환경이름
 
예)#venv 파일이 생성된다.
    python -m venv venv
 
3-1) C:\Hong\Web\Gradio\venv\Scripts 경로로 가서
Activate 명령어를 쓴다
3-2) pip install gradio 설치 
3-3) pip list 실행 시 다운 다운 목록을 볼 수 있다
 
4) vscode 파이썬 실행 단축키 설정
    왼쪽 하단 설정 버튼 -> keyboard shortcuts -> python run으로 검색 후 python: run python
    file에 수정버튼 클릭 -> 컨트롤 + 엔터로 만든다 
 
2. Gradio는 말 쉬운 말로 하면 HTML 대신 파이썬으로 프로그램을 만든다고 보면 된다.
예시를 알아보자
 
 
Gradio사용 예시 1)

import gradio as gr

with gr.Blocks() as demo: # Gradio Blocks 컨테이너를 생성하고 'demo'라는 이름을 붙입니다.
    gr.Markdown("# 안녕하세요")  # 레벨 1 마크다운 제목을 표시합니다.
    gr.Markdown("## 여기는 제목을 입력합니다") # 레벨 1 마크다운 제목을 표시합니다.
    gr.Markdown("- 첫번째 아이템\n- 두번째 아이템\n- 세번째 아이템") # 레벨 2 마크다운 제목을 표시합니다.
    
demo.launch() # 웹 인터페이스를 실행하고 브라우저에서 확인할 수 있는 링크를 생성합니다.

 -->

더보기

안녕하세요

여기는 제목을 입력합니다

  • 첫번째 아이템
  • 두번째 아이템
  • 세번째 아이템

사용 예시 2)

import gradio as gr # Gradio 라이브러리를 불러옵니다.

def handle_input(text):  # 입력받은 텍스트를 그대로 반환하는 함수입니다.
    return text


with gr.Blocks() as demo:  # Gradio의 Blocks 컨테이너를 생성하고 'demo'라는 이름으로 참조합니다.
    text_input = gr.Textbox(label="문자입력", lines=1)  # 텍스트 입력창을 생성합니다.
    output_text = gr.Textbox(label="출력")  # 출력 텍스트박스를 생성합니다.
    text_input.submit(handle_input, inputs=text_input, outputs=output_text) 
    
demo.launch() # 웹 인터페이스를 실행하고 브라우저에서 확인할 수 있는 링크를 생성합니다.

-->

더보기
안녕이라고 문자를 입력하면 출력이 안녕이라 출력된다.

 
사용 예시 3)

import gradio as gr  # Gradio 라이브러리를 불러옵니다.
def handle_checkbox(selected):
    if selected:
        return "동의했습니다!"  # 체크박스가 선택되었을 때 반환할 메시지입니다.
    return "동의하지 않았습니다.!"  # 체크박스가 선택되지 않았을 때 반환할 메시지입니다.
 with gr.Blocks() as demo:		# Gradio의 Blocks 컨테이너를 생성하고 'demo'라는 이름으로 참조합니다.
 checkbox = gr.Checkbox(label='개인정보 사용에 동의하시겠습니까?')  # 체크박스 컴포넌트를 생성합니다.
 
 with gr.Blocks() as demo:    # Gradio의 Blocks 컨테이너를 생성하고 'demo'라는 이름으로 참조합니다.
    checkbox = gr.Checkbox(label='개인정보 사용에 동의하시겠습니까?') # 체크박스 컴포넌트를 생성합니다.
    output_checkbox = gr.Textbox(label='출력') 
    checkbox.change(handle_checkbox, inputs=checkbox, outputs=output_checkbox) #체크박스 상태가 변경될 때 handle_checkbox 함수를 실행합니다.
demo.launch()

-->

더보기
동의 체크 박스 클릭시 동의했습니다. 출력

사용 예시 4)

import gradio as gr

def handle_fruit(fruit):
    return f'선택한 과일: {fruit}' # 선택된 과일을 텍스트로 반환하는 함수입니다.


with gr.Blocks() as demo: # Gradio Blocks 컨테이너를 생성하고 'demo'라는 이름으로 참조합니다.
    fruit_dropdown = gr.Dropdown(label="과일", choices=['사과', '오렌지', '바나나', '메론'])
    output_fruit = gr.Textbox(label='구입한 과일') # 출력용 텍스트박스를 생성합니다.
    fruit_dropdown.change(handle_fruit) #이벤트 핸들러로 드롭다운의 값이 변경될 때 handle_fruit 함수를 실행합니다.
    fruit_dropdown.change(handle_fruit, inputs=fruit_dropdown, outputs=output_fruit)
    
demo.launch()

-->

더보기
바나나 선택시 선택한 과일:바나나 출력

사용 예시 5)

import gradio as gr

def add(num1, num2):
    return num1 + num2 # 두 숫자를 더한 결과를 반환하는 함수입니다.


interface = gr.Interface(
    fn=add,  # Gradio 인터페이스가 호출할 함수로 'add'를 지정합니다.
    inputs=['number', 'number'],  # 두 개의 숫자를 입력받는 입력 컴포넌트를 설정합니다.
    outputs='number',  # 함수의 반환값을 표시할 출력 컴포넌트를 숫자로 설정합니다.
    title='계산기',  # 웹 인터페이스의 제목을 '계산기'로 설정합니다.
    description='숫자 두개를 입력하세요',  # 웹 인터페이스의 설명을 설정합니다.
    flagging_mode="never"  # 결과에 대해 플래그(신고) 기능을 비활성화합니다.
)

interface.launch()

-->

더보기
10 + 10 입력시 20 출력

 

clear시 지워짐

사용 예시 6)

import gradio as gr  # Gradio 라이브러리를 불러옵니다.


# 선택한 프로그래밍 언어에 맞는 설명을 반환하는 함수
def favorite_language(language):
    messages = {
        "Python": "Python은 데이터 과학, 웹 개발, AI에 아주 적합한 언어입니다!",
        "JavaScript": "JavaScript는 웹 개발에 강력하며, 프론트엔드와 백엔드에서 모두 사용됩니다.",
        "Java": "Java는 안정성과 성능으로 유명하며, 대규모 시스템에 적합합니다.",
        "C++": "C++는 고성능 애플리케이션과 게임 개발에 자주 사용됩니다."
    }
    return messages.get(language, '선택된 언어에 대한 정보가 없습니다')

interface = gr.Interface(
    fn=favorite_language,  # 실행할 함수로 'favorite_language'를 설정합니다.
    inputs=gr.Radio(['Python', 'JavaScript', 'Java', 'C++'], label='좋아하는 언어'),  # 라디오 버튼 입력 컴포넌트를 설정합니다.
    outputs='text',  # 함수의 반환값을 텍스트로 출력합니다.
    title='좋아하는 언어',  # 웹 인터페이스의 제목을 설정합니다.
    description='라디오 버튼에서 좋아하는 프로그래밍 언어를 선택하세요'  # 웹 인터페이스의 설명을 설정합니다.
)

interface.launch()

-->

더보기
파이썬 선택 후 submit 클릭시 "Python은 데이터 과학, 웹 개발, AI에 아주 적합한 언어입니다!", 내용 출력

GPT를 활용한 Gradio
사용 예시 7)

import gradio as gr  # Gradio 라이브러리를 불러옵니다.
import os  # 환경 변수에서 API 키를 가져오기 위해 os 모듈을 불러옵니다.
from openai import OpenAI  # OpenAI API를 사용하기 위해 불러옵니다.
from dotenv import load_dotenv  # .env 파일에서 환경 변수를 로드하기 위해 불러옵니다.

# .env 파일에서 환경 변수를 로드합니다.
load_dotenv()

# OpenAI 클라이언트를 초기화합니다. 환경 변수에서 API 키를 가져옵니다.
client = OpenAI(
    api_key=os.getenv("API_KEY")  # API_KEY 환경 변수를 불러옵니다.
)

# OpenAI API를 이용해 텍스트를 번역하는 함수입니다.
def translate_text_chatgpt(text, src_lang, trg_lang):
    # Few-shot 학습 예문을 생성하는 내부 함수입니다.
    def build_fewshot(src_lang, trg_lang):
        src_examples = example[src_lang]  # 원본 언어 예제 문장
        trg_examples = example[trg_lang]  # 번역된 언어 예제 문장
        fewshot_messages = []  # Few-shot 예문 메시지 리스트
        for src_text, trg_text in zip(src_examples, trg_examples):
            # 사용자 메시지로 원본 언어 텍스트를 추가
            fewshot_messages.append({"role": "user", "content": src_text})
            # 어시스턴트 메시지로 번역된 언어 텍스트를 추가
            fewshot_messages.append({"role": "assistant", "content": trg_text})
        return fewshot_messages

    # 시스템 명령: 번역기의 역할을 명확히 설정
    system_instruction = f'assistant는 번역앱으로 동작한다. {src_lang}를 {trg_lang}로 적절하게 번역된 텍스트만 출력한다.'

    # Few-shot 학습 예문을 생성합니다.
    fewshot_messages = build_fewshot(src_lang=src_lang, trg_lang=trg_lang)

    # 전체 메시지 목록: 시스템 명령 + Few-shot 예문 + 사용자 입력
    messages = [
        {"role": "system", "content": system_instruction},
        *fewshot_messages,
        {"role": "user", "content": text}
    ]

    # OpenAI API에 요청을 보내 번역된 텍스트를 받습니다.
    response = client.chat.completions.create(
        model="gpt-3.5-turbo-0125",  # 사용할 OpenAI 모델
        messages=messages  # 번역 요청 메시지
    )

    # 번역된 텍스트를 반환합니다.
    return response.choices[0].message.content

# Gradio 인터페이스에서 사용할 번역 함수입니다.
def gradio_translate(text, src_lang, trg_lang):
    if not text.strip():  # 입력된 텍스트가 비어있으면 경고 메시지를 반환합니다.
        return "번역할 내용을 입력하세요"
    if src_lang == trg_lang:  # 원본 언어와 번역 언어가 같으면 경고 메시지를 반환합니다.
        return "원본 언어와 번역 언어가 같습니다. 다른 언어를 선택하세요"
    return translate_text_chatgpt(text, src_lang, trg_lang)  # 번역된 텍스트를 반환합니다.


# Gradio 인터페이스를 생성합니다.
with gr.Blocks() as demo:
    gr.Markdown("# 초간단 번역 앱")  # 제목을 마크다운 형식으로 표시합니다.

    # 번역할 내용을 입력하는 텍스트박스
    text_input = gr.Textbox(label="번역할 내용을 입력하세요", placeholder="여기에 내용을 입력하세요")

    # 원본 언어를 선택하는 드롭다운 메뉴
    src_lang_dropdown = gr.Dropdown(choices=["한국어", "영어", "일본어"], value="영어", label="번역할 언어를 선택하세요")

    # 번역된 언어를 선택하는 드롭다운 메뉴
    trg_lang_dropdown = gr.Dropdown(choices=["영어", "한국어", "일본어"], value="한국어", label="번역된 언어를 선택하세요")

    # 번역하기 버튼
    translate_botton = gr.Button("번역하기")

    # 번역 결과를 출력하는 텍스트박스
    output_text = gr.Textbox(label="번역 결과", placeholder="번역된 결과가 여기에 표시됩니다", interactive=False)

    # 번역하기 버튼을 클릭했을 때, gradio_translate 함수를 실행합니다.
    translate_botton.click(
        gradio_translate,  # 실행할 함수
        inputs=[text_input, src_lang_dropdown, trg_lang_dropdown],  # 입력 컴포넌트
        outputs=output_text  # 출력 컴포넌트
    )

# 웹 인터페이스를 실행합니다.
demo.launch()

-->

더보기
오늘 날씨 어떄?를 샘플 데이터 입력시 해당 영어 출력
728x90
LIST

'LLM(Large Language Model)의 기초' 카테고리의 다른 글

넘파이(Numpy)  (0) 2024.12.16
FAST API  (8) 2024.12.13
프롬프트 엔지니어링  (8) 2024.12.11
몽고 DB 와 파이썬  (6) 2024.12.10
프롬프트 엔지니어링  (12) 2024.12.10