
# 보안 연구 랩: CVE-2024-4254 (GHSA-fc78-c36r-cc59) 통제된 재현 — gradio-app/gradio @ d4c503a의 deploy-website.yml 포크 체크아웃/코드 실행
자동화된 연구 산출물 — 상위 프로젝트가 아님.
이 저장소는 Université Laval의 석사 논문에서 게시된 GitHub Actions 워크플로우 취약점 재현을 위해 자동화된 하네스가 구축한 일회용 실험실입니다. 이는 커밋
d4c503a471cfd202c56fbddd99d5da431a4b7478(2024-08-02) 시점의gradio-app/gradio의 축어적 스냅샷이며, 해당 프로젝트의 자체 라이선스에 따라 재배포되며, 그 라이선스 파일은 이 스냅샷에 변경 없이 포함되어 있습니다.상위 프로젝트는 관여하지 않으며, 결코 대상이 되지 않고, 여기서 연구된 취약점은 이미 공개된 것입니다. 이 저장소의 모든 비밀과 변수는 무작위로 생성된 더미 값입니다 — 실제 자격 증명은 존재하지 않습니다. 액션 참조와 러너 이미지는 2024-08-02에 확인된 값으로 고정되어 있습니다. 스냅샷에 적용된 모든 변경 사항은 하네스 출력의
pinning.md를 참조하세요.질문 또는 이의 제기: [email protected]
Website | Documentation | Guides | Getting Started | Examples | 中文
Gradio는 머신러닝 모델, API 또는 임의의 Python 함수를 위한 데모 또는 웹 애플리케이션을 빠르게 구축할 수 있는 오픈소스 Python 패키지입니다. 그런 다음 Gradio의 내장 공유 기능을 사용하여 몇 초 만에 데모 또는 웹 애플리케이션 링크를 공유할 수 있습니다. JavaScript, CSS 또는 웹 호스팅 경험이 필요 없습니다!

위와 같은 아름다운 데모를 만드는 데는 Python 코드 몇 줄이면 충분합니다. 시작해 볼까요 💫
사전 요구 사항: Gradio는 Python 3.8 이상이 필요합니다.
pip을 사용하여 Gradio를 설치하는 것을 권장합니다. pip은 Python에 기본으로 포함되어 있습니다. 터미널 또는 명령 프롬프트에서 다음을 실행하세요:
pip install gradio
[!TIP] 가상 환경에 Gradio를 설치하는 것이 가장 좋습니다. 모든 일반적인 운영 체제에 대한 자세한 설치 지침은 여기에서 제공됩니다.
즐겨 사용하는 코드 편집기, Jupyter 노트북, Google Colab 또는 Python을 작성하는 모든 곳에서 Gradio를 실행할 수 있습니다. 첫 번째 Gradio 앱을 작성해 보겠습니다:
import gradio as gr
def greet(name, intensity):
return "Hello " * intensity + name + "!"
demo = gr.Interface(
fn=greet,
inputs=["text", "slider"],
outputs=["text"],
)
demo.launch()
[!TIP] 코드의 가독성을 높이기 위해 import된 이름을
gradio에서gr로 줄였습니다. 이는 널리 채택된 규칙이므로, 여러분의 코드를 사용하는 모든 사람이 쉽게 이해할 수 있도록 이 규칙을 따르는 것이 좋습니다.
이제 코드를 실행하세요. Python 코드를 예를 들어 app.py라는 파일에 작성했다면 터미널에서 python app.py를 실행하면 됩니다.
파일에서 실행하는 경우 아래 데모는 브라우저의 http://localhost:7860에서 열립니다. 노트북 내에서 실행하는 경우 데모는 노트북에 임베드되어 표시됩니다.

왼쪽 텍스트 상자에 이름을 입력하고 슬라이더를 끈 다음 Submit 버튼을 누르세요. 오른쪽에 친근한 인사말이 표시됩니다.
[!TIP] 로컬에서 개발할 때 핫 리로드 모드로 Gradio 앱을 실행할 수 있습니다. 이 모드는 파일을 변경할 때마다 Gradio 앱을 자동으로 다시 로드합니다. 이렇게 하려면 파일 이름 앞에
python대신gradio를 입력하면 됩니다. 위의 예에서는 터미널에gradio app.py를 입력하면 됩니다. 핫 리로드에 대한 자세한 내용은 핫 리로딩 가이드에서 확인하세요.
Interface 클래스 이해하기
첫 번째 데모를 만들기 위해 gr.Interface 클래스의 인스턴스를 생성했다는 것을 알 수 있습니다. Interface 클래스는 하나 이상의 입력을 받고 하나 이상의 출력을 반환하는 머신러닝 모델용 데모를 만들도록 설계되었습니다.
Interface 클래스에는 세 가지 핵심 인수가 있습니다:
fn: 사용자 인터페이스(UI)로 감쌀 함수inputs: 입력에 사용할 Gradio 컴포넌트. 컴포넌트 수는 함수의 인수 수와 일치해야 합니다.outputs: 출력에 사용할 Gradio 컴포넌트. 컴포넌트 수는 함수의 반환 값 수와 일치해야 합니다.fn 인수는 매우 유연합니다 — UI로 감싸려는 모든 Python 함수를 전달할 수 있습니다. 위의 예에서는 비교적 간단한 함수를 보았지만, 함수는 음악 생성기부터 세금 계산기, 사전 훈련된 머신러닝 모델의 예측 함수까지 무엇이든 될 수 있습니다.
input 및 output 인수는 하나 이상의 Gradio 컴포넌트를 받습니다. 앞으로 보게 되겠지만, Gradio에는 머신러닝 애플리케이션용으로 설계된 30개 이상의 내장 컴포넌트(예: gr.Textbox(), gr.Image(), gr.HTML() 컴포넌트)가 포함되어 있습니다.
[!TIP]
inputs및outputs인수에는 컴포넌트 이름을 문자열("textbox")로 전달하거나 클래스 인스턴스(gr.Textbox())로 전달할 수 있습니다.
위의 경우처럼 함수가 둘 이상의 인수를 받는 경우, 각 입력 컴포넌트가 함수의 인수 중 하나에 순서대로 대응하도록 입력 컴포넌트 목록을 inputs에 전달하세요. 함수가 둘 이상의 값을 반환하는 경우에도 마찬가지입니다: outputs에 컴포넌트 목록을 전달하면 됩니다. 이러한 유연성 덕분에 Interface 클래스는 데모를 만드는 매우 강력한 방법입니다.
gr.Interface에 대한 자세한 내용은 Interface 구축 시리즈에서 다루겠습니다.
공유할 수 없다면 아름다운 데모가 무슨 소용이 있을까요? Gradio를 사용하면 웹 서버 호스팅의 번거로움 없이 머신러닝 데모를 쉽게 공유할 수 있습니다. launch()에서 share=True로 설정하기만 하면 데모를 위한 공개적으로 액세스 가능한 URL이 생성됩니다. 예제 데모를 다시 살펴보되, 마지막 줄을 다음과 같이 변경해 보겠습니다:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
demo.launch(share=True) # Share your demo with just 1 extra parameter 🚀
이 코드를 실행하면 몇 초 안에 데모를 위한 공개 URL이 생성됩니다. 예를 들면 다음과 같습니다:
👉 https://a23dsf231adb.gradio.live
이제 전 세계 누구나 브라우저에서 Gradio 데모를 사용해 볼 수 있으며, 머신러닝 모델과 모든 계산은 계속해서 사용자 컴퓨터에서 로컬로 실행됩니다.
데모 공유에 대해 자세히 알아보려면 Gradio 애플리케이션 공유 전용 가이드를 읽어보세요.
지금까지 Gradio로 데모를 빠르게 구축할 수 있는 고수준 클래스인 Interface 클래스에 대해 논의했습니다. 그런데 Gradio는 또 무엇을 할 수 있을까요?
gr.ChatInterface를 사용한 챗봇Gradio에는 챗봇 UI를 만들기 위해 특별히 설계된 또 다른 고수준 클래스인 gr.ChatInterface가 포함되어 있습니다. Interface와 유사하게 함수를 제공하면 Gradio가 완전히 작동하는 챗봇 UI를 만듭니다. 챗봇을 만드는 데 관심이 있다면 gr.ChatInterface 전용 가이드로 바로 이동할 수 있습니다.
gr.Blocks를 사용한 맞춤형 데모Gradio는 또한 gr.Blocks 클래스를 통해 더 유연한 레이아웃과 데이터 흐름으로 웹 앱을 설계하기 위한 저수준 접근 방식을 제공합니다. Blocks를 사용하면 컴포넌트가 페이지에 표시되는 위치를 제어하고, 복잡한 데이터 흐름(예: 출력이 다른 함수의 입력으로 사용될 수 있음)을 처리하고, 사용자 상호 작용에 따라 컴포넌트의 속성/가시성을 업데이트할 수 있습니다 — 이 모든 것이 여전히 Python에서 가능합니다.
gr.Blocks()를 사용하여 매우 맞춤화된 복잡한 애플리케이션을 구축할 수 있습니다. 예를 들어, 인기 있는 이미지 생성 Automatic1111 Web UI는 Gradio Blocks로 구축되었습니다. gr.Blocks에 대한 자세한 내용은 Blocks로 구축 시리즈에서 다루겠습니다.
이것이 핵심 gradio Python 라이브러리의 요지이지만, Gradio는 실제로 훨씬 더 많습니다! Python 또는 JavaScript에서 머신러닝 애플리케이션을 구축하거나 프로그래밍 방식으로 쿼리할 수 있는 Python 및 JavaScript 라이브러리의 전체 생태계입니다. 다음은 Gradio 생태계의 다른 관련 부분입니다:
gradio_client): Python에서 모든 Gradio 앱을 프로그래밍 방식으로 쿼리합니다.@gradio/client): JavaScript에서 모든 Gradio 앱을 프로그래밍 방식으로 쿼리합니다.@gradio/lite): Pyodide 덕분에 서버 없이 브라우저에서 완전히 실행되는 Python으로 Gradio 앱을 작성합니다.설명, 예제 코드 및 임베드된 대화형 데모가 포함된 Gradio Guides를 사용하여 Gradio에 대해 순차적으로 계속 학습하세요. 다음 단계: Gradio 데모의 주요 기능.
또는 이미 기본 사항을 알고 있고 특정 내용을 찾고 있다면 보다 기술적인 API 문서를 검색할 수 있습니다.
버그를 신고하거나 기능 요청이 있으면 GitHub에 이슈를 만들어 주세요. 사용법에 대한 일반적인 질문은 Discord 서버에서 도움을 드리고 있습니다.
Gradio가 마음에 드신다면 GitHub에서 ⭐을 남겨주세요!
Gradio는 많은 훌륭한 오픈소스 라이브러리 위에 구축되었습니다!
Gradio는 이 저장소의 루트 디렉터리에 있는 LICENSE 파일에 있는 Apache License 2.0에 따라 라이선스가 부여됩니다.
또한 논문 _Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild, ICML HILL 2019_을 확인하고, 작업에서 Gradio를 사용하는 경우 이를 인용해 주세요.
@article{abid2019gradio,
title = {Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild},
author = {Abid, Abubakar and Abdalla, Ali and Abid, Ali and Khan, Dawood and Alfozan, Abdulrahman and Zou, James},
journal = {arXiv preprint arXiv:1906.02569},
year = {2019},
}