为了账号安全,请及时绑定邮箱和手机立即绑定

提供大型模型支持(第一部分):VLLM、LLAMA CPP Server 和 SGLang

在迅速发展的AI领域,有效支持大型语言模型(LLMs)和视觉-语言模型(VLMs)对于充分发挥其潜力至关重要。随着这些模型变得更复杂,寻找强大且可扩展的解决方案变得越来越重要。在本指南里,我们将重点介绍这三个在这个领域取得进展的主要项目:VLLM、LLAMA CPP Server 和 SGLang。

本系列的这一部分将详细讲解如何使用这些工具,并探索它们的独特功能或特性。我们不会比较它们的性能,因为每个项目都提供了针对不同需求的独特功能或特性。在本系列的第二部分,我们将扩展探索更多的项目。了解这些工具各自的优点将帮助你挑选最适合你需求的那个工具。

VLLM(^注:VLLM是某个特定领域的术语或缩写,此处保留原样。)
其他翻译版本示例:
大规模语言模型(VLLM)

VLLM 是一个高性能库,旨在实现高效的大规模语言模型推理和提供服务的能力。它在吞吐量和灵活性方面表现出色,具有最先进的服务功能、通过 PagedAttention 实现的高效内存管理功能以及持续的请求批处理。它的性能通过 CUDA/HIP 图执行和优化的 CUDA 内核得到了提升。VLLM 支持多种量化方法,并且与流行的 HuggingFace 模型无缝集成。它还提供了多种解码算法、张量和管道并行处理、流式输出等高吞吐量服务,适用于 NVIDIA 和 AMD GPU。实验特性包括前缀缓存和多 LoRA 支持功能。

使用说明:

要安装 VLLM,请运行以下命令:pip install vllm

在命令行或终端中运行以下命令来安装vllm扩展库:

pip install vllm

安装完成后,您可以使用以下命令来使用您的大语言模型(LLMs):

[实际命令]
运行vllm serve命令来启动Qwen/Qwen2-1.5B-Instruct服务,(1.5B参数的Qwen/Qwen2指令模型)自动设置数据类型(--dtype auto),并使用token-abc123作为API密钥进行认证(--api-key token-abc123)。

vllm的关键论点

  • --host HOSTNAME: 服务器主机名(默认:localhost)
  • --port PORT: 服务器端口号(默认:8000)
  • --api-key KEY: 服务器访问的API密钥(如果提供,服务器会在请求头中需要此密钥)
  • --model MODEL: 要使用的HuggingFace模型的名称或路径(例如,Qwen/Qwen2-1.5B-Instruct)
  • --tokenizer TOKENIZER: 要使用的分词器的名称或路径(例如,Qwen/Qwen2-1.5B-Instruct)
  • --quantization 方法:模型权重的量化方法(例如,aqlm, awq, fp8, bitsandbytes, None)
  • --dtype 类型:模型权重和激活的数据类型(例如,auto, half, float16, bfloat16, float32)
  • --device 设备:执行设备(例如,auto, cuda, cpu, tpu)
  • --lora-modules 模块:LoRA模块配置(例如,名称=路径对的列表)
用 Docker 部署

要在 Docker 中部署 VLLM,请执行以下命令:

首先,拉取 Docker 镜像

docker pull vllm/vllm-openai:v0.5.4


然后,运行 Docker 容器并映射 GPU 和缓存目录

docker run --runtime nvidia --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--env "HUGGING_FACE_HUB_TOKEN=<secret>" \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model Qwen/Qwen2-1.5B-Instruct


要使用 openai 库中的接口,

from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="token-abc123",
)

下面的代码用于调用Qwen模型

completion = client.chat.completions.create(
model="Qwen/Qwen2-1.5B-Instruct",
messages=[
{"role": "user", "content": "Hello!"}
]
)

打印模型的响应

print(completion.choices[0].message)


# LLaMA.cpp HTTP 服务器端

<sup>注:LLaMA.cpp 是一个特定项目名称。</sup>

![](https://imgapi.imooc.com/6708c0ba096a8a6414000467.jpg)

[LLaMA.cpp](https://github.com/ggerganov/llama.cpp/blob/master/examples/server/README.md) HTTP 服务器是一个轻量级且快速的基于 C/C++ 的 HTTP 服务器,采用了 httplib、nlohmann::json 和 llama.cpp。它提供了一组 LLM REST API,并且有一个简单的网页界面与 llama.cpp 交互。主要功能包括如下:支持 F16 和量化模型在 GPU 和 CPU 上运行,兼容 OpenAI API,支持并行解码功能、连续批处理功能和监控端点功能。它还支持遵循模式约束的 JSON 响应,并正在开发支持多模态功能。

## 使用指南

要安装 LLaMA.cpp,请运行下面的命令行:

克隆Llama.cpp项目到本地: git clone https://github.com/ggerganov/llama.cpp
然后进入项目目录并编译: cd llama.cpp && make


安装之后,我们应该从Hugging Face hub下载gguf格式的模型(Mistral-7B-Instruct-v0.2-GGUF),比如作为示例,比如:

在 models 目录下下载这个文件:cd models && wget https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF/resolve/main/mistral-7b-instruct-v0.2.Q2_K.gguf
这将下载 Mistral-7B-Instruct-v0.2 模型的二进制文件。


要启动服务器,请运行以下命令:

```bash
# 要启动服务器的具体命令请根据实际情况给出

或直接使用英文命令:

# The specific command to start the server depends on the actual situation

为了更符合上下文,建议直接提供英文命令且不附带解释,因为该命令在该情境下是通用且广为人知的。

    cd ..   
    ./llama-server -m models/mistral-7b-instruct-v0.2.Q2_K.gguf -c 2048

vllm的关键论点

一般:

  • -h, --help, --usage: 显示帮助并退出
  • --version: 显示版本和构建信息
  • -v, --verbose: 显示详细信息
  • --verbosity N: 设置特定的详细程度级别(默认:0)
  • --color: 彩色显示(默认:false)
  • -s, --seed SEED: 随机数生成器种子(默认:-1,小于0时使用随机生成的种子)
  • -t, --threads N: 线程数量(默认:8)
  • --ctx-size N: 上下文提示的大小(默认:0,0 表示从模型加载)
  • -n, --predict N: 预测的令牌数量(默认:-1,-1 表示无穷,-2 表示直到填满提示)
  • --prompt PROMPT: 生成开始提示(默认:'')
  • --interactive: 以交互模式运行(默认:关闭)

抽样:

  • --temp N: 温度(默认:0.8)
  • --top-k N:最高k采样(默认:40,0 = 关闭)
  • --top-p N:最高p采样(默认:0.9,1.0 = 禁用)
  • --mirostat N:Mirostat 采样(默认:0,0 = 关闭,1 = Mirostat,2 = Mirostat 2.0)

型号:

  • -m, --model FNAME: 模型路径(默认:models/$filename)
  • --lora FNAME: 应用LoRA适配器(禁用内存映射)
  • --control-vector FNAME: 添加控制向量(control vector)
  • --check-tensors: 检查模型张量数据的异常值(默认:false)

服务端:

  • --host HOST:监听的IP地址(默认为127.0.0.1)
  • --port PORT:监听端口(默认为8080)
  • --timeout N:服务器读写超时时间(例如600秒,默认为600)

记录:

  • -ld, --logdir LOGDIR: 将 YAML 日志保存到的路径(如果不设置该参数,则不进行日志记录)
  • --log-enable: 启用日志记录

上下文破解:

  • --rope-scaling {none,linear,yarn}: RoPE 缩放方法(默认:线性)

平行:

  • -np, --并行数 N: 解码时并行处理的序列数(默认为1)

嵌入技术:

  • --embd-normalize:参数--embd-normalize用于嵌入的标准化(默认值为2)
用 Docker 部署

使用 Docker 部署 LLaMA.cpp,请运行如下命令:

    docker run -p 8080:8080 -v /path/to/models:/models ghcr.io/ggerganov/llama.cpp:server   
                -m models/mistral-7b-instruct-v0.2.Q2_K.gguf   
                -c 512   
                --host 0.0.0.0   
                --port 8080  

    # 或者,如果你有 CUDA 支持:  
    docker run -p 8080:8080   
                -v /path/to/models:/models   
                --gpus all ghcr.io/ggerganov/llama.cpp:server-cuda   
                -m models/mistral-7b-instruct-v0.2.Q2_K.gguf  
                -c 512   
                --host 0.0.0.0   
                --port 8080   
                --n-gpu-layers 99
    # 指定 GPU 层的数量:
将本地模型路径挂载到容器中:

使用 openai 库中的端点:

从openai导入OpenAI模块。创建一个客户端,设置基础URL为"http://localhost:8081/v1",并使用API密钥"token-abc123"。使用客户端创建一个对话完成,指定模型为"Mistral-7B-Instruct-v0.2-GGUF",并包含一条用户消息"Hello!"。打印出对话的第一条回复

SGLang

SGLang项目地址 是一个快速服务框架,专为大语言模型(LLMs)和视觉语言模型(VLMs)设计,旨在提升交互速度和控制性能。它具有高效的后端运行时,采用RadixAttention技术进行前缀缓存、跳跃式前向约束解码以及各种量化技术。SGLang还支持张量并行性以及高级内核以提升性能。灵活的前端语言使得编写复杂的LLM应用程序变得简单,包括链式生成调用功能、高级提示和并行性,以及支持多种模态和外部交互。

使用指南

安装 SGLang ,执行以下命令:

    pip install --upgrade pip  
    pip install “sglang[all]”  

    # 安装FlashInfer CUDA库
    pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.3/

要启动服务器,请运行如下命令:

# 命令占位符
    ! python -m sglang.launch_server --model-path Qwen/Qwen2-1.5B-Instruct --port 30000
vllm的关键参数

必填选项

  • --model-path MODEL_PATH: 模型权重路径(必选)。

可选键

  • --tokenizer-path TOKENIZER_PATH: 分词器路径。
  • --host HOST: 主机名(默认可以是 localhost)。
  • --port PORT: 服务器端口(默认可以是 8000 或其他常用端口)。
  • --tokenizer-mode {auto,slow}: 默认通常是 auto
  • --load-format {auto,pt,safetensors,npcache,dummy}: 默认通常是 auto
  • --dtype {auto,half,float16,bfloat16,float,float32}: 默认通常是 auto
  • --context-length CONTEXT_LENGTH: 默认为 None,使用模型的默认值。

性能选项和资源选项

  • --mem-fraction-static MEM_FRACTION_STATIC: 静态内存分配比例。

  • --max-prefill-tokens MAX_PREFILL_TOKENS: 预填充批次的最大 token 数。

  • --max-running-requests MAX_RUNNING_REQUESTS: 同时运行的最大请求数。

  • --max-num-reqs MAX_NUM_REQS: 内存池的最大请求数量。

  • --max-total-tokens MAX_TOTAL_TOKENS: 内存池的最大 token 数。

安排与并行处理

  • --schedule-policy {lpm,random,fcfs,dfs-weight}: 调度策略,默认是 fcfs(先到先服务)。
  • --tp-size TP_SIZE: 张量并行度。
  • --dp-size DP_SIZE: 数据并行度。

日志和调试

  • --log-level LOG_LEVEL: 设置日志级别。

  • --log-requests: 开启请求日志。

  • --show-time-cost: 显示自定义标记的时间消耗。

zh: 高级设置

  • --量化 {awq,fp8,gptq,marlin,gptq_marlin,awq_marlin,squeezellm,bitsandbytes}: 量化方法。
  • --负载均衡方法 {round_robin,shortest_queue}: 负载均衡策略。

实验功能或可选项

  • --enable-torch-compile: 开启Torch编译功能。

  • --disable-disk-cache: 禁用磁盘缓存功能。
使用 Docker 部署应用

使用 Docker 部署 SGLang,请运行如下命令:

# 下载指定版本的Docker镜像
docker pull lmsysorg/sglang:v0.2.10-cu124  

# 下载并运行Docker容器,使用所有GPU,并设置端口映射和缓存路径
docker run --gpus all \  
    -p 30000:30000 \  
    -v ~/.cache/huggingface:/root/.cache/huggingface \  
    --env "HF_TOKEN=<secret>" \  
    --ipc=host \  
    lmsysorg/sglang:latest \  
    python3 -m sglang.launch_server --model-path Qwen/Qwen2-1.5B-Instruct --host 0.0.0.0 --port 30000
# 表示命令未结束,换行继续
# 设置环境变量,其中HF_TOKEN是你的秘钥
# 启动Python服务器模块,使用指定的模型路径,监听所有网络接口的30000端口

要使用openai库中的端点:

import openai
openai.Engine.list()
    import openai  
    client = openai.Client(  
        base_url="http://127.0.0.1:30000/v1", api_key="EMPTY")  

    # 文本生成  
    response = client.completions.create(  
        model="default",  
        prompt="法国首都",  
        temperature=0,  
        max_tokens=32,  
    )  
    print(response)

每个工具都提供了独特的优势,从VLLM的先进功能到LLAMA.cpp的轻量级API和SGLang灵活高效的后端技术。这些技术为有效且可扩展的人工智能部署奠定了基础,为我们接下来的探讨打下基础。

请继续关注我们系列的下一部分,接下来我们将介绍更多的工具和技术。

我的领英页面 : https://www.linkedin.com/in/ayoub-kirouane3

我的Hugging Facehttps://huggingface.co/ayoubkirouane

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消