與他人分享演示
現在您已經構建了一個演示,您可能希望與其他人分享它。 梯度演示 可以通過兩種方式共享:使用 temporary share link 或 permanent hosting on Spaces。
我們將很快介紹這兩種方法。 但在分享演示之前,您可能需要完善它 💅.
打磨你的 Gradio 演示:
為了給你的演示添加額外的內容,Interface
類支持一些可選參數:
title
:你可以給你的演示一個標題,它出現在輸入和輸出組件的上方。description
:您可以為界面提供描述(文本、Markdown 或 HTML),顯示在輸入和輸出組件的上方和標題下方。article
:您還可以編寫擴展文章(文本、Markdown 或 HTML)來解釋界面。如果提供,它會出現在輸入和輸出組件的_下方。theme
:不喜歡默認顏色?將主題設置為使用default
、huggingface
、grass
、peach
之一。您還可以添加dark-
前綴,例如dark-peach
用於深色主題(或者只是dark
用於默認的深色主題)。examples
:為了讓您的演示更易於使用,您可以為函數提供一些示例輸入。它們出現在 UI 組件下方,可用於填充界面。這些應該作為嵌套列表提供,其中外部列表由樣本組成,每個內部列表對應於每個輸入組件的輸入組成。live
:如果你想讓你的演示“活”,這意味著你的模型每次輸入更改時都會重新運行,你可以設置live=True
。這對使用快速模型很有意義(我們將在本節末尾看到一個示例) 使用上面的選項,我們最終得到了一個更完整的界面。 運行下面的代碼,以便與 Rick and Morty 聊天:
title = "Ask Rick a Question"
description = """
The bot was trained to answer questions based on Rick and Morty dialogues. Ask Rick anything!
<img src="https://huggingface.co/spaces/course-demos/Rick_and_Morty_QA/resolve/main/rick.png" width=200px>
"""
article = "Check out [the original Rick and Morty Bot](https://huggingface.co/spaces/kingabzpro/Rick_and_Morty_Bot) that this demo is based off of."
gr.Interface(
fn=predict,
inputs="textbox",
outputs="text",
title=title,
description=description,
article=article,
examples=[["What are you doing?"], ["Where should we time travel to?"]],
).launch()
使用上面的選項,我們最終得到了一個更完整的界面。 試試下面的界面:
使用臨時鏈接分享您的演示
現在我們已經有了機器學習模型的工作演示,讓我們學習如何輕鬆共享指向我們界面的鏈接。
通過在 launch()
方法中設置 share=True
可以輕鬆地公開共享接口:
gr.Interface(classify_image, "image", "label").launch(share=True)
這會生成一個公開的、可共享的鏈接,您可以將其發送給任何人! 當您發送此鏈接時,另一方的用戶可以在瀏覽器中試用該模型長達 72 小時。 因為處理發生在您的設備上(只要您的設備保持開啟!),您不必擔心打包任何依賴項。 如果您使用 Google Colab 筆記本工作,則始終會自動創建共享鏈接。 它通常看起來像這樣:XXXXX.gradio.app。 雖然鏈接是通過 Gradio 鏈接提供的,但我們只是您本地服務器的代理,不會存儲通過接口發送的任何數據。
但是請記住,這些鏈接是可公開訪問的,這意味著任何人都可以使用您的模型進行預測! 因此,請確保不要通過您編寫的函數公開任何敏感信息,或允許在您的設備上發生任何關鍵更改。 如果設置 share=False
(默認值),則僅創建本地鏈接。
在 Hugging Face Spaces 上託管您的演示
可以傳遞給同事的共享鏈接很酷,但是如何永久託管您的演示並讓它存在於互聯網上自己的“空間”中?
Hugging Face Spaces 提供了在互聯網上永久託管 Gradio 模型的基礎設施,免費! Spaces 允許您創建並推送到(公共或私人)存儲庫,
你的 Gradio 在哪裡
接口代碼將存在於 app.py
文件中。 閱讀分步教程 開始使用,或觀看下面的示例視頻。
✏️ 讓我們應用它!
使用到目前為止我們在各節中學到的知識,讓我們創建我們在本章第一節中看到的草圖識別演示。 讓我們為我們的界面添加一些自定義並設置 share=True
以創建一個我們可以傳遞的公共鏈接。
我們可以從 class_names.txt 加載標籤,並從 pytorch_model.bin加載預訓練的 pytorch 模型 。 通過點擊鏈接並單擊文件預覽左上角的下載來下載這些文件。 讓我們看看下面的代碼,看看我們如何使用這些文件來加載我們的模型並創建一個predict()
函數:
from pathlib import Path
import torch
import gradio as gr
from torch import nn
LABELS = Path("class_names.txt").read_text().splitlines()
model = nn.Sequential(
nn.Conv2d(1, 32, 3, padding="same"),
nn.ReLU(),
nn.MaxPool2d(2),
nn.Conv2d(32, 64, 3, padding="same"),
nn.ReLU(),
nn.MaxPool2d(2),
nn.Conv2d(64, 128, 3, padding="same"),
nn.ReLU(),
nn.MaxPool2d(2),
nn.Flatten(),
nn.Linear(1152, 256),
nn.ReLU(),
nn.Linear(256, len(LABELS)),
)
state_dict = torch.load("pytorch_model.bin", map_location="cpu")
model.load_state_dict(state_dict, strict=False)
model.eval()
def predict(im):
x = torch.tensor(im, dtype=torch.float32).unsqueeze(0).unsqueeze(0) / 255.0
with torch.no_grad():
out = model(x)
probabilities = torch.nn.functional.softmax(out[0], dim=0)
values, indices = torch.topk(probabilities, 5)
return {LABELS[i]: v.item() for i, v in zip(indices, values)}
現在我們有了一個predict()
函數。 下一步是定義並啟動我們的漸變界面:
interface = gr.Interface(
predict,
inputs="sketchpad",
outputs="label",
theme="huggingface",
title="Sketch Recognition",
description="Who wants to play Pictionary? Draw a common object like a shovel or a laptop, and the algorithm will guess in real time!",
article="<p style='text-align: center'>Sketch Recognition | Demo Model</p>",
live=True,
)
interface.launch(share=True)
注意 Interface
中的 live=True
參數,這意味著草圖演示使
每次有人在畫板上畫畫時的預測(沒有提交按鈕!)。
此外,我們還在 launch()
方法中設置了 share=True
參數。
這將創建一個公共鏈接,您可以發送給任何人! 當您發送此鏈接時,對方的用戶可以嘗試草圖識別模型。 重申一下,您還可以在 Hugging Face Spaces 上託管模型,這就是我們能夠嵌入上面的演示的方式。
接下來,我們將介紹 Gradio 可用於 Hugging Face 生態系統的其他方式!