AI model을 구성하면 Test data로 inference하는 code를 작성한다. 그리고 그 결과를 바탕으로 성능을 판단하는데 그 외에 빠르게 inference 해보고 싶은 환경도 주어진다.
예를 들어 동물 분류 모델을 만들었는데, 처음 본 동물을 발견했다면 동물을 해당 model로 test 해보고 싶을텐데,
python code를 Setup해서 실행하는 것도 어렵고, 만약 다른 분들이 Test 하고 싶어하는 상황이라면 더더욱 힘들다. 따라서 사내에서 쉽게 Test 해볼 수 있는 페이지를 만들어보고 싶다는 갈증이 있었다.
하지만 만드는 경우에는 UI 작업도 필요하기 때문에, 제대로 만들어보려니까 쉽지 않았고 Django를 사용하여 간단하게 웹서버를 만들어보려고 했는데 시간이 너무 오래걸리고, 완성도도 높지 못해서 Stop 했었다. 이를 대체해줄 수 있는 역할을 해주는 Gradio에 대해 알게 되었다.
gradio
AI Model을 inference 결과를 UI상에서 확인할 수 있도록 support 해주는 오픈소스 라이브러리.
Gradio
Build & Share Delightful Machine Learning Apps
www.gradio.app
https://github.com/gradio-app/gradio/blob/main/demo/animeganv2/run.py
gradio 라는 라이브러리를 설치하면 사용할 수 있다.
사용 방법
사용방법이 매우 간단해서, 금방 만들 수 있었다.
Interface에 input, output이 어떤 형태인지 정의해주고, fn에 처리하고자 하는 task를 method로 만들어 붙여주면 된다.
demo = gr.Interface(
input = [gr.Image()],
outputs = [gr.Image()],
fn = process
)
공식 문서 참고하면 더욱 다양한 기능을 제공하고 있다. Input, Ouput으로 Video, Image, Text 등 다양한 데이터를 지정해줄 수 있기 때문에 다양한 AI Task를 커버할 수 있다.
이렇게 task를 지정해준 뒤에 demo.launch() 를 지정해주고 파이썬 파일을 실행하면, 서버가 실행된다.
내부 구현은 FastAPI로 되어 있는 것 같다.
demo.launch()
이렇게 실행하게 되면 해당 Task에 대해서 사용할 수 있는 UI가 나타난다. 하지만 대부분 여러 Task를 test하고 싶기 떄문에 이런 경우에 TabbedInterface 를 활용하여, Tab을 여러개로 분리하여 페이지가 분리되어 있는 것처럼 관리할 수 있는 것이 큰 장점이다.
demo = gr.TabbedInterface(
[
task1_tab,
task2_tab,
task3_tab
],
[
"Task1",
"Task2",
"Task3"
],
)
또 다른 장점으로 launch()에 다양한 파라미터가 있는데, share 를 True로 설정하면 바로 웹에 배포가 가능하다.
사이드 프로젝트에 활용하면 좋을 것 같다는 생각이 들었다.