创建vllm的docker镜像和容器

首先用docker启动一个容器,需求是将模型所在目录挂在到容器某个路径下,设置gpu的使用数量,设置端口

 docker run -dit --gpus all --ipc=host --name vLLM -p 3001:80 -v /mnt/d0/checkpoints:/models python:3.11

在新建的容器内部安装vllm

#进入新建容器内部
docker exec -it vLLM bash
#安装vllm
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple

启动VLLM服务

vllm serve /models/qwq-32b --host 0.0.0.0 --port 80 --tensor-parallel-size 4 --gpu-memory-utilization 0.9 --max-num-seqs 80 --max-model-len 65536



docker run -dit --gpus '"device=4,5,6,7"' --ipc=host --name vLLM -p 3001:80 -v /home/zhangzichao/checkpoints:/models vllm:1.0

检查VLLM服务是否启动成功

curl -X POST "10.20.25.250:3001/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -d '{
        "model": "/models/qwq-32b",
        "messages": [
            {
                "role": "user",
                "content": "介绍一下你自己"
            }
        ],
        "temperature": 0.3,
        "stream": false
    }'
curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "llama-2-13b-chat-hf",
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "Who won the world series in 2020?"}
        ]
    }'

注意,如果在启服务的时候遇到了下面这个错误,需要进入到模型所在的文件夹,找到config.json,修改其中的max_position_embeddings字段和你的max_model_len匹配.

使用vllm部署不同量化方式的大模型

1.下载模型
 modelscope download --model Qwen/QwQ-32B-AWQ  --local_dir ./QwQ-32B-AWQ

2.进入vllm的容器中,启动大模型服务
vllm serve /models/QwQ-32B-AWQ --host 0.0.0.0 --port 80 --tensor-parallel-size 4 --gpu-memory-utilization 0.9 --max-num-seqs 128 --max-model-len 65536

使用vllm部署多模态大模型

modelscope download --model Qwen/Qwen2.5-VL-3B-Instruct --local_dir ./Qwen2.5-VL-3B-Instruct


vllm serve /models/Qwen2.5-VL-3B-Instruct --host 0.0.0.0 --port 80 --tensor-parallel-size 4 --gpu-memory-utilization 0.9 --max-num-seqs 128 --max-model-len 65536  --limit-mm-per-prompt image=5

这里注意,–limit-mm-per-prompt参数尽量加上,如果不加的话,一个对话里最多只能有一张图片,多了就会报错400,这里我随便设成了5,一个对话中对于5张图片就会报400.

curl -X POST "10.20.25.250:3001/v1/chat/completions"   
	-H "Content-Type: application/json"   
	-d '{
        "model": "/models/Qwen2.5-VL-3B-Instruct",
        "messages": [
            {
                "role": "user",
                "content":[
                {"type": "text", "text": "这张图像是什么动物?"},
                {"type": "image_url","image_url": {"url": "https://n.sinaimg.cn/sinacn15/560/w1080h1080/20180513/9ad1-hamfahx6081487.jpg"}}]
            }
        ],
        "temperature": 0.3,
        "stream": false
    }'

如果你想用本地的图片进行测试,首先需要转成base64编码,图片转base64这个网站就可以实现,直接把转换内容替换到上面 “url” 的值就可以了,因为那个编码太长了,贴一张图片作为例子

创建vllm的docker镜像和容器_第1张图片

参考链接:

在docker中使用vLLM部署大模型_vllm docker部署-CSDN博客

--host
  主机地址
--port
  端口
--model  
  加载的模型路径
 --trust-remote-code 
  允许模型加载来自 huggingface的远程代码
--tensor-parallel-size 
  采用的卡数,此处为单机多卡状态,多级多卡需先配置ray
--pipeline-parallel-size
  多机配置,多级多卡可采用此配置,但也可以直接在tensor-parallel-size指定足够的卡
  多机多卡文档后续补充
--served-model-name 
  此处为远程API调用时指定的模型名称
--device
  使用的设备名称,常用的为cuda
--dtype
  模型权重和激活的数据类型,常用的为bfloat16,不指定为auto
--max-model-len
  模型处理的上下文长度。如果未指定,将自动从模型配置中派生
--gpu-memory-utilization
  模型GPU利用率,未指定为0.9,长期稳定0.9,不会以为你的模型参数大或小而变化
--enable-prefix-caching
  启用自动前缀缓存,可以避免在多次推理时重复计算相同的前缀
--enforce-eager
  强制使用 Eager 模式,确保所有操作即时执行。默认为False,将在混合模式下使用 Eager 模式和 CUDA 图,以获得最大的性能和灵活性。
Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 2 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.2%, CPU KV cache usage: 0.0%.
 
Avg prompt throughput:平均每秒吞吐量
Avg generation throughput:系统每秒钟生成的token数量
Running:正在处理的请求数量,此处为并发的两个请求正在处理
Swapped:正在交换和挂起的请求
Pending:等待请求的请求数
GPU KV cache usage:GPU KV缓存使用率
CPU KV cache usage:CPU KV缓存使用率

vLLM Serve 命令参数详解:

vLLM Serve 命令参数详解-CSDN博客

你可能感兴趣的:(docker,容器,运维)