自動化された研究アーティファクト — 上流プロジェクトではありません。
このリポジトリは、ラヴァル大学の修士論文のために、公開されているGitHub Actionsワークフローの脆弱性を再現する目的で、自動化ハーネスによって構築された使い捨てのラボです。これは、
gradio-app/gradioのコミットf35f615e33a5dd90bfeb106b6f5dca689849fcef(2024-02-09)時点の逐語的なスナップショットであり、そのプロジェクト自身のライセンスの下で再配布されています。そのライセンスファイルは、このスナップショットに変更を加えずに含まれています。上流プロジェクトは関与しておらず、決して標的にはなりません。ここで研究されている脆弱性はすでに公開されています。このリポジトリ内のすべてのシークレットと変数は、ランダムに生成されたダミー値です — 実際の認証情報は存在しません。アクションの参照とランナーイメージは、2024-02-09時点で解決されたものに固定されています。スナップショットに加えられたすべての変更については、ハーネス出力の
pinning.mdを参照してください。質問や異議がある場合: [email protected]
Website | Documentation | Guides | Getting Started | Examples | 中文
Gradioは、機械学習モデル、API、または任意のPython関数のデモやWebアプリケーションをすばやく構築できるオープンソースのPythonパッケージです。Gradioの組み込み共有機能を使用すると、デモやWebアプリケーションへのリンクを数秒で共有できます。JavaScript、CSS、Webホスティングの経験は不要です!

上記のような美しいデモを作成するには、ほんの数行のPythonコードが必要です。さっそく始めましょう💫
前提条件: GradioにはPython 3.8以降が必要です。
pipを使用したGradioのインストールをお勧めします。pipはPythonにデフォルトで含まれています。ターミナルまたはコマンドプロンプトで次を実行してください:
pip install gradio
[!TIP] Gradioは仮想環境にインストールするのが最適です。すべての一般的なオペレーティングシステム向けの詳細なインストール手順はこちらに記載されています。
Gradioは、お気に入りのコードエディタ、Jupyterノートブック、Google Colab、またはPythonコードを書くあらゆる場所で実行できます。最初の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] コードの可読性を高めるために、インポート名を
gradioからgrに短縮しています。これは広く採用されている慣例であり、あなたのコードを扱う誰もが簡単に理解できるように、この慣例に従うことをお勧めします。
次に、コードを実行します。Pythonコードを例えば app.py という名前のファイルに記述した場合、ターミナルで python app.py を実行します。
ファイルから実行する場合、以下のデモはブラウザでhttp://localhost:7860に開きます。ノートブック内で実行している場合、デモはノートブック内に埋め込まれて表示されます。

左側のテキストボックスに名前を入力し、スライダーをドラッグして、Submitボタンを押します。右側にフレンドリーな挨拶が表示されるはずです。
[!TIP] ローカルで開発する場合、ホットリロードモードでGradioアプリを実行できます。これにより、ファイルに変更を加えるたびにGradioアプリが自動的にリロードされます。これを行うには、
pythonの代わりにファイル名の前にgradioと入力するだけです。上記の例では、ターミナルでgradio app.pyと入力します。ホットリロードの詳細については、ホットリロードガイドをご覧ください。
Interface クラスについて
最初のデモを作成するために、gr.Interface クラスのインスタンスを作成したことに気付くでしょう。Interface クラスは、1つ以上の入力を受け取り、1つ以上の出力を返す機械学習モデルのデモを作成するように設計されています。
Interface クラスには3つの主要な引数があります:
fn: ユーザーインターフェース(UI)でラップする関数inputs: 入力に使用するGradioコンポーネント。コンポーネントの数は、関数の引数の数と一致する必要があります。outputs: 出力に使用するGradioコンポーネント。コンポーネントの数は、関数の戻り値の数と一致する必要があります。fn 引数は非常に柔軟です — UIでラップしたい任意のPython関数を渡すことができます。上記の例では比較的単純な関数を見ましたが、関数は音楽ジェネレーターから税計算機、事前学習済み機械学習モデルの予測関数まで、何でもかまいません。
input と output 引数は、1つ以上のGradioコンポーネントを受け取ります。これから見ていくように、Gradioには機械学習アプリケーション向けに設計された30以上の組み込みコンポーネント(gr.Textbox()、gr.Image()、gr.HTML() コンポーネントなど)が含まれています。
[!TIP]
inputsとoutputs引数には、これらのコンポーネントの名前を文字列("textbox")として渡すか、クラスのインスタンス(gr.Textbox())として渡すことができます。
上記のように関数が複数の引数を受け取る場合、inputs に入力コンポーネントのリストを渡します。各入力コンポーネントは、関数の引数の1つに順番に対応します。関数が複数の値を返す場合も同様です: 単に outputs にコンポーネントのリストを渡します。この柔軟性により、Interface クラスはデモを作成するための非常に強力な方法となっています。
gr.Interface については、インターフェースの構築に関するシリーズでさらに詳しく説明します。
美しいデモも、共有できなければ意味がありません。Gradioを使用すると、Webサーバーでのホスティングの手間を心配することなく、機械学習デモを簡単に共有できます。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) # たった1つの追加パラメータでデモを共有 🚀
このコードを実行すると、数秒でデモ用の公開URLが生成されます。次のようなものです:
👉 https://a23dsf231adb.gradio.live
これで、世界中の誰もがブラウザからGradioデモを試すことができ、機械学習モデルとすべての計算はローカルコンピュータ上で引き続き実行されます。
デモの共有について詳しくは、Gradioアプリケーションの共有に関する専用ガイドをご覧ください。
これまで、Gradioでデモをすばやく構築できる高レベルクラスである Interface クラスについて説明してきました。しかし、Gradioには他に何ができるのでしょうか?
gr.ChatInterface によるチャットボットGradioには、チャットボットUIの作成に特化して設計されたもう1つの高レベルクラス、gr.ChatInterface が含まれています。Interface と同様に、関数を指定するとGradioが完全に機能するチャットボットUIを作成します。チャットボットの作成に興味がある場合は、gr.ChatInterface に関する専用ガイドに直接進むことができます。
gr.Blocks によるカスタムデモGradioは、より柔軟なレイアウトとデータフローを備えたWebアプリを設計するための低レベルアプローチも、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のおかげで、ブラウザ内で完全に実行されるGradioアプリをPythonで記述します(サーバー不要!)。Gradioガイドを使用して、Gradioについて順を追って学習を続けてください。ガイドには、説明、サンプルコード、埋め込みのインタラクティブデモが含まれています。次は: Gradioデモの主要機能です。
または、基本をすでに理解していて特定のものを探している場合は、より技術的なAPIドキュメントを検索できます。
バグを報告したい場合や機能リクエストがある場合は、GitHubでissueを作成してください。使用方法に関する一般的な質問については、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},
}