HuggingFace platform에 내 코드 간단 배포하기

김형겸·2023년 6월 20일
0

0. 들어가며


기말 과제로 모델링 수업에서 배운 python을 활용해 자유주제로 개인 프로젝트를 진행하고, 발표하는 과제가 주어졌다.
과 특성상 개발을 공격적으로 가르치지 않는 학과다 보니 배포는 고사하고 구현 코드와 터미널에 input, print 로 작동해도 되는 수준의 과제였다보니 사실 이정도의 플랫폼과 GUI 툴까지 사용하는것은 투머치였다.

하지만 개발자가 되기 위해 일년 반 가량 공부하고 있는 입장에서 간단한 앱이라도 직접 배포해서 발표시에 모두가 사용하도록 하고싶었고, 그래서 여러가지 방법을 고민하게 된다.


1. React로 프론트엔드 만들고 FastAPI 로 백엔드 만들어서 vercel로 배포하자.

  • 굉장히 투머치하다. 파이썬만 배우는 수업인데 프론트엔드에 대해서 설명하는것도 귀찮고, 해당 프로젝트에서 chatGPT API 를 사용하고 공부하는데 시간이 필요했기 때문에 기각.

2. Flask로 웹앱 만들어서 heroku로 배포하자.

  • 처음에는 이걸로 하려고 github에 레포까지 파서 진행했으나 heroku가 유료라는점, 구현 코드를 설명할때 flask에 대해서 설명하기가 굉장히 번거로울 것 같아 기각.

3. Gradio 로 GUI 구현하고 HuggingFace에 배포하자.

  • 이 방법으로 결정했다. 인공지능 분야에서 유명한 Gradio를 이용해서 CSS 없이 기본적인 GUI를 구현할 수 있고, 사용하는 코드가 간단해서 설명하기 쉬우며, HuggingFace에서 기본적으로 Gradio 앱을 쉽게 배포하고 사이트 내에서 호스팅 하는 서비스를 제공하기때문에 이걸로 결정!
    프로젝트에서 중요한건 UI, 배포가 아니라 GPT API 를 사용한 로직이었기때문에 리소스도 적고 python만을 사용하기때문에 아주 적당하다고 생각했다.

1. HuggingFace란?


HuggingFace는 자연어 처리(NLP) 관련 여러가지 기술들을 서비스하는 스타트업이다. 이들이 서비스하는 것에는 여러가지가 있지만,
이들이 운영하는 커뮤니티는 AI 모델을 배포해서 공유하고, 머신러닝 커뮤니티 종사자들이 정보를 공유하고자 하는 목적을 가지고 있다.
한마디로 정리하면 AI 특화 깃허브라고 할 수 있다!

최근에 GPT 스터디를 진행하면서 '이런곳도 있구나' 하며 대충 넘어갔던 플랫폼이었는데, 이번 기회에 제대로 들여다보게 되면서 방대한 AI 모델들과 활성화된 커뮤니티를 보고 많이 놀랐다.

그런데 파이썬 코드를 배포할 수 있는 플랫폼은 많은데 왜 HuggingFace 를 선택했냐?
여러가지 이유가 있는데,

  1. git을 이용해서 배포하고, Gradio와의 궁합이 좋아 GUI를 레포에서 바로 호스팅 할 수 있다.
  2. 호스팅되는 GUI 와 동시에 깃허브 레포처럼 코드또한 동시에 확인할 수 있다.
  3. 코드를 push 하면 자동으로 빌드해주고, 버전 업데이트가 가장 간단하다.

위의 이유로 선택했고, 프론트엔드를 공부하지 않은 분들이나 간단한 I/O 만 확인하고싶은 머신러닝 관련 종사자, 본인의 AI 모델을 커뮤니티에 공유하고, 다른 사람들의 모델을 참고하고 사용하고싶은 사람들에게 HuggingFace 커뮤니티를 이용하는것을 추천한다.


2. 배포하기


가장먼저 HuggingFace로 들어간다.

대시보드가 나오고 상단 네비게이션 바의 Spaces 로 들어간다.

Create new Space를 클릭한다.

해당 화면을 만나게 될것이다. 깃허브 레포지토리 이름 정하는것처럼 space 이름을 정해주고, 라이센스를 선택하고 SDK 를 선택을 해준다. 여기서는 Gradio 를 선택했다.
그 다음 Space hardware 를 선택하는데, CPU, GPU 하드웨어가 여러가지 준비되어 있다. 더 무거운 모델을 돌리는 사람들은 비용을 지불하고 더 고사양의 하드웨어를 사용할 수 있다.

다 적었다면 Public, Private 을 선택하고 CreateSpace 를 클릭한다.

이제 파일을 올릴 준비를 한다. 깃허브와 굉장히 유사하다!
git clone으로 레포지토리를 clone 한다.
clone 한 디렉토리로 이동해 개발을 시작하면 된다. 커밋 푸시 과정은 git 을 기반으로 하기때문에 동일하다!

해당 글에서는 기존에 작업한 소스코드들을 복붙해서 해당 레포지토리에 push 하도록 하겠다.


두 개의 파일을 추가했는데, 소스코드가 들어있는 app.py, 의존성 모듈들의 버전을 정의하는 requirements.txt 파일 두개는 필수적이다.
정의하지 않았다면 아래의 명령어를 입력하면 자동으로 프로젝트의 모든 패키지와 버전을 자동으로 정의해준다

$ pip freeze > requirements.txt

이제 커밋/푸시 를 하고 huggingface 로 돌아와보자

자동으로 빌드를 진행한다.

런타임 에러가 발생한다. 당연하다.
해당 프로젝트에는 두 개의 API 를 사용하는데, OpenWeatherMapOpenAI 두 개의 API key 를 필요로 하기 때문이다.

우측 네비게이션 바의 Setting 으로 들어간다.

Setting 으로 들어오고 스크롤을 조금만 내리면 Repository secrets 를 발견할 수 있다. 여기에 필요한 변수를 정의해준다.

필요한 API key 들을 넣어주었고, 바로 다시 빌드에 들어간다.
조금 기다렸다가 확인해보면?

이렇게 정상적으로 Gradio GUI 가 레포 메인에 호스팅 되는것을 볼 수 있다!

profile
클린코드를 향해

0개의 댓글