“PROs的推断”
PROs推断

今天,我们介绍了针对PRO用户的推理功能 – 这是一个社区提供的服务,为您提供了一些最令人兴奋的模型的API访问权限,以及用于免费推理API使用的改进速率限制。请使用以下页面订阅PRO。
Hugging Face PRO用户现在可以访问经过策划的强大模型的独家API端点,这些模型通过文本生成推理功能提供了超快的推理能力。这是在免费推理API之上的一个福利,该福利可供所有Hugging Face用户测试和原型设计使用200,000+个模型。PRO用户享受这些模型的更高速率限制,以及对一些当今最佳模型的专属访问权限。
目录
- 支持的模型
- 开始使用PRO的推理
- 应用
- 与Llama 2聊天和Code Llama
- 使用Code Llama填充代码
- 稳定的Diffusion XL
- 生成参数
- 控制文本生成
- 控制图像生成
- 缓存
- 流式处理
- 订阅PRO
- 常见问题
支持的模型
除了Hub中提供的成千上万个公共模型外,PRO用户还可以免费访问以下最先进的模型:
PRO用户可以轻松进行实验和原型设计,无需在自己的基础架构上部署新模型。它为PRO用户提供了上述所有模型的即用型HTTP端点。它不适用于重型生产应用程序 – 对此,我们建议使用推理端点。PRO的推理还允许使用依赖于LLM端点的应用程序,例如使用用于代码完成的VS Code扩展,或者拥有您自己的Hugging Chat版本。
开始使用PRO的推理
使用PRO的推理很简单,只需向要运行的模型的API端点发送POST请求即可。您还需要从令牌设置页面获取PRO帐户身份验证令牌,并在请求中使用它。例如,要在终端会话中使用Llama 2 70B Chat生成文本,您可以执行以下操作:
curl https://api-inference.huggingface.co/models/meta-llama/Llama-2-70b-chat-hf \
-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, 20th Century Fox has released a new trailer for Ridley Scott's Alien"
}
]
您还可以使用许多熟悉的transformers生成参数,例如temperature或max_new_tokens:
curl https://api-inference.huggingface.co/models/meta-llama/Llama-2-70b-chat-hf \
-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>"
[
{
"generated_text": "In a surprising turn of events, 2K has announced that it will be releasing a new free-to-play game called NBA 2K23 Arcade Edition. This game will be available on Apple iOS devices and will allow players to compete against each other in quick, 3-on-3 basketball matches.\n\nThe game promises to deliver fast-paced, action-packed gameplay, with players able to choose from a variety of NBA teams and players, including some of the biggest"
}
]
有关生成参数的更多详细信息,请参阅下面的控制文本生成。
要在Python中发送请求,您可以利用InferenceClient,这是huggingface_hub Python库中提供的方便实用的工具:
pip install huggingface_hub
InferenceClient 是一个方便的包装器,可以轻松调用 Inference API 和 Inference Endpoints:
from huggingface_hub import InferenceClient
client = InferenceClient(model="meta-llama/Llama-2-70b-chat-hf", token=YOUR_TOKEN)
output = client.text_generation("请告诉我们更多关于你的细节")
print(output)
如果你不想每次实例化客户端时都显式地传递令牌,你可以使用 notebook_login()(在 Jupyter 笔记本中),huggingface-cli login(在终端中)或 login(token=YOUR_TOKEN)(在其他地方)来登录一次。然后令牌将自动从这里使用。
除了 Python,你还可以使用 JavaScript 在你的 JS 或 Node 应用程序中集成推理调用。请查看 huggingface.js 以开始使用!
应用场景
与 Llama 2 和 Code Llama 聊天
用于跟踪聊天对话的模型是使用非常特定和特定的聊天模板进行训练的,这些模板取决于所使用的模型。你需要小心模型期望的格式,并在你的查询中复制它。
下面的示例摘自我们的 Llama 2 博文,其中详细介绍了如何查询对话模型:
prompt = """<s>[INST] <<SYS>>
您是一个乐于助人、尊重他人和诚实的助手。在回答问题时,请尽量提供有帮助的答案,并确保不包含任何有害、不道德、种族主义、性别歧视、有毒、危险或非法内容。请确保您的回答在社交上没有偏见,并且具有积极性。
如果一个问题没有任何意义,或者在事实上不连贯,请解释原因,而不是回答不正确的内容。如果您不知道问题的答案,请不要分享错误信息。
<</SYS>>
我花园里有一只羊驼 😱 我应该怎么办? [/INST]
"""
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。
稳定扩散 XL
SDXL也适用于PRO用户。端点返回的响应由表示生成图像的字节流组成。如果使用InferenceClient,它会自动解码为PIL图像:
sdxl = InferenceClient(model="stabilityai/stable-diffusion-xl-base-1.0", token=YOUR_TOKEN)
image = sdxl.text_to_image(
"黑暗哥特式城市中的雾夜,被街灯照亮。一个穿着披风的人离开我们",
guidance_scale=9,
)

有关如何控制生成的详细信息,请参阅本节。
生成参数
控制文本生成
文本生成是一个丰富的主题,存在多种用于不同目的的生成策略。我们推荐阅读这个关于该主题的优秀概述。文本生成端点支持许多生成算法,并可以使用以下参数进行配置:
do_sample:如果设置为False(默认值),生成方法将使用贪婪搜索,在提供的提示之后选择最可能的续序列。贪婪搜索是确定性的,因此相同的输入将始终返回相同的结果。当do_sample为True时,将从概率分布中对标记进行采样,因此在调用之间会有所变化。temperature:控制生成中所需的变化量。温度为0等效于贪婪搜索。如果为temperature设置了一个值,则do_sample将自动启用。对于top_k和top_p,也是同样的情况。在进行与代码相关的任务时,我们希望变化较小,因此建议使用较低的temperature。对于其他任务,例如开放式文本生成,我们建议使用较高的值。top_k。启用“Top-K”采样:模型将从输入序列之后可能出现的K个最有可能的标记中选择。典型值为10到50之间。top_p。启用“nucleus采样”:模型将从足以覆盖特定概率质量的标记中选择。如果top_p为0.9,则将考虑90%最可能的标记进行采样,而后面的10%将被忽略。repetition_penalty:尝试避免在生成序列中重复单词。seed:可以与采样结合使用的随机种子,用于可重现性目的。
除了上述的采样参数之外,您还可以使用以下参数控制生成的一般方面:
max_new_tokens:要生成的新标记的最大数量。默认值为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/Llama-2-70b-chat-hf", token=YOUR_TOKEN)
client.headers["x-use-cache"] = "0"
output = client.text_generation("在一个令人惊讶的事件转折中,", do_sample=True)
print(output)
流式传输
令牌流式传输是指服务器在模型生成令牌时逐个返回令牌。这样可以实现向用户显示渐进式生成结果,而不是等待整个生成过程完成。流式传输是终端用户体验的一个重要方面,因为它可以减少延迟,这是一个流畅体验的关键因素之一。
要使用InferenceClient进行令牌流式传输,只需传递stream=True并迭代响应即可:
for token in client.text_generation("你如何制作奶酪?", max_new_tokens=12, stream=True):
print(token)
# 要
# 制作
# 奶酪
# ,
# 你
# 需要
# 从
# 牛奶
# 开始
要使用curl的generate_stream端点,您可以添加-N/--no-buffer标志,禁用curl的默认缓冲并在数据从服务器到达时显示数据:
curl -N https://api-inference.huggingface.co/models/meta-llama/Llama-2-70b-chat-hf \
-X POST \
-d '{"inputs": "在一个令人惊讶的事件转折中,", "parameters": {"temperature": 0.7, "max_new_tokens": 100}}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <YOUR_TOKEN>"
订阅PRO
您可以在此处立即注册PRO订阅。享受更高的速率限制,为最新模型自定义加速端点和早期访问功能。如果您使用推理API构建了一些令人兴奋的项目,或者正在寻找推理API中不可用的模型,请使用此讨论。企业用户还可以在其他功能之上受益于PRO推理API,例如SSO。
常见问题解答
这会影响免费的推理API吗?
不会。我们仍然通过免费API公开了数千个模型,让人们可以快速原型和探索模型的能力。
这会影响企业用户吗?
企业订阅用户也可以从经过策划的模型的加速推理API中受益。
我可以使用自己的模型与PRO推理API吗?
免费的推理API已经支持各种小型和VoAGI模型,来自各种库(如diffusers、transformers和sentence transformers)。如果您有自定义模型或自定义推理逻辑,我们建议使用推理端点。





