Ubuntu 22.04에서 Gradio 배포하기
요약
Ubuntu 22.04 환경에서 Gradio를 사용하여 GFPGAN 기반의 얼굴 복원 데모를 구축하고 배포하는 방법을 설명합니다. systemd를 통한 서비스 등록과 Nginx를 활용한 웹 노출 및 보안 설정 과정을 단계별로 다룹니다.
핵심 포인트
- Gradio를 활용한 ML 모델의 웹 인터페이스 구축 방법
- systemd를 이용한 Gradio 애플리케이션의 백그라운드 서비스화
- Nginx를 리버스 프록시로 사용하여 외부 서비스 노출
- GFPGAN 및 Real-ESRGAN 라이브러리 설치 및 종속성 관리
Gradio는 모든 ML (Machine Learning) 모델을 웹 인터페이스로 감싸서 앱으로 배포하고 확장할 수 있도록 준비해 주는 Python 라이브러리입니다. 이 가이드는 Ubuntu 22.04에서 Gradio를 사용하여 GFPGAN 기반의 얼굴 복원 (face-restoration) 데모를 구축하고, 이를 systemd 서비스로 실행하며, Nginx와 TLS를 통해 노출하는 방법을 다룹니다.
사전 요구 사항: GPU가 활성화된 Ubuntu 22.04 서버, 도메인 A 레코드 (예:
gradio.example.com), non-root sudo 권한, Nginx 설치.
서버 설정
1. 종속성 설치:
$ pip3 install realesrgan gfpgan basicsr gradio
realesrgan— 배경 복원 (background restoration)gfpgan— 얼굴 복원 (face restoration)basicsr— GFPGAN이 의존하는 초해상도 (super-resolution) 아키텍처인RRDBNet을 제공gradio— 웹 인터페이스
2. GFPGAN의 pandas 종속성은 jinja2 >= 3.1.2 버전이 필요합니다:
$ pip show jinja2
버전이 낮다면 업그레이드하세요:
$ pip install --upgrade jinja2
3. 프로젝트 디렉토리 생성:
$ sudo mkdir -p /opt/gradio-webapp/
$ sudo chown -R :$(id -gn) /opt/gradio-webapp/
$ sudo chmod -R 775 /opt/gradio-webapp/
Gradio 앱 구축
얼굴 이미지를 업로드하면 두 개의 향상된 결과물을 반환합니다.
$ cd /opt/gradio-webapp/
$ nano app.py
import gradio as gr
from gfpgan import GFPGANer
from basicsr.archs.rrdbnet_arch import RRDBNet
...
enhance_image()는 GFPGAN/Real-ESRGAN 체크포인트를 로드하고 복원을 실행하며, interface는 해당 함수를 8080 포트에서 대기하는 Gradio UI에 연결합니다.
테스트하기:
$ python3 app.py
Running on local URL: http://0.0.0.0:8080
임시 공개 Gradio 링크를 생성하려면 launch()에서 share=True로 설정하세요. 확인이 완료되면 Ctrl+C로 중단합니다.
systemd 서비스로 실행하기
$ sudo nano /etc/systemd/system/my_gradio_app.service
example-user를 실제 계정명으로 교체하세요:
[Unit]
Description=My Gradio Web Application
...
$ sudo systemctl daemon-reload
$ sudo systemctl enable my_gradio_app
$ sudo systemctl start my_gradio_app
...
Nginx로 노출하기
$ sudo nano /etc/nginx/sites-available/gradio.conf
server {
listen 80;
listen [::]:80;
...
$ sudo ln -s /etc/nginx/sites-available/gradio.conf /etc/nginx/sites-enabled/
$ sudo nginx -t
$ sudo systemctl restart nginx
보안 설정 (Secure It)
$ sudo ufw status
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
...
테스트 (Test It)
https://gradio.example.com에 접속하여 샘플 얼굴 이미지를 업로드하고, 복원된 얼굴 크롭(face crop) 이미지와 전체 복원 이미지를 제대로 받는지 확인하세요.
다음 단계 (Next Steps)
Gradio 앱이 Nginx와 TLS 뒤에서 관리형 systemd 서비스로 실행되고 있습니다. 여기서 다음 단계로 진행할 수 있습니다:
- 다른 모델로 교체 —
interface.launch()패턴은 함수로 래핑(wrapped)된 모든 모델에 작동합니다. - 앱을 완전히 공개하지 않으려면 인증(authentication)을 추가하세요 (
interface.launch(auth=...)). - 추론 지연 시간(inference latency)이 중요하다면 더 무거운 모델을 GPU 기반 인스턴스로 이동하세요.
전체 가이드를 보려면 **Vultr Docs**의 원문 기사를 방문하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기