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)的各种小型和中型模型。如果您有自定义模型或自定义推理逻辑,我们建议使用推理端点。