HuggingFace와 Gradio로 모델 배포

Author

Heeyoung Kim

Published

December 14, 2022

Gradio로 모델 대시보드 구성

from fastai.vision.all import *

load_learner는 저장한 모델을 불러오는 함수입니다.

learn = load_learner('export.pkl')

모델을 UI 상에서 사용하기 위해서 predict라는 함수를 정의합니다.

labels = learn.dls.vocab
def predict(img):
    img = PILImage.create(img)
    pred, pred_idx, probs = learn.predict(img)
    
    return {labels[i]: float(probs[i]) for i in range(len(labels))}
predict('단감.jpg')
{'단감': 0.9999984502792358, '대봉감': 1.5846303540456574e-06}
%pip install gradio altair -Uqq
import gradio as gr

gradio의 대표적인 파라미터는 fn, inputs, outputs가 있습니다.

fn은 예측을 수행하는 함수입니다. 위에서 만든 predict가 label별 예측값을 산출합니다. Gradio에서 산출(Return)의 형태는 딕셔너리로 주어져야 합니다.

inputs은 입력의 형태입니다.

outputs는 출력의 형태입니다.

examples = ['단감.jpg', '대봉감.jpg']
gr.Interface(fn=predict, 
            inputs=gr.inputs.Image(shape=(512,512)),
            outputs=gr.outputs.Label(),
            examples=examples
            ).launch(share=True)

위 코드를 실행하면 노트북에서 Gradio 앱을 확인할 수 있습니다. 글 마지막에 Gradio 앱을 참고하여 주십시오.

동일한 결과를 fastgradio를 통해서 얻을 수 있습니다. 이 패키지를 활용하면 더 적은 코드로 위와 동일한 결과를 얻을 수 있습니다.

%pip install fastgradio -Uqq
from fastgradio import Demo
Demo(learn).launch(share=True)

위에서 gr.Interface로 Gradio 앱을 실행한 것과 동일한 결과를 얻게 됩니다.

HuggingFace로 Gradio 배포

배포를 위해 필요하는 것은 우선 노트북을 파이썬 스크립트 형태로 추출하는 것입니다.

가장 맨 위 셀에 #|default_exp app을 작성하고, nbdev.exportnb_export을 사용합니다. #|default_exp app으로 지정하면 nb_export에서 따로 스크립트 파일명을 저장하지 않아도 됩니다.

nbdev는 노트북 파일에서 패키지 개발이 가능하도록 만드는 패키지로, 추후에 공유하겠습니다.

%pip install nbdev -Uqq
from nbdev.export import nb_export
nb_export('app.ipynb', '.')

이후 HuggingFace에 가서 New Space를 만듭니다.

만들어진 Space 를 git clone 하고 app 구동에 필요한 콘텐츠들을 git push 합니다.

해당 예제에서는 모델, 앱, requirements.txt, 및 예제 이미지를 업로드했습니다.

아래와 같이 HuggingFace로 모델을 배포했습니다.

URL을 공유해서 다른 사람도 사용할 수 있는 AI가 완성되었습니다!!