微调的大语言模型(LLM)在AI应用中越来越流行。这些强大的语言模型被广泛用于自动化一系列任务,改善客户服务并生成特定领域的内容。
但是,在大规模上为这些微调的LLM服务带来了挑战。这些模型在计算上消耗。它们的尺寸比传统的微服务大得多。这些功能使得很难存档高通量服务和低冷启动缩放。
这篇文章将介绍我们在llm服务的vllm和Modelz中的服务缩放的经验。
使用VLLM进行高吞吐量LLM服务
vLLM是一种高通量和记忆效率的LLM服务引擎。它提供了OpenAI兼容的API,这使其易于与现有LLM应用程序集成。
使用VLLM的第一个问题是构建GPU环境来构建和安装VLLM。在envd的帮助下,可以在一个文件中完成,例如:
# syntax=v1
def build():
base(dev=True)
install.cuda(version="11.8.0")
install.conda()
install.python()
install.apt_packages(name=["build-essential"])
# install torch here to reuse the cache
install.python_packages(name=["torch"])
# install from source
install.python_packages(name=["git+https://github.com/vllm-project/vllm.git"])
通过运行envd up
,您可以使用所需的一切进入开发环境。如果您喜欢Dockerfile,我们也有一个template。
vllm已经支持许多LLM,例如Llama,Falcon,MPT等。但是,要支持您自己的LLM,您可能需要提供特定于模型的提示模板。为了解决此问题,我们创建了一个称为llmspec的工具,该工具为aterai兼容接口提供了提示模板。您可以在此库的顶部构建提示生成器。
要运行在Kubernetes群集中服务的VLLM,有一些必要的配置:
- 始终将
--worker-use-ray
设置为在另一个python过程中运行模型推断,以避免健康探测失败。 - 提供足够的共享内存(至少30%RAM)。
- 减少
--gpu-memory-utilization
,以避免长序列的gpu oom。 - 如果您想获得长序列,请增加
--max-num-batched-tokens
。
如果要模拟多个并发请求测试,则可以使用以下脚本:
from random import randint
import concurrent.futures
import openai
openai.api_key = "EMPTY"
openai.api_base = "http://localhost:8000/v1"
def query(max_tokens=20):
chat = openai.ChatCompletion.create(
model="mosaicml/mpt-30b-chat",
messages=[{
"role": "user",
"content": "Who are you?",
}],
stream=True,
max_tokens=max_tokens,
)
for result in chat:
delta = result.choices[0].delta
print(delta.get('content', ''), end='', flush=True)
print()
def batch_test():
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [
executor.submit(query, max_tokens=randint(20, 200)) for _ in range(20)
]
for future in concurrent.futures.as_completed(futures):
future.result()
if __name__ == "__main__":
batch_test()
用模型缩放
Modelz是一个完全管理的平台,可为用户提供用于部署机器学习模型的简单API。通过使用我们的平台,可以根据实时API调用来缩放您的服务。 Docker映像还将被优化以最大程度地减少容器冷的开始时间。
如果要将模型部署到私有集群或单个GPU服务器,请尝试openmodelz。它需要照顾基础的技术细节,并提供了一个简单易用的CLI来部署和管理机器学习服务。
如果您有与将模型部署到生产中有关的任何疑问,请随意加入Discord或通过modelz-support@tensorchord.ai。
广告时间
- mosec-一般高性能且易于使用的机器学习服务框架。
- pgvecto.rs-强大的邮政扩展,用于向量相似性搜索。