使用 Hugging Face Inference Endpoints 部署 LLMs

Hugging Face Inference Endpoints 提供托管的 SaaS 解决方案,用于将开源的 大型语言模型 (LLMs) 部署为生产就绪的 API。此服务消除了对手动基础设施管理和 MLOps 的需求,使开发者能够高效地部署如 Falcon、(Open-)LLaMA、X-Gen、StarCoder 和 RedPajama 等模型。

Inference Endpoints 的核心能力

Inference Endpoints 通过以下几个关键技术特性简化了从模型选择到生产部署的过渡:

  • 简化部署: 模型可以通过几次点击部署为 API,移除了管理底层基础设施的复杂性。
  • 成本优化: 该服务包含自动的 “scale-to-zero” 功能,在端点未使用时通过缩减基础设施来降低成本。用户根据端点的运行时间付费。
  • 企业级安全: 端点可以部署为仅通过直接 VPC 连接可访问的安全离线实例。该服务已通过 SOC2 Type 2 认证,并提供 BAA 和 GDPR 数据处理协议。
  • LLM 特定优化: 为了确保高吞吐量和低延迟,该服务使用 Text Generation Inference (TGI),其中包含 Paged Attention 和 Flash Attention,以及自定义的 transformers 代码。
  • 广泛任务支持: 平台开箱即用地支持 🤗 Transformers、Sentence-Transformers 和 Diffusers,同时允许为诸如说话人分离之类的高级任务进行自定义。

部署和测试 LLMs

部署模型(例如 tiiuae/falcon-40b-instruct)涉及选择模型仓库、云提供商和地区。虽然系统会根据模型大小推荐实例类型(例如 4x NVIDIA T4 GPU),但用户可以手动选择更高性能的硬件(例如单个 NVIDIA A100 GPU)以获得最佳性能。

部署后,可以使用内置的 Inference Widget 手动发送请求或通过 cURL 命令测试端点。为了控制文本生成的行为,API 在有效载荷中支持多种参数,包括:

  • 温度: 控制随机性(默认 1.0)。
  • max_new_tokens: 设置要生成的最大 token 数量(默认 20,最大 512)。
  • repetition_penalty: 控制 token 重复的可能性。
  • top_k 和 top_p: 管理词汇过滤和 nucleus 采样。
  • do_sample: 在采样和贪婪解码之间切换(默认 false)。
  • stop: 一组触发生成结束的 token 列表。

实现响应流式传输

为了通过降低感知延迟来改善用户体验,Inference Endpoints 支持在生成时流式传输 token。可以使用不同语言的特定库来实现:

Python 实现

使用 huggingface_hub 库和 InferenceClient,开发者可以在 text_generation 方法中设置 stream=True。这使得应用程序可以遍历生成的 token 并实时将其输出给用户,同时过滤掉特殊 token 或在定义的停止序列处停止。

JavaScript 实现

使用 @huggingface/inference 库和 HfInferenceEndpoint 类,开发者可以使用 textGenerationStream 方法。此方法使用异步迭代器(for await...of)来处理并显示从端点接收到的 token。

Sources