목차

  • gradio란?
  • 사용법
  • 동작 방식
  • 어디서 든 내 모델을 사용할 수 있게 하기
  • 한계점

Gradio란?

Gradio는 Model을 웹으로 손쉽게 사용할 수 있게 해주는 라이브러리이자 플랫폼입니다.

각종 UI를 쉽게 그릴 수 있게 해주고, input을 받아 서버에서 inference 혹은 predict를 한 후 그 결과를 사용자들에게 돌려줍니다.

다른 웹 어플리케이션 서버들과 차별화된 점은 ML 모델이 자주 다루는 컴포넌트들이 이미 이쁜 UI로 구현이 돼 있다는 점이죠.

복잡한 커스터마이징은 어렵지만, 오디오, 비디오, 챗봇, 이미지, 텍스트, 확률 표시 등 머신러닝에서 자주 사용하는 기능들을 거의 코딩 없이 제공가능합니다.

사용법

먼저 gradio를 설치해 줍니다.

pip install gradio

아래가 기본적인 템플릿입니다.

 

 

이 템플릿을 실행 시켜보면 주소가 나오는데, 그 주소를 웹 브라우저에 복사 붙여넣기를 하면 다음과 같은 웹페이지가 뜹니다.

동작 방식

gradio는 기본적으로 fastapi를 기반으로 돌아갑니다.

복잡한 것들을 설명하기는 지면이 길어지니 주로 사용하는 예시들을 들어드리겠습니다.

12번째 줄은 함수가 들어갑니다. 정확히는 python의 callable이면 모두 들어갈 수 있습니다.

이에 대한 구체적인 구현은 4-7번째 줄에서 확인할 수 있습니다.

여기서 13번째 줄의 inputs 파라미터에는 어떤 종류를 넣을 것인지 결정할 수 있습니다.

여기서 inputs에 들어갈 수 있는 오브젝트들을 컴포넌트라고 합니다.

가장 기본적인 동작은 inference 함수의 parameter 명이 컴포넌트의 label 명이 됩니다.

즉 13번째 줄은 text 컴포넌트를 사용하겠다는 것이고, text의 label은 'my_input'이 됩니다.

조금더 자세히는 gr.components.Text 를 내부적으로 생성하게 되는데 자세한 설정을 하고 싶다면 이 컴포넌트를 직접 넘겨줘도 됩니다.

이왕이면 inference 함수의 parameter의 개수가 inputs의 개수가 일치하는게 좋습니다.

아래 예제를 보시면 더 이해가 쉽습니다.

 

 

이 코드는 아래와 같이 웹에서 랜더링 됩니다.

파라미터 명이 label이 되는 것을 확인할 수 있죠 (각 컴포넌트의 좌측 상단)

여러개의 output을 내보내고 싶다면 ,로 구분해서 (구체적으로는 tuple 형태로) return 해주면됩니다.

각 형의 어떤방식으로 랜더링할지는 outputs에 정해주면 됩니다.

구체적인 설정은 공식 document를 참고하시면 좋습니다.

https://gradio.app/docs/

 

Gradio Docs

Browse Gradio Documentation and Examples

gradio.app

어디서 든 내 모델을 사용할 수 있게 하기

아주 쉽습니다.

17 번 줄을 보시면 share=True 라는 코드가 있습니다.

이 코드를 입력하면 어디서든 접근 가능한 .gradio.live 로 끝나는 public url이 생성됩니다.

구체적으로는 터널링을 통해서 구현돼 있는데, 외부로 접근만 가능하다면 NAT 환경에서도 쉽게 사용이 가능합니다.

복잡한 것은 모르셔도 되지만, 그냥 어디서든 접근 가능하다 정도로 이해하시고 넘어가면 좋습니다.

한계점

유료 plan을 사용하지 않는 이상 저 URL은 3일정도만 유지 됩니다. 

직접 서버를 띄워서 사용하면 3일이상 사용할 수 있습니다.

클라우드에 EC2등에 띄워서 사용할 수 있습니다. 

하지만 EC2는 또 EC2 비용이 나가죠 ㅠㅠ

+ Recent posts