PRO 推理

今天,我們面向 PRO 使用者推出推理服務——這是一項社群服務,為您提供訪問精選熱門模型 API 端點的許可權,以及免費推理 API 的更高速率限制。請訪問此頁面訂閱 PRO。
Hugging Face PRO 使用者現在可以訪問專有的 API 端點,這些端點連線到一系列強大的精選模型,並得益於 text-generation-inference 提供超高速推理。這是在免費推理 API 之外的額外福利,免費推理 API 可供所有 Hugging Face 使用者使用,以方便對 200,000 多個模型進行測試和原型設計。PRO 使用者在這些模型上享有更高的速率限制,以及對目前一些最佳模型的獨家訪問許可權。
目錄
支援的模型
除了 Hub 中提供的數千個公共模型外,PRO 使用者還可以免費訪問以下最先進的模型並享有更高的速率限制:
模型 | 大小 | 上下文長度 | 用途 |
---|---|---|---|
Meta Llama 3 Instruct | 8B, 70B | 8k token | 最佳聊天模型之一 |
Mixtral 8x7B Instruct | 45B MOE | 32k token | 效能與頂級專有模型媲美 |
Nous Hermes 2 Mixtral 8x7B DPO | 45B MOE | 32k token | 在 Mixtral 8x7B MoE 基礎上進一步訓練 |
Zephyr 7B β | 7B | 4k token | 7B 模型中最佳聊天模型之一 |
Llama 2 Chat | 7B, 13B | 4k token | 最佳對話模型之一 |
Mistral 7B Instruct v0.2 | 7B | 4k token | 7B 模型中最佳聊天模型之一 |
Code Llama Base | 7B 和 13B | 4k token | 程式碼自動補全和填充 |
Code Llama Instruct | 34B | 16k token | 會話式程式碼助手 |
Stable Diffusion XL | 3B UNet | - | 生成影像 |
Bark | 0.9B | - | 文字到音訊生成 |
PRO 推理讓您無需在自己的基礎設施上部署新模型即可輕鬆進行實驗和原型設計。它為 PRO 使用者提供了上述所有模型的即用型 HTTP 端點。它不適用於重型生產應用程式——對於這些場景,我們建議使用推理端點。PRO 推理還允許使用依賴 LLM 端點的應用程式,例如使用用於程式碼補全的 VS Code 擴充套件,或者擁有您自己的 Hugging Chat 版本。
PRO 推理入門
使用 PRO 推理就像向您要執行的模型的 API 端點發送 POST 請求一樣簡單。您還需要從您的令牌設定頁面獲取 PRO 賬戶認證令牌並在請求中使用它。例如,要在終端會話中使用 Meta Llama 3 8B Instruct 生成文字,您可以這樣做:
curl https://api-inference.huggingface.co/models/meta-llama/Meta-Llama-3-8b-Instruct \
-X POST \
-d '{"inputs": "In a surprising turn of events, "}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <YOUR_TOKEN>"
這將打印出類似以下的內容
[
{
"generated_text": "In a surprising turn of events, 2021 has brought us not one, but TWO seasons of our beloved TV show, \"Stranger Things.\""
}
]
您還可以使用許多熟悉的 transformers 生成引數,例如 `temperature` 或 `max_new_tokens`。
curl https://api-inference.huggingface.co/models/meta-llama/Meta-Llama-3-8b-Instruct \
-X POST \
-d '{"inputs": "In a surprising turn of events, ", "parameters": {"temperature": 0.7, "max_new_tokens": 100}}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <YOUR_TOKEN>"
有關生成引數的更多詳細資訊,請參閱下面的控制文字生成。
要透過 Python 傳送請求,您可以利用 `huggingface_hub` Python 庫中提供的便捷實用工具 `InferenceClient`。
pip install huggingface_hub
`InferenceClient` 是一個方便的包裝器,允許您輕鬆地呼叫推理 API 和推理端點。
from huggingface_hub import InferenceClient
client = InferenceClient(model="meta-llama/Meta-Llama-3-8b-Instruct", token=YOUR_TOKEN)
output = client.text_generation("Can you please let us know more details about your ")
print(output)
如果您不想每次例項化客戶端時都顯式傳遞令牌,您可以使用 `notebook_login()`(在 Jupyter notebook 中)、`huggingface-cli login`(在終端中)或 `login(token=YOUR_TOKEN)`(在其他任何地方)進行一次性登入。令牌將在此之後自動使用。
除了 Python,您還可以使用 JavaScript 將推理呼叫整合到您的 JS 或 Node 應用程式中。請參閱 huggingface.js 開始使用!
應用
與 Llama 2 和 Code Llama 34B 聊天
為聊天對話準備的模型採用與所用模型相關的非常特定和獨特的聊天模板進行訓練。您需要注意模型期望的格式並在查詢中複製它。
以下示例摘自我們的 Llama 2 部落格文章,其中詳細描述瞭如何查詢模型進行對話。
prompt = """<s>[INST] <<SYS>>
You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.
If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.
<</SYS>>
There's a llama in my garden 😱 What should I do? [/INST]
"""
client = InferenceClient(model="codellama/CodeLlama-13b-hf", token=YOUR_TOKEN)
response = client.text_generation(prompt, max_new_tokens=200)
print(response)
此示例展示了多輪對話中第一條訊息的結構。請注意,`<<SYS>>` 分隔符用於提供*系統提示*,它告訴模型我們期望它如何表現。然後我們的查詢被插入到 `[INST]` 分隔符之間。
如果我們要繼續對話,我們必須將模型響應追加到序列中,然後發出新的後續指令。這是我們用於 Llama 2 的提示模板的一般結構:
<s>[INST] <<SYS>>
{{ system_prompt }}
<</SYS>>
{{ user_msg_1 }} [/INST] {{ model_answer_1 }} </s><s>[INST] {{ user_msg_2 }} [/INST]
同樣這種格式也可以與 Code Llama Instruct 一起使用,以便與精通程式碼的助手進行技術對話!
有關更多詳細資訊,請參閱我們的 Llama 2 部落格文章。
使用 Code Llama 進行程式碼補全
Code Llama 等程式碼模型可用於程式碼補全,使用與前面示例相同的生成策略:您提供一個可能包含程式碼或註釋的起始字串,模型將嘗試用合理的內容繼續該序列。程式碼模型也可以用於*填充*,這是一種更專業的任務,您提供字首和字尾序列,模型將預測中間應該是什麼。這對於 IDE 擴充套件等應用程式非常有用。讓我們看一個使用 Code Llama 的示例:
client = InferenceClient(model="codellama/CodeLlama-13b-hf", token=YOUR_TOKEN)
prompt_prefix = 'def remove_non_ascii(s: str) -> str:\n """ '
prompt_suffix = "\n return result"
prompt = f"<PRE> {prompt_prefix} <SUF>{prompt_suffix} <MID>"
infilled = client.text_generation(prompt, max_new_tokens=150)
infilled = infilled.rstrip(" <EOT>")
print(f"{prompt_prefix}{infilled}{prompt_suffix}")
def remove_non_ascii(s: str) -> str:
""" Remove non-ASCII characters from a string.
Args:
s (str): The string to remove non-ASCII characters from.
Returns:
str: The string with non-ASCII characters removed.
"""
result = ""
for c in s:
if ord(c) < 128:
result += c
return result
如您所見,用於填充的格式遵循以下模式:
prompt = f"<PRE> {prompt_prefix} <SUF>{prompt_suffix} <MID>"
有關此任務如何工作的更多詳細資訊,請參閱 https://huggingface.co/blog/codellama#code-completion。
Stable Diffusion XL
PRO 使用者也可以使用 SDXL。端點返回的響應是一個表示生成影像的位元組流。如果您使用 `InferenceClient`,它會自動為您解碼成 `PIL` 影像。
sdxl = InferenceClient(model="stabilityai/stable-diffusion-xl-base-1.0", token=YOUR_TOKEN)
image = sdxl.text_to_image(
"Dark gothic city in a misty night, lit by street lamps. A man in a cape is walking away from us",
guidance_scale=9,
)
有關如何控制生成的更多詳細資訊,請參閱此部分。
訊息 API
所有文字生成模型現在都支援訊息 API,因此它們與 OpenAI 客戶端庫(包括 LangChain 和 LlamaIndex)相容。以下程式碼片段展示瞭如何將官方 `openai` 客戶端庫與 Llama 3.1 70B 結合使用:
from openai import OpenAI
import huggingface_hub
# Initialize the client, pointing it to one of the available models
client = OpenAI(
base_url="https://api-inference.huggingface.co/v1/",
api_key=huggingface_hub.get_token(),
)
chat_completion = client.chat.completions.create(
model="meta-llama/Meta-Llama-3.1-70B-Instruct",
messages=[
{"role": "system", "content": "You are a helpful an honest programming assistant."},
{"role": "user", "content": "Is Rust better than Python?"},
],
stream=True,
max_tokens=500
)
# iterate and print stream
for message in chat_completion:
print(message.choices[0].delta.content, end="")
有關訊息 API 使用的更多詳細資訊,請檢視此帖子。
生成引數
控制文字生成
文字生成是一個豐富的話題,存在幾種針對不同目的的生成策略。我們推薦這篇優秀的文章來概述該主題。許多生成演算法都受文字生成端點支援,並且可以使用以下引數進行配置:
- `do_sample`:如果設定為 `False`(預設值),則生成方法將是*貪婪搜尋*,它選擇您提供的提示後最有可能的連續序列。貪婪搜尋是確定性的,因此相同的輸入將始終返回相同的結果。當 `do_sample` 為 `True` 時,令牌將從機率分佈中取樣,因此在不同調用之間會有所不同。
- `temperature`:控制我們希望生成產生的變化量。`temperature` 為 `0` 等同於貪婪搜尋。如果我們為 `temperature` 設定一個值,那麼 `do_sample` 將自動啟用。`top_k` 和 `top_p` 也會發生同樣的情況。在執行程式碼相關任務時,我們希望變異性較小,因此建議使用較低的 `temperature`。對於其他任務,例如開放式文字生成,我們建議使用較高的 `temperature`。
- `top_k`。啟用“Top-K”取樣:模型將從輸入序列後可能出現的 `K` 個最可能的 token 中進行選擇。典型值介於 10 到 50 之間。
- `top_p`。啟用“核心取樣”:模型將從必要數量的令牌中進行選擇,以覆蓋特定的機率質量。如果 `top_p` 為 0.9,則將考慮 90% 最可能的令牌進行取樣,而忽略其餘 10%。
- `repetition_penalty`:嘗試避免生成序列中重複的單詞。
- `seed`:隨機種子,您可以與取樣結合使用,以實現可復現性。
除了上述取樣引數,您還可以使用以下引數控制生成的通用方面:
- `max_new_tokens`:要生成的新 token 的最大數量。預設值為 `20`,如果您想要更長的序列,可以隨意增加。
- `return_full_text`:是否在端點返回的輸出中包含輸入序列。`InferenceClient` 預設使用 `False`,但端點本身預設使用 `True`。
- `stop_sequences`:在輸出中遇到時將導致生成停止的序列列表。
控制影像生成
如果您想對使用 SDXL 端點生成的影像進行更精細的控制,可以使用以下引數:
- `negative_prompt`:描述您希望模型避開的內容的文字。
- `guidance_scale`:您希望模型與提示匹配的緊密程度。數字越低,準確性越低,數字越高可能會降低影像質量或產生偽影。
- `width` 和 `height`:期望的影像尺寸。SDXL 在 768 到 1024 之間的尺寸下效果最佳。
- `num_inference_steps`:要執行的去噪步數。數量越大可能會產生更好的質量,但速度會更慢。典型值介於 20 到 50 步之間。
有關文字到影像生成的其他詳細資訊,我們建議您查閱 diffusers 庫文件。
快取
如果您多次執行相同的生成,您會發現 API 返回的結果是相同的(即使您使用的是取樣而不是貪婪解碼)。這是因為最近的結果被快取了。要強制每次返回不同的響應,我們可以使用 HTTP 頭告訴伺服器每次都執行新的生成:`x-use-cache: 0`。
如果您正在使用 `InferenceClient`,只需將其附加到 `headers` 客戶端屬性即可
client = InferenceClient(model="meta-llama/Meta-Llama-3-8b-Instruct", token=YOUR_TOKEN)
client.headers["x-use-cache"] = "0"
output = client.text_generation("In a surprising turn of events, ", do_sample=True)
print(output)
流式傳輸
令牌流式傳輸是伺服器在模型生成時逐個返回令牌的模式。這使得可以向用戶顯示漸進式生成,而不是等待整個生成完成。流式傳輸是終端使用者體驗的重要方面,因為它減少了延遲,這是流暢體驗最重要的方面之一。


要使用 `InferenceClient` 進行令牌流式傳輸,只需傳入 `stream=True` 並迭代響應即可。
for token in client.text_generation("How do you make cheese?", max_new_tokens=12, stream=True):
print(token)
# To
# make
# cheese
#,
# you
# need
# to
# start
# with
# milk
要將 `generate_stream` 端點與 curl 結合使用,您可以新增 `-N`/`--no-buffer` 標誌,該標誌停用 curl 預設緩衝並顯示從伺服器到達的資料。
curl -N https://api-inference.huggingface.co/models/meta-llama/Meta-Llama-3-8b-Instruct \
-X POST \
-d '{"inputs": "In a surprising turn of events, ", "parameters": {"temperature": 0.7, "max_new_tokens": 100}}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <YOUR_TOKEN>"
訂閱 PRO
您今天可以在這裡註冊 PRO 訂閱。享受更高的速率限制、最新模型的自定義加速端點以及對功能的搶先體驗。如果您已使用推理 API 構建了一些令人興奮的專案,或者正在尋找 PRO 推理中未提供的模型,請使用此討論。企業使用者除了其他功能(例如 SSO)之外,還可以從 PRO 推理 API 中受益。
常見問題
這會影響免費推理 API 嗎?
不會。我們仍然透過免費 API 公開數千個模型,讓人們能夠快速進行原型設計和探索模型功能。
這會影響企業使用者嗎?
擁有企業訂閱的使用者也能受益於精選模型的加速推理 API。
我可以使用自己的模型和 PRO 推理 API 嗎?
免費推理 API 已經支援各種庫(如 diffusers、transformers 和 sentence transformers)的各種小型和中型模型。如果您有自定義模型或自定義推理邏輯,我們建議使用推理端點。