在迅速发展的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 中部署 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",
)
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 部署 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!"。打印出对话的第一条回复。
SGLangSGLang项目地址 是一个快速服务框架,专为大语言模型(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 部署 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 Face:https://huggingface.co/ayoubkirouane
共同学习,写下你的评论
评论加载中...
作者其他优质文章