大模型本地部署
概要:总结ollama、vllm部署大模型的特点、步骤及注意事项。
零、基础准备
如果你只有CPU,只想做一些简单测试,那么这步可以跳过。如果你想使用GPU,则需要先安装驱动。Windows就去官网下载安装包,如:NVIDIA-GRID-WHQL-512.95.exe。ubuntu推荐在【软件和更新】里的【附件驱动】里选择你要的版本,一键安装。通过命令行安装比较麻烦,容易出错。
一、ollama
ollama部署大模型,过程比较简单,不易出错。但缺点是并发性能较差,前段时间还爆出安全性问题。适合个人或实验阶段。支持llama、deepseek、千问等模型,框架支持mac、Linux、Windows。
mac和windows安装应用,可视化操作,没什么额外需要讲的。这里总结基于容器的部署。
1、拉取官方镜像
docker pull ollama/ollama
如果不了解docker的,可以先看下这篇总结:
docker安装使用基础_docker 安装使用-CSDN博客
2、创建容器
# -v 是路径挂载,主要为了同步模型文件。/llm/models是宿主机的路径,名字无所谓
docker run -d --gpus=all -v /llm/models:/llm/models -v /llm/ollama:/root/.ollama -p 22515:11434 --restart=always --name ollama ollama/ollama
3、启动模型
# 进入容器
docker exec -it ollama /bin/bash/
# 执行,会自动下载模型文件,也可以自行下载后上传,将deepseek-r1:70b替换为你的路径
ollama run deepseek-r1:70b
4、使用
启动后会自动进入对话窗,可以做一些简单测试。另外,默认开启API接口,使用postman测试如下:(注意:我对外的端口不是默认的11434)
二、vllm
相对于ollama,vllm部署大模型稍微复杂一点。但优势在于能够更好的使用多张显卡,提供多种加速推理的技术,如混合精度(FP16)和张量并行(Tensor Parallelism)等。推理速度和并发性能更强,适合企业正式部署。
1、拉取包含驱动的基础镜像
其实最复杂的就是驱动的问题,所以有现成的镜像可用,直接解决了一半问题。如果不想研究版本的,可以直接参考我的。
# 更多版本详见https://catalog.ngc.nvidia.com/orgs/nvidia/containers/cuda-dl-base/tags
docker pull nvcr.io/nvidia/24.10-cuda12.6-devel-ubuntu22.04
2、创建容器
# --mount 路径挂载的另一种方式
docker run --restart=unless-stopped --mount type=bind,source=/AI-Agent/models,target=/AI-Agent/models --gpus all --name ai_model -p 22525:22525 -it your_image_id /bin/bash
3、配置容器环境
# 安装python环境,推荐conda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 创建一个新的python环境
conda create --name python311 python=3.11.11
conda activate python311
# 安装vllm
pip install vllm==0.8.0
4、启动模型
前面创建容器时,做了路径挂载,你需要把下载好的模型放到这个路径。
# CUDA_VISIBLE_DEVICES:指定使用的显卡编号
# tensor-parallel-size:张量并行数,和前面指定的显卡对应
# swap-space:每个GPU配置的内存交换 G
# max-num-seqs:并发数
# gpu-memory-utilization:每张显卡占用的上限
# --dtype half:半精度
# --max-model-len:输入token长度限制
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python -m vllm.entrypoints.openai.api_server --model /AI-Agent/models/deepseek-r1-70b --port 22525 --tensor-parallel-size 8 --swap-space 32 --max-num-seqs 16 --gpu-memory-utilization 0.8 --dtype half --max-model-len 10240
5、问题解决
如果你跟着上述步骤操作,那么大概率会遇到NCCL运行错误,通过增加参NCCL_DEBUG=INFO可以大致看到,启动时往路径/dev/shm写入文件失败。这是因为这个文件夹是默认的临时文件夹,容量受限,可以根据自己的模型大小修改。
重新生成容器:
docker run --shm-size=128G ……
模型启动后,通过nvidia-smi命令查看显卡占用情况:
6、调用接口
因为vllm的接口部分使用的是fastapi,其提供了一个文档接口,其中v1/chat就是对话窗口。兼容langchain中的ChatOpenAI接口。