图片由作者提供
在快速发展的人工智能领域,大型语言模型已成为最新突破中的主角。
文本生成已成为一项革命性能力,正在改变机器理解与生成类人文本的方式。也正因其流行,出现了多种工具来简化并促进与 LLM 协作的流程。
大型语言模型 (LLM)迅速激增,几乎每周都有新模型问世,与之并行的,是为适配这项技术而不断丰富的托管方案。在众多工具中,Hugging Face 的 Text Generation Inference(TGI)尤为值得关注,因为它允许我们在本地机器上将 LLM 以服务形式运行。
简单来说,它为我们的模型提供了一个可调用的端点。
本指南将探讨为何 Hugging Face TGI 是一项变革性技术,以及您如何利用它来构建能够生成愈发接近人类文本的高级 AI 模型。
什么是 Hugging Face Text Generation Inference?
Hugging Face Text Generation Inference,亦称 TGI,是一个用 Rust 和 Python 编写的用于部署与服务大型语言模型的框架。它是一个面向生产的部署与服务 LLM 的工具包。
Hugging Face 以 HFOILv1.0 许可发布与分发该工具,允许商业使用,前提是它作为产品或服务中的辅助工具而非核心焦点。它试图解决的主要挑战包括:
图片由作者提供 。
高性能文本生成。 TGI 采用诸如张量并行(将大模型分布到多块 GPU 上的技术)与动态批处理(在服务器端即时将提示打包成批)等技术,优化了包括 StarCoder、BLOOM 、GPT-NeoX、Llama 和 T5 在内的流行开源 LLM 的性能。
高效的资源使用。 借助连续批处理、优化代码和张量并行等特性,TGI 能够同时处理多条请求,同时尽量减少资源占用。
灵活性。 TGI 支持多种安全与保障功能,如水印、用于偏置控制的对数几率变形(通过注入偏置值来修改特定词元的 logits),以及停止序列,以确保 LLM 的负责任与可控使用。
Hugging Face 对部分 LLM 的架构进行了优化,使其在 TGI 下运行更快。这包括 LLaMA 、Falcon7B、Mistral 等热门模型。完整列表可在其文档 中查看。
为什么使用 Hugging Face TGI?
Hugging Face 已经成为构建自然语言能力 AI 的首选平台。这里汇聚了各类开源重量级模型,推动了 NLP 创新。直到不久前,大多数模型都过于庞大,难以直接在本地使用,通常依赖云服务。
然而,随着 QLoRa、GPTQ 等量化技巧的最新进展,一些 LLM 已可在我们的日常设备——如本地电脑上——运行。
Hugging Face TGI 专为在本地机器上将 LLM 作为服务提供而设计。其背后的主要原因是启动 LLM 的繁琐与耗时。
为避免等待时间,最好让模型在后台常驻,随时响应。否则,您每次发送提示都要经历漫长等待。想象一下,您拥有一个端点,汇聚了顶尖语言模型,随叫随到,为您妙笔生花。
TGI 令我眼前一亮的是它的“零折腾”理念。当前,TGI 已适配一批精简的模型架构,部署起来相当省心高效。
这并非纸上谈兵;TGI 已经成为多个在线项目背后的引擎。例如:
图片由作者提供。Hugging Chat(左)与 OpenAssistant(右)的标识
不过有个重要限制:TGI 目前尚不兼容基于 ARM 的 GPU Mac,包括 M1 系列及其后续机型。
设置 Hugging Face TGI
首先,我们需要设置 Hugging Face TGI 端点。
图片由作者提供。
要在本地安装并启动 Hugging Face TGI,首先需要安装 Rust ,然后创建一个至少 Python 3.9 的虚拟环境,例如使用 conda:
curl - - proto '=https' - - tlsv1. 2 - sSf https: // sh. rustup. rs | sh
conda create - n text- generation- inference python= 3.9
conda activate text- generation- inference技术支持
此外,需要安装 Protoc。Hugging Face 建议使用 21.12 版本以获得最佳兼容性。请注意,进行该安装需要 sudo 权限。
PROTOC_ZIP= protoc- 21.12 - linux- x86_64. zip
curl - OL https: // github. com/ protocolbuffers/ protobuf/ releases/ download/ v21. 12 / $PROTOC_ZIP
sudo unzip - o $PROTOC_ZIP - d / usr/ local bin / protoc
sudo unzip - o $PROTOC_ZIP - d / usr/ local 'include/*'
rm - f $PROTOC_ZIP技术支持
我将先介绍如何从零开始安装,我认为这并不算直观。如果过程中遇到问题,您可以跳过这部分,直接运行 Docker 镜像,方式更为简单。以下将分别说明两种场景。
在完成所有前置条件后,我们就可以设置 TGI 了。首先克隆 GitHub 仓库 :
git clone https: // github. com/ huggingface/ text- generation- inference. git技术支持
然后,切换到本地的 TGI 目录,并使用以下命令安装:
cd text- generation- inference/
BUILD_EXTENSIONS= False make install技术支持
现在我们来看如何在有无 Docker 的情况下使用 TGI。这里我将使用 Apache 2.0 许可下可用的 Falcon-7B 模型。
不使用 Docker 启动模型
安装过程会创建一个新命令“text-generation-launcher”,用于启动 TGI 服务器。要用 Falcon-7B 模型激活一个端点,只需执行以下命令:
text- generation- launcher - - model- id tiiuae/ falcon- 7b- instruct - - num- shard 1 - - port 8080 - - quantize bitsandbytes技术支持
其中各参数说明如下:
model-id: 指的是在 Hugging Face Hub 上列出的具体模型名称。本例中 Falcon-7B 为 tiiuae/falcon-7b-instruct。
num-shard: 根据您可用并希望使用的 GPU 数量进行调整。默认值为 1。
port: 指定服务器监听请求的端口。默认是 8080。
quantize: 如果使用显存低于 24 GB 的 GPU,需要进行模型量化以避免内存溢出。在前述命令中,我选择了“bitsandbytes”进行即时量化。另一个选项是 GPTQ(“gptq”),不过我对其细节不太熟悉。
使用 Docker 启动模型(更为直接)
请确保您的电脑已安装 Docker 且正在运行。如果您从未使用过 Docker,可以参考这篇面向数据科学的 Docker 教程 了解基本概念。
请记住,TGI 不兼容 MX 处理器的 Mac 机型。您可以在相应的TGI 包 GitHub 仓库 查看所有可用的 TGI 镜像。如果设备兼容,Docker 会为您找到对应镜像。
这些参数与 text-generation-launcher 的用法基本一致。如果只有一块 GPU,将“all”替换为“0”。
volume= $PWD/ data
sudo docker run - - gpus all - - shm- size 1g - p 8080 : 80 - v $volume: / data ghcr. io/ huggingface/ text- generation- inference: 0.9 - - model- id tiiuae/ falcon- 7b- instruct - - num- shard 1 - - quantize bitsandbytes技术支持
请确保在您需要使用服务器的整个期间,Docker 镜像保持运行状态。
在应用中消费 TGI
将 Text Generation Inference(TGI)服务器集成到您的应用中有多种方式。一旦其启动运行,您即可向 /generate 端点发起 POST 请求以获取结果。
图片由作者提供。
如果您希望 TGI 持续流式输出词元,请改用相应端点,我们将在下一节看到。您可以使用任意工具发出请求,包括 curl、Python 或 TypeScript。要用 Python 脚本查询由 TGI 服务的模型,需先安装以下 text-generation 库。只需执行这条 pip 命令即可:
pip install text- generation技术支持
启动 TGI 服务器后,通过端点 URL 实例化 InferenceClient()。随后可调用 text_generation() 在 Python 中访问该端点。
from text_generation import Client
client = Client( "http://127.0.0.1:8080" )
client. text_generation( prompt= "Your prompt here!" ) 技术支持
若要在 InferenceClient 中启用流式传输,只需设置 stream=True。这样您即可在服务器生成时实时接收词元。用法如下:
for token in client. text_generation( "Your prompt here!" , max_new_tokens= 12 , stream= True ) :
print ( token) 技术支持
通过 TGI 向模型发送提示
请记住,您将使用的是在端点中部署的模型,在我们的示例中为 Falcon-7B。使用 TGI,我们创建了一个实时端点,使我们可以从所选 LLM 获取响应。
因此,在使用 Python 时,我们可以通过运行在本地设备并侦听 8080 端口的客户端,直接将提示发送给 LLM。相应的 Python 脚本大致如下:
from text_generation import Client
client = Client( "http://127.0.0.1:8080" )
print ( client. generate( "Translate the following sentence into spanish: 'What does Large Language Model mean?'" , max_new_tokens= 500 ) . generated_text) 技术支持
这样,我们无需在本地环境中安装模型,即可从模型获取响应。除 Python 外,我们也可使用 CURL 查询 LLM,如下例所示:
curl 127.0 .0 .1 : 8080 / generate \
- X POST \
- d '{"inputs":"Code in Javascript a function to remove all spaces in a string and then print the string twice.","parameters":{"max_new_tokens":500}}' \
- H 'Content-Type: application/json' 技术支持
在稍作体验后,TGI 的速度令人印象深刻。使用 Falcon-7B(词元上限 500)时,只需几秒钟。而如果采用典型的推理方式(使用 transformers 库),大约需要 30 秒。
通过 OpenAI Chat Completion 与 OpenAI 集成
自 1.4.0 版本起,TGI 引入了兼容 OpenAI Chat Completion API 的接口。新的 Messages API 可帮助客户与用户从 OpenAI 模型顺畅迁移到开源 LLM。该 API 可直接集成 OpenAI 的客户端库或第三方工具,如 LangChain 或 LlamaIndex。
TGI 对 Messages 的支持确保其推理端点与 OpenAI Chat Completion API 完全兼容。这种兼容性使用户能够轻松以托管在 TGI 端点上的开源 LLM 替换任何使用 OpenAI 模型的既有脚本,无缝切换。
这一升级让切换变得毫不费力,并可立即获得开源模型的诸多优势,包括:
对模型与数据的完全控制与透明度。
无需担心速率限制。
可灵活定制系统以满足独特需求。
以下是将 TGI 集成至 OpenAI chat completion 协议的示例:
from openai import OpenAI
client = OpenAI(
base_url= "<ENDPOINT_URL>" + "/v1/" ,
api_key= "<HF_API_TOKEN>" ,
)
chat_completion = client. chat. completions. create(
model= "tgi" ,
messages= [
{ "role" : "system" , "content" : "You are a helpful assistant." } ,
{ "role" : "user" , "content" : "Why is open-source software important?" } ,
] ,
stream= True ,
max_tokens= 500
)
for message in chat_completion:
print ( message. choices[ 0 ] . delta. content, end= "" ) 技术支持
如您所见,可以使用 openai 库指向我们的 ENDPOINT 并提供 Hugging Face 密钥。要进一步了解该集成,请参阅Hugging Face TGI 文档 。
使用 TGI 的实用建议
LLM 的核心概念
在上手 HuggingFace TGI 之前,您应已熟悉大型语言模型。请了解诸如分词 、注意力机制 与Transformer 架构 等关键概念。这些基础对于自定义模型与优化文本生成输出至关重要。
模型准备与优化——理解 Hugging Face
学习如何根据您的具体需求准备并优化模型。这包括选择合适的模型、自定义分词器,以及采用在不牺牲质量的情况下提升性能的技术。
确保您理解 HuggingFace 的运作方式,并会使用其 HuggingFace Hub 开展 NLP 开发。一个不错的入门教程是《使用 Transformers 与 Hugging Face 入门》 。
微调同样是您应当了解的概念,因为多数情况下,模型需要针对特定目标进行优化。您可以通过《LLM 微调入门指南》 学习如何微调模型。
生成策略
探索多种文本生成策略,如贪心搜索、束搜索与 top-k 采样。每种策略各有优劣,会影响生成文本的连贯性、创造性与相关性。
结语
Hugging Face 的 TGI 工具包让任何人都能探索 AI 文本生成。它提供了一个易用的工具集,可用于部署与托管 LLM,以支持需要类人文本的高级 NLP 应用。
尽管自建大型语言模型能够带来数据隐私与成本可控的优势,但也需要强劲的硬件。不过,该领域的最新进展使得小型模型已可直接在本地机器上使用。
如果您希望在 LLM 领域不断精进,我强烈建议您继续学习更深入的教程。您可以从 DataCamp 的LLM 概念课程 入手,其中涵盖了多种关键训练方法与最新研究。
其他值得关注的资源包括:
图片由作者提供
在快速发展的人工智能领域,大型语言模型已成为最新突破中的主角。
文本生成已成为一项革命性能力,正在改变机器理解与生成类人文本的方式。也正因其流行,出现了多种工具来简化并促进与 LLM 协作的流程。
大型语言模型(LLM)迅速激增,几乎每周都有新模型问世,与之并行的,是为适配这项技术而不断丰富的托管方案。在众多工具中,Hugging Face 的 Text Generation Inference(TGI)尤为值得关注,因为它允许我们在本地机器上将 LLM 以服务形式运行。
简单来说,它为我们的模型提供了一个可调用的端点。
本指南将探讨为何 Hugging Face TGI 是一项变革性技术,以及您如何利用它来构建能够生成愈发接近人类文本的高级 AI 模型。
什么是 Hugging Face Text Generation Inference?
Hugging Face Text Generation Inference,亦称 TGI,是一个用 Rust 和 Python 编写的用于部署与服务大型语言模型的框架。它是一个面向生产的部署与服务 LLM 的工具包。
Hugging Face 以 HFOILv1.0 许可发布与分发该工具,允许商业使用,前提是它作为产品或服务中的辅助工具而非核心焦点。它试图解决的主要挑战包括:
图片由作者提供。
Hugging Face 对部分 LLM 的架构进行了优化,使其在 TGI 下运行更快。这包括 LLaMA、Falcon7B、Mistral 等热门模型。完整列表可在其文档中查看。
为什么使用 Hugging Face TGI?
Hugging Face 已经成为构建自然语言能力 AI 的首选平台。这里汇聚了各类开源重量级模型,推动了 NLP 创新。直到不久前,大多数模型都过于庞大,难以直接在本地使用,通常依赖云服务。
然而,随着 QLoRa、GPTQ 等量化技巧的最新进展,一些 LLM 已可在我们的日常设备——如本地电脑上——运行。
Hugging Face TGI 专为在本地机器上将 LLM 作为服务提供而设计。其背后的主要原因是启动 LLM 的繁琐与耗时。
为避免等待时间,最好让模型在后台常驻,随时响应。否则,您每次发送提示都要经历漫长等待。想象一下,您拥有一个端点,汇聚了顶尖语言模型,随叫随到,为您妙笔生花。
TGI 令我眼前一亮的是它的“零折腾”理念。当前,TGI 已适配一批精简的模型架构,部署起来相当省心高效。
这并非纸上谈兵;TGI 已经成为多个在线项目背后的引擎。例如:
图片由作者提供。Hugging Chat(左)与 OpenAssistant(右)的标识
不过有个重要限制:TGI 目前尚不兼容基于 ARM 的 GPU Mac,包括 M1 系列及其后续机型。
设置 Hugging Face TGI
首先,我们需要设置 Hugging Face TGI 端点。
图片由作者提供。
要在本地安装并启动 Hugging Face TGI,首先需要安装 Rust,然后创建一个至少 Python 3.9 的虚拟环境,例如使用 conda:
此外,需要安装 Protoc。Hugging Face 建议使用 21.12 版本以获得最佳兼容性。请注意,进行该安装需要 sudo 权限。
我将先介绍如何从零开始安装,我认为这并不算直观。如果过程中遇到问题,您可以跳过这部分,直接运行 Docker 镜像,方式更为简单。以下将分别说明两种场景。
在完成所有前置条件后,我们就可以设置 TGI 了。首先克隆 GitHub 仓库:
然后,切换到本地的 TGI 目录,并使用以下命令安装:
现在我们来看如何在有无 Docker 的情况下使用 TGI。这里我将使用 Apache 2.0 许可下可用的 Falcon-7B 模型。
不使用 Docker 启动模型
安装过程会创建一个新命令“text-generation-launcher”,用于启动 TGI 服务器。要用 Falcon-7B 模型激活一个端点,只需执行以下命令:
其中各参数说明如下:
使用 Docker 启动模型(更为直接)
请确保您的电脑已安装 Docker 且正在运行。如果您从未使用过 Docker,可以参考这篇面向数据科学的 Docker 教程了解基本概念。
请记住,TGI 不兼容 MX 处理器的 Mac 机型。您可以在相应的TGI 包 GitHub 仓库查看所有可用的 TGI 镜像。如果设备兼容,Docker 会为您找到对应镜像。
这些参数与 text-generation-launcher 的用法基本一致。如果只有一块 GPU,将“all”替换为“0”。
请确保在您需要使用服务器的整个期间,Docker 镜像保持运行状态。
在应用中消费 TGI
将 Text Generation Inference(TGI)服务器集成到您的应用中有多种方式。一旦其启动运行,您即可向 /generate 端点发起 POST 请求以获取结果。
图片由作者提供。
如果您希望 TGI 持续流式输出词元,请改用相应端点,我们将在下一节看到。您可以使用任意工具发出请求,包括 curl、Python 或 TypeScript。要用 Python 脚本查询由 TGI 服务的模型,需先安装以下 text-generation 库。只需执行这条 pip 命令即可:
启动 TGI 服务器后,通过端点 URL 实例化 InferenceClient()。随后可调用 text_generation() 在 Python 中访问该端点。
若要在 InferenceClient 中启用流式传输,只需设置 stream=True。这样您即可在服务器生成时实时接收词元。用法如下:
通过 TGI 向模型发送提示
请记住,您将使用的是在端点中部署的模型,在我们的示例中为 Falcon-7B。使用 TGI,我们创建了一个实时端点,使我们可以从所选 LLM 获取响应。
因此,在使用 Python 时,我们可以通过运行在本地设备并侦听 8080 端口的客户端,直接将提示发送给 LLM。相应的 Python 脚本大致如下:
这样,我们无需在本地环境中安装模型,即可从模型获取响应。除 Python 外,我们也可使用 CURL 查询 LLM,如下例所示:
在稍作体验后,TGI 的速度令人印象深刻。使用 Falcon-7B(词元上限 500)时,只需几秒钟。而如果采用典型的推理方式(使用 transformers 库),大约需要 30 秒。
通过 OpenAI Chat Completion 与 OpenAI 集成
自 1.4.0 版本起,TGI 引入了兼容 OpenAI Chat Completion API 的接口。新的 Messages API 可帮助客户与用户从 OpenAI 模型顺畅迁移到开源 LLM。该 API 可直接集成 OpenAI 的客户端库或第三方工具,如 LangChain 或 LlamaIndex。
TGI 对 Messages 的支持确保其推理端点与 OpenAI Chat Completion API 完全兼容。这种兼容性使用户能够轻松以托管在 TGI 端点上的开源 LLM 替换任何使用 OpenAI 模型的既有脚本,无缝切换。
这一升级让切换变得毫不费力,并可立即获得开源模型的诸多优势,包括:
以下是将 TGI 集成至 OpenAI chat completion 协议的示例:
如您所见,可以使用 openai 库指向我们的 ENDPOINT 并提供 Hugging Face 密钥。要进一步了解该集成,请参阅Hugging Face TGI 文档。
使用 TGI 的实用建议
LLM 的核心概念
在上手 HuggingFace TGI 之前,您应已熟悉大型语言模型。请了解诸如分词、注意力机制与Transformer 架构等关键概念。这些基础对于自定义模型与优化文本生成输出至关重要。
模型准备与优化——理解 Hugging Face
学习如何根据您的具体需求准备并优化模型。这包括选择合适的模型、自定义分词器,以及采用在不牺牲质量的情况下提升性能的技术。
确保您理解 HuggingFace 的运作方式,并会使用其 HuggingFace Hub 开展 NLP 开发。一个不错的入门教程是《使用 Transformers 与 Hugging Face 入门》。
微调同样是您应当了解的概念,因为多数情况下,模型需要针对特定目标进行优化。您可以通过《LLM 微调入门指南》学习如何微调模型。
生成策略
探索多种文本生成策略,如贪心搜索、束搜索与 top-k 采样。每种策略各有优劣,会影响生成文本的连贯性、创造性与相关性。
结语
Hugging Face 的 TGI 工具包让任何人都能探索 AI 文本生成。它提供了一个易用的工具集,可用于部署与托管 LLM,以支持需要类人文本的高级 NLP 应用。
尽管自建大型语言模型能够带来数据隐私与成本可控的优势,但也需要强劲的硬件。不过,该领域的最新进展使得小型模型已可直接在本地机器上使用。
如果您希望在 LLM 领域不断精进,我强烈建议您继续学习更深入的教程。您可以从 DataCamp 的LLM 概念课程入手,其中涵盖了多种关键训练方法与最新研究。
其他值得关注的资源包括:
LLM 微调入门指南
用 PyTorch 构建 Transformer
Mistral 7B 的使用与微调:一步步指南。