대형 언어 모델(LLM)을 Hugging Face Spaces에 배포하는 방법

How to Deploy Your LLM to Hugging Face Spaces

대형 언어 모델(LLM)은 현재 매우 인기 있으며, 새로운 프로젝트와 모델을 테스트하는 것은 흥미롭습니다. 하지만 프로젝트를 다른 사람들과 공유하는 것은 어려울 수 있습니다. 대부분의 클라우드 플랫폼은 비용이 많이 들거나 구성하기 어렵거나, 혹은 두 가지 모두의 문제를 갖고 있습니다.

이런 상황에서 Hugging Face Spaces가 차별화됩니다. Hugging Face는 단순히 모델과 데이터셋을 위한 곳뿐만 아니라, 다른 인기 있는 클라우드 제공업체처럼 ML 인프라도 제공합니다. 가장 좋은 점은 경량 LLM 애플리케이션에 적합한 무료 CPU 인스턴스를 제공한다는 것입니다. 이는 프로젝트를 로컬 머신에서 벗어나 전 세계와 공유할 수 있으며, 한 푼도 들이지 않고 가능하다는 의미입니다. Hugging Face Spaces를 사용하면 Streamlit, Gradio 또는 Docker로 구축된 기계 학습 앱을 몇 번의 클릭만으로 완전히 무료로 최소한의 설정으로 배포할 수 있습니다.

이 실습 튜토리얼에서는 Streamlit으로 구축된 간단한 챗봇을 Hugging Face Spaces에 배포하는 방법을 처음부터 끝까지 안내해 드리겠습니다.

Hugging Face Spaces에 LLM 배포하기

사전 요구 사항으로 Hugging Face 계정이 필요합니다. 아직 계정이 없다면 새 계정을 만드세요. 계정 생성이 완료되면 시작할 준비가 된 것입니다. 추가 설정이나 클라우드 서비스는 필요하지 않습니다.

1. 새 Space 만들기

새로운 스페이스를 만들려면 Hugging Face의 새 스페이스 생성 페이지로 이동하세요. 페이지에는 다음과 같은 세부 정보가 포함되어 있어야 합니다:

  • Space 이름: 최종 URL과 프로젝트 이름에 반영됩니다.
  • SDK: 백엔드로 Streamlit을 선택하세요. 다른 옵션으로는 Gradio, Docker 및 정적 HTML이 있습니다.
  • Space 하드웨어: 기본적으로 무료 CPU 인스턴스로 설정되어 있지만, Hugging Face는 더 많은 리소스와 GPU 인스턴스를 위한 유료 옵션도 제공합니다. 지금은 기본 CPU 인스턴스를 사용하겠습니다.
  • 가시성: 프로젝트의 가시성을 설정합니다. 공개로 설정되어 있으므로 누구나 당신의 스페이스에 접근하고 프로젝트를 볼 수 있습니다. 비공개 인스턴스는 당신과 당신의 조직(있는 경우)에 있는 사람들에게만 보입니다.

세부 정보를 모두 입력한 후에는 아래 페이지와 유사하게 보일 것입니다:

Screenshot-1

모든 내용을 작성한 후 "Create Space"를 클릭하세요. 그러면 설정 지침과 코드를 시작하기 위한 빈 저장소가 포함된 새 Space 페이지로 리디렉션됩니다.

이 시점에서 새 Space는 다음과 같이 보일 것입니다:

Screenshot-2

2. 새 Space 복제하기

Hugging Face Spaces는 GitHub 저장소와 유사하게 작동합니다. Space를 복제하고, 로컬에서 변경한 다음, 업데이트를 다시 푸시할 수 있습니다. 프로젝트에 필요한 파일이 포함되면 Hugging Face가 자동으로 변경 사항을 감지하고, 앱을 빌드하고 배포합니다.

Space를 로컬 머신에 복제하는 것부터 시작해 보겠습니다.

Space 페이지에서 Git 복제 명령을 찾을 수 있습니다. 명령은 다음 형식을 따릅니다:

```

git clone https://huggingface.co/spaces/your-username/your-space-name

```

터미널에서 이 명령을 실행하세요. 이렇게 하면 이미 Hugging Face Space에 연결된 Git 저장소가 복제됩니다. 이 저장소는 비어 있지 않다는 점에 유의하세요. Hugging Face가 앱을 설정하고 배포하는 데 도움이 되는 미리 채워진 구성 파일이 포함되어 있습니다.

복제된 저장소 내부에는 애플리케이션의 메타데이터가 포함된 README.md 파일이 있습니다. 이 YAML 블록은 Hugging Face에게 앱을 빌드하는 방법을 알려줍니다:

  • sdk: streamlit으로 설정
  • sdk_version: 사용할 Streamlit 버전을 지정
  • app_file: 앱의 진입점(일반적으로 app.py)으로 스페이스를 시작하기 위해 실행됩니다
  • README.md 파일은 다음과 비슷한 구조를 가져야 합니다:

    ```

    ---

    title: Llm Demo

    emoji: 👀

    colorFrom: pink

    colorTo: blue

    sdk: streamlit

    sdk_version: 1.44.1

    app_file: app.py

    pinned: false

    ---

    ```

    3. Streamlit을 사용하여 LLM 애플리케이션 코딩하기

    이제 Space가 설정되고 로컬에 복제되었으므로 애플리케이션을 구축할 시간입니다!

    먼저 requirements.txt 파일을 만들어 보겠습니다. 아래 이미지에서 강조된 것처럼, 이 파일은 HuggingFace에게 앱에 필요한 Python 라이브러리를 알려주며, 빌드 과정에서 자동으로 설치됩니다:

    Screenshot-3

    이 프로젝트를 위해 LLM 애플리케이션을 실행하기 위한 transformers와 PyTorch 라이브러리가 필요합니다. requirements.txt 파일은 다음과 유사해야 합니다:

    ```

    transformers

    torch

    streamlit

    ```

    현재로서는 Google의 FLAN-T5-small을 사용하세요. 이는 약 300MB RAM을 차지하는 경량 언어 모델입니다. CPU 인스턴스를 사용하고 있으므로, 더 복잡한 모델은 성능이 느려지거나 메모리 제약으로 인해 로드에 실패할 수 있습니다. 기본 챗봇으로 작동하도록 이 모델을 감싸는 간단한 Streamlit 인터페이스를 만들어 보겠습니다.

    app.py라는 새 파일을 만들고 다음 코드를 붙여넣으세요:

    ```python

    import streamlit as st

    from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline

    @st.cache_resource

    def load_model():

    tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-small")

    model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-small")

    return pipeline("text2text-generation", model=model, tokenizer=tokenizer)

    st.setpageconfig(page_title="LLM Demo", layout="centered")

    st.title("🚀 FLAN-T5 Small - HuggingFace Demo")

    pipe = load_model()

    userinput = st.textarea("Enter your instruction or question:", "")

    if st.button("Generate Response"):

    if user_input.strip() == "":

    st.warning("Please enter some text.")

    else:

    with st.spinner("Generating..."):

    output = pipe(userinput, maxnewtokens=100)[0]["generatedtext"]

    st.success("### Response:")

    st.write(output)

    ```

    이 코드는 transformers 라이브러리를 사용하여 FLAN-T5-small 모델을 텍스트-텍스트 생성 파이프라인으로 로드합니다. 이를 통해 LLM은 사용자 입력에 기반한 응답을 생성할 수 있습니다. 그런 다음 Streamlit을 사용하여 사용자가 프롬프트를 입력할 수 있는 간단한 텍스트 입력 필드가 있는 깔끔하고 대화형 UI를 설정합니다. 사용자가 질문을 제출하면 앱은 LLM을 사용하여 응답을 생성하고 챗봇과 유사한 형식으로 표시합니다. 성능을 최적화하기 위해 모델 로딩은 @st.cache_resource를 사용하여 캐시됩니다. 이를 통해 모델이 모든 상호 작용에서 다시 로드되지 않아 속도가 향상되고 리소스 사용량이 줄어듭니다.

    로컬에서 앱을 테스트하려면 다음 명령을 실행하여 Streamlit 애플리케이션을 실행하세요:

    ```

    pip install -r requirements.txt

    streamlit run app.py

    ```

    4. 최근 변경 사항을 Spaces에 푸시하기

    앱이 준비되면 코드를 Hugging Face Spaces 저장소에 푸시하는 것만큼 쉽게 프로덕션에 배포할 수 있습니다. 함께 단계별로 진행해 보겠습니다.

    먼저 코드 변경 사항을 로컬 Git 저장소에 커밋하세요:

    ```

    git add .

    git commit -m "Initial commit with Streamlit LLM app"

    ```

    원격 저장소에 푸시하려면 쓰기 권한이 있는 액세스 토큰을 사용하여 Hugging Face에 인증해야 합니다. Hugging Face 계정의 액세스 토큰 설정 페이지로 이동하세요. 쓰기 권한이 있는 새 토큰을 만들고 다시 볼 수 없으므로 로컬에 저장하세요.

    이제 Hugging Face CLI를 사용하여 터미널에서 인증하세요:

    ```

    pip install huggingface-hub

    huggingface-cli login

    ```

    액세스 토큰을 붙여넣고 설정을 확인하라는 메시지가 표시됩니다. 대부분의 사용자에게 이 과정은 성공적으로 완료되고 터미널에서 로그인을 확인할 것입니다.

    Screenshot-4

    인증이 완료되면 다음을 사용하여 변경 사항을 푸시하세요:

    ```

    git push

    ```

    그러나 macOS를 사용하는 경우 자격 증명 충돌로 인해 Git이 푸시에 실패하는 알려진 문제가 발생할 수 있습니다:

    Screenshot-5

    이 문제가 발생하면 다음 해결 방법을 사용하세요:

    ```

    git push -u https://HFUSERNAME:HFACCESSTOKEN@huggingface.co/spaces/HFUSERNAME/HFSPACENAME

    ```

    HFUSERNAMEHFSPACENAME을 실제 Hugging Face 사용자 이름과 스페이스 이름으로 바꾸세요. 또한 HFACCESS_TOKEN을 쓰기 권한이 있는 실제 토큰으로 바꾸세요. 이 명령은 명시적으로 토큰을 사용하여 인증하므로 시스템 자격 증명 문제를 우회하고 앱을 성공적으로 배포해야 합니다.

    5. 배포된 Space 테스트하기

    Hugging Face Spaces가 저장소의 새 변경 사항을 감지하면 자동으로 빌드 및 배포 프로세스를 시작합니다. 종속성을 설치하고 Streamlit 앱을 시작하는 동안 실시간 빌드 로그를 볼 수 있습니다.

    모든 것이 순조롭게 진행되면 애플리케이션이 실행되고 사용할 준비가 됩니다. 수동 설정이 필요하지 않습니다! 앱이 실행 중이면 다음과 같이 보일 것입니다:

    Screenshot-6

    이제 브라우저에서 직접 챗봇과 상호 작용하고 누구와도 공유할 수 있는 공개 URL을 얻을 수 있습니다. 이는 LLM 프로젝트를 전 세계에 선보이는 매우 간단하고 비용 효율적인 방법입니다! 이 데모에는 Flan-T5-small 모델을 사용했다는 점을 명심하세요. 이 모델은 가볍고 CPU 친화적이지만 복잡한 쿼리에는 가장 정확하지 않을 수 있습니다. 필요에 따라 더 강력한 모델로 쉽게 교체할 수 있습니다.

    마무리

    이 튜토리얼에서는 Hugging Face Spaces에서 Streamlit을 사용하여 경량 LLM 챗봇을 배포했습니다. 새 스페이스를 만들고 앱을 코딩하여 무료로 실시간으로 푸시하는 과정을 진행했습니다. 몇 가지 단계만으로 로컬 프로토타입을 Flan-T5-small을 기반으로 하는 공유 가능한 웹 앱으로 전환했습니다. 여기서부터 채팅 기록이나 마크다운으로 UI를 향상시키거나, 더 강력하거나 미세 조정된 모델로 전환하거나, Gradio나 Docker와 같은 대체 백엔드를 탐색할 수 있습니다. 더 고급 앱의 경우 파일 업로드, 음성 입력과 같은 기능을 추가하거나, 더 무거운 워크로드를 위해 GPU 지원 Spaces로 이동할 수 있습니다.

    Hugging Face Spaces는 LLM 프로젝트를 온라인으로 가져오는 것을 믿을 수 없을 정도로 간단하게 만들어 주므로, 계속 구축하고, 실험하고, 여러분의 작업을 세계와 공유하세요.