一、通过Vllm部署

1.租用实例,选择镜像

image.png

2.conda创建隔离环境

2.1首先调整下默认环境路径。因默认在系统盘上,系统盘的容量有限,很快用完

1
2
3
4
#把环境路径设置在数据盘
conda config --add envs_dirs /root/autodl-tmp/condaenv
#验证设置
conda config --get envs_dirs

2.2创建隔离环境

1
2
conda create -n myenv python=3.11
#因为已调整了环境路径,所以此时就会在/root/autodl-tmp/condaenv下创建myenv

2.3初始化conda环境并激活隔离环境

1
2
3
conda init bash
exec bash
conda activate myenv

3.安装modelscope和vllm

1
pip install modelscope vllm

4.下载模型,以在modelscope下载DeepSeek-R1-0528-Qwen3-8B为例:

1
2
3
4
5
6
#方式一:用modelscope下载
modelscope download --model deepseek-ai/DeepSeek-R1-0528-Qwen3-8B
#方式二:git clone,使用此方式需要先安装git-lfs
apt install git-lfs
#在/root/autodl-tmp下新建modles目录,进入该目录
git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B.git

关于推理引擎的缓存路径(注意事项)

在使用vllm运行启动模型的时候,指定模型的方法默认是模型的ID,而且如果不加指定的环境变量(VLLM_USE_MODELSCOPE=true),会从huggingface上下载,并且缓存到用户的家目录下。这时如果没有科学上网环境,下载还会失败。所以,如果不从huggingface下载,需要在运行时加入VLLM_USE_MODELSCOPE=true

另外,自定义模型的缓存路径需要指定全局变量,基于此,最好在用户配置文件中直接加入以下配置:

1
2
3
export HF_HOME=/root/autodl-tmp/hf_cache 
export MODELSCOPE_CACHE=/root/autodl-tmp/ms_cache
source /etc/network_turbo

5.安装open-webui

1
2
3
4
5
6
#创建隔离环境
conda create -n webui python=3.11
#启用隔离环境
conda activate webui
#安装open-webui
pip install open-webui

6.vllm启动模型

1
2
# 进入模型下载的models目录
vllm serve ./DeepSeek-R1-0528-Qwen3-8B --tensor-parallel-size 1 --max-model-len 16384

注意事项:这里的--tensor-parallel-size 1 中的1,指的是单卡,如果要用双卡,这里需为2

--max-model-len 指的是模型的序列长度,这个值设置不当将导致启动失败,以DeepSeek-R1-0528-Qwen3-8B这个模型为例,在单卡3090的情况下,最大16K,也就是16384,如果设置为32768将启动失败!!

关于序列长度,这里补充说明一下,序列长度直接影响KV cache.以DeepSeek-R1-0528-Qwen3-8B这个模型为例,在序列长度为32K(32768)时,KV cache大约为16G,这样加上模型自身16G(fp16精度),总计需要32G。单张3090只有24G,肯定会爆显存。而如果将序列长度降至16K(16384),KV cache也减半大约为8G,加上模型自身16G,总计24G,通过vllm的优化机制,单张3090是可以支持的。

而在双卡3090的情况下,显存可以到48G。这样序列长度32K肯定是没问题的,在双卡的情况下,最多可以支持的序列长度为64K(65536),64K的KV cache为32G,加上模型自身16G,总计48G。

综上,单卡3090可支持的最大序列长度为16K(16384),双卡3090可支持的最大序列长度为64K(65536)

以上在AutoDL上亲测有效

成功启动后,将显示开启8000端口,如:

image.png

7.启动open-webui

1
2
3
4
5
6
7
8
open-webui serve
# 启动后监听在8080端口
注意:如果科学上网环境不佳,open-webui在启动过程中会较慢(因为首次运行需要下载一些必要的文件),而且会报错。
验证有没有成功启动:
# 安装iproute2,autodl实际是运行在docker里,默认没有ss
apt install iproute2
#查看8080端口有没有正常监听
ss -ntl

8.启用ssh隧道

因为是在远程的docker容器中运行,没有独立ip,无法访问,只能通过ssh tunel的方式,将远程端口映射到本地

1
ssh -CNg -L 8080:127.0.0.1:8080 root@connect.nmb2.seetacloud.com -p 38241

11.配置open-webui

经过以上设置后,就可以在本地以http://localhost:8080的方式打开webui了,但由于open-webui默认是对接ollama的,所以需要设置,添加对外部连接的支持:

点击左下角的“管理员面板”

image.png

点击“设置”-“外部连接

image.png

点击”+”号,添加连接

image.png

这样设置后,再点击“模型”,open-webui就可以正确对接到我们的模型了


二、通过SGLang部署

其他步骤都与vllm一样,只是需要注意以下几点:

1.创建隔离环境、安装sglang

1
2
3
conda create -n sglang python=3.11
conda activate sglang
pip install sglang[all]

2.使用sglang启动

1
python3 -m sglang.launch_server --model /root/autodl-tmp/models/DeepSeek-R1-0528-Qwen3-8B --trust-remote-code --tp 1 --api-key nanyuzuo.xin --served-model-name DeepSeek-R1-0528-8B
  • 与 vllm 一样:在命令前加SGLANG_USE_MODELSCOPE=true 指定从 modelscope下载模型,如果不加,默认就会从huggingface下载

  • --model 后面可以指定模型ID(会自动下载),也可以指定模型路径

  • --tp 1与 vllm 中的--tensor-parallel-size 1意义相同,都指的是单卡

  • 启动完成后,不同于vllm,sglang默认会开启30000端口

image.png