译者 | 李睿
审校 | 重楼
近几个月来,开源的大型语言模型一直在迅速发展。Meta公司发布了LLaMA,随后又发布了一系列其他模型,这导致很多企业运行自己的LLM的兴趣激增。
拥有自己的LLM(例如LLaMA2)提供了一些优势:企业可以更好地控制大型语言模型的使用,确保数据的隐私,允许定制以适应特定需求,并促进与现有系统的无缝集成。然而,企业运行自己的LLM也有许多挑战,其中包括设置必要的IT基础设施,选择适当的LLM,使用自己的数据运行并可能微调模型,扩展模型以满足需求,以及解决许可问题。
幸运的是,有许多可用的解决方案可以简化开始使用开源LLM的过程。本文将介绍两种无需编写代码即可设置开源LLM API服务器的解决方案。
为什么选择Web API服务器?
web应用程序和LLM服务器如何交互
机器学习项目的固有挑战之一是开发周期长。当企业希望将LLM功能添加到现有产品中时,将开发和部署模型所需的时间最小化是至关重要的。
开源LLM尤其具有挑战性,因为这些大型语言模型是用各种编程语言和框架编写的。当尝试将这些模型合并到现有应用程序中时,这种多样性可能会带来集成挑战。
最小化开发和集成时间的一个解决方案是建立一个Web API。如果企业已经在使用像GPT-4或Cohere这样的商业LLM API,那么为企业的开源LLM设置一个API可以让企业在对现有代码进行最小更改的情况下测试和比较模型。这种方法提供了在开源API和商业API之间轻松切换的灵活性。
除了集成之外,Web API还可以解决其他挑战。例如,企业的Web应用程序可能运行在无服务器或虚拟机上,而没有用于运行LLM的专用硬件。
在这种情况下,LLM API允许企业解耦应用程序的不同部分并分别运行它们。例如,可以将LLM部署在配备A100 GPU的单独虚拟机上,并使Web服务器可以通过API端点访问它。这种解耦意味着随着模型的开发,可以修改底层服务器并对其进行扩展,而无需对Web服务器进行任何更改。
需要注意的是,API部署可能不是应用程序的最终解决方案。随着企业在开发过程中的试验和进展,可能会发现将LLM集成到应用程序中的更有效的方法。当企业从原型转移到生产,保持灵活和开发的方法,因为可以深入了解其选择的LLM的能力和潜力。
应该使用哪种语言模型?
开源LLM领域的多样性也使得为其应用程序选择正确的模型变得困难。LLaMA是一个很好的起点。其受欢迎程度使其成为一个引人注目的选择,因为许多库和项目都支持它。此外,已经在LLaMA和LLaMA2之上构建了许多模型,这意味着如果企业构建的产品可以与其中一个模型一起工作,那么使其项目适应其他模型的可能性很大。
尤其是LLaMA2,其令人印象深刻的基准在开源模型中脱颖而出。如果企业的目标是尽可能接近最先进的API LLM,那么LLaMA2可能是其最好的选择。它也有不同的大小,从70亿个到700亿个参数不等。这种可扩展性允许企业调整模型的复杂性,而无需对应用程序进行重大更改(尽管需要检查硬件设置以适应模型的大小)。
LLaMA2的另一个优点是其允许商业使用的许可。这实际上意味着可以将其用于几乎任何应用程序。许可证中有一些关于用户数量的警告,但这些限制只适用于很少的产品。
然而,一旦企业使用选择的模型进行了测试,可能想要探索其他系列LLM。MPT和Cerebras GPT系列模型也具有很高的性能,并且可以为企业的特定用例提供独特的优势。
在选择了LLM之后,下一步是找到一个框架,该框架可以将LLM作为API端点服务,只需很少的编码或不需要编码。以下将探讨两个框架,它们可以帮助企业快速有效地启动并运行LLM API服务器。
使用vLLM启动API服务器
vLLM是一个功能强大的Python库,可以快速方便地访问各种模型。vLLM由加州大学伯克利分校的研究人员开发,不仅支持LLaMA和LLaMA2,还支持其他先进的开源语言模型,例如MPT、OPT、Falcon、Dolly和BLOOM。
vLLM最引人注目的特性之一是它运行的速度。在一些实验中,它吞吐量已经证明比Hugging Face的LLM要高14~24倍。这种速度加上其现成的API端点功能,使vLLM成为启动语言模型Web API服务器的高效工具。
要运行vLLM,需要一台配备Python3.8或更高版本、CUDA 11.0-11.8和合适GPU的Linux服务器。或者,可以使用NVIDIA PyTorch Docker镜像,该镜像附带了所有必要的预安装包和库。(如果选择Docker镜像,必须在使用vLLM之前卸载Pytorch)。
使用一个简单的命令就可以轻松安装vLLM:
pip install vllm
其安装过程可能需要几分钟,具体取决于网络连接。在安装之后,启动LLaMA2 API端点就像运行以下命令一样简单:
python -m vllm.entrypoints.api_server --env MODEL_NAME=openlm-research/open_llama_13b
该命令在http://localhost:8000上启动服务器。企业可以使用-host和-port参数指定地址和端口,并且可以用自己的模型的名称替换MODEL_NAME参数。
要检查服务器,可以运行curl命令:
curl http://localhost:8000/generate \
-d '{
"prompt": "The most famous book of J.R.R. Tolkien is",
"temperature": 0,
"max_tokens": 50
}'
如果一切正常,应该从服务器接收模型的输出。
vLLM的主要优点之一是它与OpenAI API的兼容性。如果其应用程序已经与OpenAI模型一起工作,可以运行一个模仿OpenAI API的vLLM服务器:
python -m vllm.entrypoints.openai.api_server --model meta-llama/Llama-2-13b-hf
之后,只需要改变其代码指向API调用到服务器,而不是OpenAI API:
openai.api_key = "EMPTY"
openai.api_base = "http://localhost:8000/v1"
如果使用-host和-port参数更改默认设置,可以相应地更改api_base变量。
vLLM还支持跨多个服务器的并行GPU推理和分发。如果服务器有多个GPU,可以通过使用tensor-parallel-size参数轻松调整vLLM来利用它们:
python -m vllm.entrypoints.api_server \
--env MODEL_NAME=openlm-research/open_llama_13b \
--tensor-parallel-size 4
这个特性对于需要高计算能力的应用程序特别有用。
vLLM的另一个显著特性是令牌流。这意味着模型可以在生成输出标记时返回它们,而不是等待整个序列完成。如果企业的应用程序生成较长的响应,并且不想让用户等待很长时间,则这一特性特别有用。
但是vLLM并非没有其局限性。它不支持LoRA和QLoRA适配器,这是在不修改原始模型权重的情况下对开源LLM进行微调的常用技术。vLLM也不支持量化,量化是一种使LLM足够紧凑以适应较小GPU的技术。尽管存在这些限制,vLLM仍然是快速测试LLM的非常方便的工具。
创建OpenLLM服务器
OpenLLM是另一个广泛使用的为语言模型创建Web服务器的平台。它以其简单性和多功能性而闻名,使其成为开发人员和研究人员的热门选择。
要安装OpenLLM,需要确保其服务器满足必要的先决条件。一旦确认,安装过程就很简单了。执行如下命令:
pip install openllm
在成功安装后,可以直接从命令行启动服务器。下面是如何做到这一点的一个例子:
openllm start llama --model-id openlm-research/open_llama_7b_v2 \
--max-new-tokens 200 \
--temperature 0.95 \
OpenLLM的一个突出特性是它对适配器(如LoRA)的支持。该特性允许企业将完整的LLM和几个轻量级适配器组合在一起,从而使企业能够在单个模型上运行多个应用程序。
OpenLLM还与LangChain等流行库无缝集成。这种集成简化了编写应用程序或将代码移植到新的LLM的过程,节省了开发人员宝贵的时间和精力。
然而,OpenLLM也不是没有缺点。与vLLM不同,它不支持批处理推理,这可能成为高使用率应用程序的瓶颈。此外,OpenLLM缺乏对跨多个GPU的分布式推理的内置支持。尽管存在这些限制,OpenLLM仍然是部署语言模型服务器的健壮且用户友好的平台。它对于构建LLM应用程序的原型特别有用,特别是如果想要进行LLM微调的话。
原文标题:How to launch an LLM API server with minimal coding,作者:Ben Dickson
链接:https://bdtechtalks.com/2023/08/14/llm-api-server-nocode/。