Ubuntu本地部署各种大模型环境
本教程基于:
**Ubuntu Server 22.04.3 LTS
Driver 550.144.03 / CUDA 12.4
1. 系统配置
1.1 root账户设置密码
当前普通用户界面下输入命令,然后按提示两次输入密码即可。
sudo passwd root
1.2 SSH配置
# 查看是否安装了SSH服务
ps -ef | grep ssh
# 没有安装的话,执行下面语句
sudo apt update # 先更新下资源列表
sudo apt install openssh-server # 安装openssh-server
sudo ps -ef | grep ssh # 查看是否安装成功
sudo systemctl restart ssh # 重新启动SSH服务
# 进入ssh配置文件
sudo vim /etc/ssh/sshd_config
PermitRootLogin是一个用于配置SSH服务器的选项。这个选项决定了是否允许root用户通过SSH直接登录到服务器。通常情况下,为了提高安全性,最好禁止root用户通过SSH直接登录,而是使用一个普通用户登录后再通过su或者sudo切换到root用户来执行需要特权的操作。这样可以降低系统受到攻击的风险。
常见的PermitRootLogin选项取值包括:
yes
:允许root用户通过SSH直接登录no
:禁止root用户通过SSH直接登录without-password
:允许root用户通过SSH密钥登录,但不允许使用密码登录
按i进入编辑模式,找到#PermitRootLogin prohibit-password
,默认是注释掉的。
把PermitRootLogin without-password
改为PermitRootLogin yes
,注意PermitRootLogin without-password
被注释掉了,要去掉注释。如果没有找到PermitRootLogin without-password
,直接文件末尾添加PermitRootLogin yes
即可。然后按esc,输入:wq保存并退出。
1.3 重启sshd服务
sudo systemctl restart ssh
2. 安装Docker
2.1 准备条件
# 安装前先卸载操作系统默认安装的docker
apt remove docker docker-engine docker.io containerd runc
# 安装必要支持
apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
2.2 准备安装
# 添加Docker官方GPG key(可能国内现在访问会存在问题)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加apt源:
# Docker官方源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新源
apt update
apt-get update
2.3 安装Docker
# 安装最新版本的Docker
apt install docker-ce docker-ce-cli containerd.io
# 等待安装完成
# 查看Docker版本
docker version
# 查看Docker运行状态
systemctl status docker
3. 安装NVIDIA驱动
3.1 更新系统
# 确保系统已更新到最新版本
apt update
apt upgrade -y
3.2 安装依赖项
apt install -y build-essential dkms
3.3 禁用Nouveau驱动
Nouveau是开源的NVIDIA驱动,可能与官方驱动冲突。
# 创建配置文件:
vim /etc/modprobe.d/blacklist.conf
# 添加以下内容:
blacklist nouveau
options nouveau modeset=0
# 更新initramfs:
update-initramfs -u
# 重启服务器:
reboot
# 检查nouveau是否关闭成功,应当无输出
lsmod | grep nouveau
3.4 安装驱动
3.4.1 在线安装
apt install nvidia-driver-550 -y
apt update
# 安装完成后,重启服务器
3.4.2 本地安装
# 下载并安装NVIDIA驱动包
# 下载的文件放在:/data/program/目录下
cd /data/program
dpkg -i nvidia-linux-grid-550_550.144.03_amd64.deb
apt install -y cuda-drivers
apt update
# 安装完成后,重启服务器
3.5 验证安装
nvidia-smi
4. 安装CUDA
4.1 在线安装
# 安装zlib1g库
apt install zlib1g -y
# 下载cuda
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
# 安装cuda
sh cuda_12.4.1_550.54.15_linux.run
4.2 离线安装
cd /data/program
# 添加执行权限
chmod +x cuda_12.4.0_550.54.14_linux.run
# 执行脚本
./cuda_12.4.0_550.54.14_linux.run
执行后要等一会加载,然后进入交互式界面,按如下步骤操作:
- 提示已经存在驱动…选择continue
- 阅读并接受协议,输入accept回车
- 上下光标选中 Driver列,按空格以取消勾选驱动,再选择Install回车
- 等待安装完成
4.3 更新环境
# 在/root/.bashrc文件末尾输入:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.4/lib64
export PATH=$PATH:/usr/local/cuda-12.4/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-12.4
# 执行
source /root/.bashrc
# 验证
nvcc --version
systemctl status nvidia-persistenced
5. Docker Nvidia部署
5.1 安装NVIDIA Container Toolkit
Docker默认不支持GPU,需先安装NVIDIA官方提供的容器工具包:
# 添加NVIDIA仓库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt update
apt install -y nvidia-container-toolkit nvidia-container-runtime
5.2 检查Docker默认运行时配置
确保Docker的默认运行时为nvidia
,编辑/etc/docker/daemon.json
:
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
重启Docker服务
systemctl daemon-reload
systemctl restart docker
6. 部署modelscope下载模型
#安装pip
apt install python3-pip
# 安装modelscope
#官方源
pip install modelscope
#清华源
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
# 下载模型
# 参考例子
modelscope download --model Valdemardi/DeepSeek-R1-Distill-Llama-70B-AWQ
modelscope download --model Valdemardi/DeepSeek-R1-Distill-Qwen-32B-AWQ
modelscope download --model Qwen/QwQ-32B-AWQ
modelscope download --model Qwen/Qwen3-32B-AWQ
modelscope download --model Qwen/Qwen2.5-VL-32B-Instruct-AWQ
modelscope download --model Qwen/Qwen3-Reranker-0.6B
# 如果不设置下载路径将默认保存在下面路径(user为实际用户名)
# /home/user/.cache/modelscope/hub/models/Qwen/QwQ-32B-AWQ
# 我是root用户,是以下路径
# /root/.cache/modelscope/hub/models/Qwen/QwQ-32B-AWQ
7. Xinference Docker部署
7.1 安装Xinference
7.1.1拉取镜像
#Dockerhub
docker pull xprobe/xinference:latest
#阿里源
docker pull registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference:latest
#1
docker pull docker.1ms.run/xprobe/xinference:latest
docker pull docker-pull.ygxz.in/xprobe/xinference:latest
7.1.2运行docker
docker run -d \
--name xinference \
--restart=always \
-v /root/.xinference:/root/.xinference \
-v /root/.cache/huggingface:/root/.cache/huggingface \
-v /root/.cache/modelscope:/root/.cache/modelscope \
-v /root/.xinference/log:/root/models/logs \
-e VLLM_WORKER_MULTIPROC_METHOD=spawn \
-e HF_ENDPOINT=https://hf-mirror.com \
-p 9997:9997 \
--shm-size=16g \
--gpus all \
--ipc=host \
xprobe/xinference:latest \
xinference-local -H 0.0.0.0 --log-level debug
OAuth2 系统(待更新)
参考配置文件
# 大佬的配置
xinference launch --model-name qwen2.5-instruct --model-type LLM --model-engine vLLM --model-format awq --size-in-billions 72 --quantization Int4 --n-gpu 4 --replica 1 --n-worker 1 --model-path /root/models/Qwen2.5-72B-Instruct-AWQ --tensor_parallel_size 4 --gpu_memory_utilization 0.85 --max_model_len 16384 --block_size 32 --dtype half --disable_custom_all_reduce true
# QWQ-AWQ
xinference launch --model-name QwQ-32B --model-type LLM --model-engine vLLM --model-format awq --size-in-billions 32 --quantization Int4 --n-gpu 4 --replica 1 --n-worker 1 --download-hub modelscope --model-path /root/.cache/modelscope/hub/models/Qwen/QwQ-32B-AWQ --block_size 32 --gpu_memory_utilization 0.85 --max_model_len 40960 --tensor_parallel_size 4 --dtype half
#DeepSeek-R1-Distill-Llama-70B
xinference launch --model-name deepseek-r1-distill-llama --model-type LLM --model-engine vLLM --model-format awq --size-in-billions 70 --quantization Int4 --n-gpu 4 --replica 1 --n-worker 1 --download-hub modelscope --model-path /root/.cache/modelscope/hub/models/Valdemardi/DeepSeek-R1-Distill-Llama-70B-AWQ --reasoning-content false --block_size 32 --gpu_memory_utilization 0.85 --max_model_len 16384 --tensor_parallel_size 4 --dtype half
#DeepSeek-R1-Distill-Qwen-32B
xinference launch --model-name deepseek-r1-distill-qwen --model-type LLM --model-engine vLLM --model-format awq --size-in-billions 32 --quantization Int4 --n-gpu 4 --replica 1 --n-worker 1 --download-hub modelscope --model-path /root/.cache/modelscope/hub/models/Valdemardi/DeepSeek-R1-Distill-Qwen-32B-AWQ --reasoning-content false --block_size 32 --gpu_memory_utilization 0.8 --max_model_len 40960 --tensor_parallel_size 4 --dtype half
xinference launch --model-name bge-m3 --model-type embedding --replica 1
查看日志
# 查看日志
docker logs -f xinference
8. Lmdeploy部署
8.1 Docker部署(推荐)
8.1.1 拉取镜像
docker pull openmmlab/lmdeploy:latest
8.1.2 启动镜像
参数详解
参数 | 值 | 说明 |
---|---|---|
--model-name |
Qwen/QwQ-32B-AWQ |
服务中模型名称 |
--model-format |
awq |
指定模型格式为AWQ量化 |
--tp |
4 |
张量并行(需要4块GPU) |
--server-port |
8080 |
服务端口号 |
--api-keys |
llm2025 |
API访问密钥 |
--log-level |
INFO |
日志记录级别 |
--cache-max-entry-count |
0.75 |
KV Cache缓存比例(0~1之间) |
--max-batch-size |
32 |
最大批处理大小 |
--session-len |
12000 |
最大会话长度(tokens数) |
--quant-policy |
8 |
KV量化策略:4表示int4量化,8表示int8量化 |
Qwen/QwQ-32B
docker run -d\
--it \
--name lmdeploy-QwQ-32B-AWQ \
--gpus all \
--shm-size 16g \
-v /root/.cache/modelscope/:/root/.cache/modelscope/ \
-v /root/.cache/huggingface/:/root/.cache/huggingface/ \
-p 23333:23333 \
--ipc=host \
openmmlab/lmdeploy:latest \
lmdeploy serve api_server /root/.cache/modelscope/hub/models/Qwen/QwQ-32B-AWQ \
--model-name Qwen/QwQ-32B-AWQ \
--model-format awq \
--tp 4 \
--server-port 23333 \
--api-keys llm2025 \
--log-level INFO \
--cache-max-entry-count 0.8 \
--max-batch-size 32 \
--session-len 16384 \
--quant-policy 8 \
Qwen/Qwen3-32B
docker run -d\
--it \
--name lmdeploy-Qwen3-32B-AWQ \
--gpus all \
--shm-size 16g \
-v /root/.cache/modelscope/:/root/.cache/modelscope/ \
-v /root/.cache/huggingface/:/root/.cache/huggingface/ \
-p 23333:23333 \
--ipc=host \
openmmlab/lmdeploy:latest \
lmdeploy serve api_server /root/.cache/modelscope/hub/models/Qwen/Qwen3-32B-AWQ \
--model-name Qwen/Qwen3-32B-AWQ \
--model-format awq \
--tp 4 \
--server-port 23333 \
--api-keys llm2025 \
--log-level INFO \
--cache-max-entry-count 0.75 \
--max-batch-size 64 \
--session-len 131072 \
--quant-policy 8 \
Qwen/Qwen2.5-VL-32B-Instruct-AWQ
docker run -d\
--it \
--name lmdeploy-Qwen2.5-VL-32B-AWQ \
--gpus all \
--shm-size 16g \
-v /root/.cache/modelscope/:/root/.cache/modelscope/ \
-v /root/.cache/huggingface/:/root/.cache/huggingface/ \
-p 23333:23333 \
--ipc=host \
openmmlab/lmdeploy:latest \
lmdeploy serve api_server /root/.cache/modelscope/hub/models/Qwen/Qwen2___5-VL-32B-Instruct-AWQ \
--model-name Qwen/Qwen2.5-VL-32B-AWQ \
--model-format awq \
--tp 4 \
--server-port 23333 \
--api-keys llm2025 \
--log-level INFO \
--cache-max-entry-count 0.2 \
--max-batch-size 32 \
--min-pixels 256 * 28 * 28
--max-pixels 1280 * 28 * 28 \
--session-len 32768 \
--quant-policy 8 \
8.2. conda环境下部署
8.2.1 安装miniconda环境
# 下载miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 执行安装
bash Miniconda3-latest-Linux-x86_64.sh
阅读许可协议并按Enter,然后输入yes接受许可协议。安装过程中,建议选择默认路径(如~/miniconda3)。
初始化环境变量:输入yes自动将Miniconda添加到~/.bashrc。
# 运行脚本
source ~/.bashrc
# 安装完成后,重新启动终端,或者手动执行下面
source ~/miniconda3/bin/activate
# 完成后检测版本号
conda --version
# 成功后升级conda文件
conda update conda
8.2.2 安装partial_json_parser(可选)
# 注意,如果出现ModuleNotFoundError: No module named 'partial_json_parser'报错,手动安装即可
pip install partial_json_parser
8.2.3 conda中部署Lmdeploy
# 创建conda环境
conda create -n lmdeploy python=3.11 -y
# 在环境中安装lmdeploy
conda activate lmdeploy
# 官方pip下载
pip install lmdeploy
# 清华镜像下载
pip install lmdeploy -i https://pypi.tuna.tsinghua.edu.cn/simple
# 华为镜像下载
pip install lmdeploy -i https://mirrors.huaweicloud.com/repository/pypi/simple/
8.2.4 加载模型
# QWQ
lmdeploy serve api_server /root/.cache/modelscope/hub/models/Qwen/QwQ-32B-AWQ \
--model-name Qwen/QwQ-32B-AWQ \
--model-format awq \
--tp 4 \
--server-port 23333 \
--api-keys llm2025 \
--log-level INFO \
--cache-max-entry-count 0.8 \
--max-batch-size 32 \
--session-len 16384 \
# Qwen/Qwen2.5-72B-Instruct
lmdeploy serve api_server /root/.cache/modelscope/hub/models/Qwen/Qwen2.5-72B-Instruct-AWQ \
--model-name Qwen/Qwen2.5-72B-Instruct-AWQ \
--model-format awq \
--tp 4 \
--server-port 23333 \
--api-keys llm2025 \
--log-level INFO \
--cache-max-entry-count 0.8 \
--max-batch-size 32 \
--session-len 16384 \
--quant-policy 8