使用VLLM进行微调的大语言模型
#python #machinelearning #deeplearning #llm

微调的大语言模型(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-强大的邮政扩展,用于向量相似性搜索。