在Linux服务器上部署阿里的qwq-32B模型
一、查看系统配置
在服务器中,需要查看cpu,gpu和磁盘信息以选择合适的模型进行本地部署
查看cpu信息
用lscpu
命令,查看的是cpu的统计信息,用cat /proc/cpuinfo
命令,可以查看每个cpu信息,如每个CPU的型号,主频等,用free -m
命令,可以查看内存的使用情况,使用cat /proc/meminfo
命令可以查看内存的详细使用,使用命令top
可以实时查看每个cpu的使用情况
(llm) (base) llm@test-NF5468-A7-A0-R0-00:~$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 52 bits physical, 57 bits virtual
Byte Order: Little Endian
CPU(s): 384
On-line CPU(s) list: 0-383
Vendor ID: AuthenticAMD
Model name: AMD EPYC 9654 96-Core Processor
CPU family: 25
Model: 17
Thread(s) per core: 2
Core(s) per socket: 96
Socket(s): 2
Stepping: 1
Frequency boost: enabled
CPU max MHz: 3707.8120
CPU min MHz: 1500.0000
BogoMIPS: 4800.21
查看磁盘信息
采用lsblk
可以查看硬盘和分区分布,采用fdisk -l
可以查看硬盘和分区的详细信息
(llm) (base) llm@test-NF5468-A7-A0-R0-00:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 4K 1 loop /snap/bare/5
loop1 7:1 0 74.2M 1 loop /snap/core22/1122
loop2 7:2 0 73.9M 1 loop /snap/core22/1748
loop3 7:3 0 497M 1 loop /snap/gnome-42-2204/141
loop4 7:4 0 266.6M 1 loop /snap/firefox/3836
loop5 7:5 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop6 7:6 0 12.3M 1 loop /snap/snap-store/959
loop7 7:7 0 40.4M 1 loop /snap/snapd/20671
loop8 7:8 0 44.4M 1 loop /snap/snapd/23545
loop9 7:9 0 568K 1 loop /snap/snapd-desktop-integration/253
loop10 7:10 0 452K 1 loop /snap/snapd-desktop-integration/83
sda 8:0 0 1.7T 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
└─sda2 8:2 0 1.7T 0 part /var/snap/firefox/common/host-hunspell
/
sdb 8:16 0 43.7T 0 disk
└─sdb1 8:17 0 43.7T 0 part /data1
nvme0n1 259:0 0 7T 0 disk
└─nvme0n1p1 259:1 0 7T 0 part /data2
查看gpu信息
使用命令nvidia-smi
查看显卡的信息和使用情况,如果需要对显卡实时监控,使用watch -n 5 nvidia-smi
命令,每隔5s刷新一次使用情况
(llm) (base) llm@test-NF5468-A7-A0-R0-00:~$ nvidia-smi
Fri Apr 25 11:36:37 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.86.15 Driver Version: 570.86.15 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4090 Off | 00000000:01:00.0 Off | Off |
| 32% 29C P8 25W / 450W | 73MiB / 49140MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA GeForce RTX 4090 Off | 00000000:41:00.0 Off | Off |
| 32% 30C P8 26W / 450W | 15MiB / 49140MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 2 NVIDIA GeForce RTX 4090 Off | 00000000:81:00.0 Off | Off |
| 32% 30C P8 20W / 450W | 15MiB / 49140MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 3 NVIDIA GeForce RTX 4090 Off | 00000000:C1:00.0 Off | Off |
| 31% 31C P8 30W / 450W | 15MiB / 49140MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 6158 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 253042 G /usr/lib/xorg/Xorg 48MiB |
| 1 N/A N/A 6158 G /usr/lib/xorg/Xorg 4MiB |
| 2 N/A N/A 6158 G /usr/lib/xorg/Xorg 4MiB |
| 3 N/A N/A 6158 G /usr/lib/xorg/Xorg 4MiB |
+-----------------------------------------------------------------------------------------+
二、模型下载
使用镜像进行下载,先配置镜像的环境变量,并安装依赖
pip3 install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com
将以下内容写入download.py
文件并运行,需要下载GGUF格式的模型参数,关于qwq模型更详细的信息可以参考这个网站: QwQ-32B-GGUF下载网址,可以看到满血模型的参数文件名对应的是fp16,所以采用allow_patterns = ["*fp16*"]
下载满血模型,对应的要下载相应的量化模型则可以看里面的文件列表,例如下载4bit量化则采用allow_patterns = ["*q4_k_m*"]
,但是采用量化版本的qwq模型性能下降严重,所以本文采用的是满血版本的模型
# Install Hugging Face dependencies before running this:
# pip install huggingface_hub hf_transfer
from huggingface_hub import snapshot_download
snapshot_download(
repo_id = "Qwen/QwQ-32B-GGUF",
local_dir = "QwQ-32B-GGUF",
allow_patterns = ["*fp16*"],
)
下载好后进入文件QwQ-32B-GGUF/fp16
文件夹,运行du -sh ./*
命令,查看下载下来的文件列表和所占用磁盘空间
(llm) llm@test-NF5468-A7-A0-R0-00:~/LLM-Model/QwQ-32B-GGUF$ du -sh ./*
62G ./fp16
(llm) llm@test-NF5468-A7-A0-R0-00:~/LLM-Model/QwQ-32B-GGUF$ cd fp16/
(llm) llm@test-NF5468-A7-A0-R0-00:~/LLM-Model/QwQ-32B-GGUF/fp16$ du -sh ./*
3.7G ./qwq-32b-fp16-00001-of-00017.gguf
3.7G ./qwq-32b-fp16-00002-of-00017.gguf
3.7G ./qwq-32b-fp16-00003-of-00017.gguf
3.7G ./qwq-32b-fp16-00004-of-00017.gguf
3.7G ./qwq-32b-fp16-00005-of-00017.gguf
3.7G ./qwq-32b-fp16-00006-of-00017.gguf
3.7G ./qwq-32b-fp16-00007-of-00017.gguf
3.7G ./qwq-32b-fp16-00008-of-00017.gguf
3.7G ./qwq-32b-fp16-00009-of-00017.gguf
3.7G ./qwq-32b-fp16-00010-of-00017.gguf
3.7G ./qwq-32b-fp16-00011-of-00017.gguf
3.7G ./qwq-32b-fp16-00012-of-00017.gguf
3.7G ./qwq-32b-fp16-00013-of-00017.gguf
3.7G ./qwq-32b-fp16-00014-of-00017.gguf
3.7G ./qwq-32b-fp16-00015-of-00017.gguf
3.7G ./qwq-32b-fp16-00016-of-00017.gguf
2.9G ./qwq-32b-fp16-00017-of-00017.gguf
三、模型部署运行
模型的部署运行参考的网址为deepseek-r1部署教程,这里我们部署的是qwq模型,所以会有些许不同
Screen命令
在部署运行模型之前,先了解下Screen命令,它的功能大体有3个
- 会话恢复:只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
- 多窗口:在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。
- 会话共享:Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。
apt install screen # 安装screen
screen -ls # 查看已经创建的窗口
screen -S Hello # 创建一个叫Hello的虚拟终端
# 使用-S创建和直接输入screen创建的虚拟终端,不会检录之前创建的screen(也就是会创建同名的screen)
screen -R Hello
# 使用-R创建,如果之前有创建唯一一个同名的screen,则直接进入之前创建的screen
screen -r [pid/name] # 回到主终端
exit # 退出终端
screen -R [pid/Name] -X quit
# 按Ctrl+a,再按d,即可保持这个screen到后台并回到主终端
运行Llama.cpp
用Llama.cpp
程序部署大模型,首先先安装Llama.cpp,可以下载已经装在好的程序Download the prebuilt binaries,也可以下载源码自己编译,这里采用第二种方案,编译运行方案如下:
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
# 编译CPU版本
# cmake -B build
# cmake --build build --config Release -j 8
# 编译GPU版本,编译英伟达GPU版本需要先装好驱动和CUDA
cmake -B build -DGGML_CUDA=ON -DGGML_CUDA_ENABLE_UNIFIED_MEMORY=1
cmake --build build --config Release -j 8
# 编译完成后,可执行文件和库文件被存放在build/bin目录下
进入编译好的llama.cpp/build/bin
文件下,用screen
命令打开并运行llama服务器,之后就可以在http://127.0.0.1:10000
上访问模型并进行对话
(llm) llm@test-NF5468-A7-A0-R0-00:~/llama.cpp/build/bin$ pwd
/home/llm/llama.cpp/build/bin
(llm) llm@test-NF5468-A7-A0-R0-00:~/llama.cpp/build/bin$ screen -R llama-server
[screen is terminating]
./llama-server \
--model /home/llm/LLM-Model/QwQ-32B-GGUF/fp16/qwq-32b-fp16-00001-of-00017.gguf \
--port 12631 \
--ctx-size 0 \
--n-gpu-layers 999 \
--parallel 10
Llama参数详解
这是Llama-server命令的详细文档:(Llama-server文档)[https://github.com/ggml-org/llama.cpp/blob/master/examples/server/README.md]
主要的参数有以下几个:
- -c, --ctx-size N: 提示上下文的大小(默认值:4096,0 = 从模型加载)
- -np, --parallel N: 并发数(默认值: 1)
- -m, --model FNAME: 模型路径
- –host HOST: 要侦听的 IP 地址(默认值:127.0.0.1)
- –port PORT: 要侦听的端口(默认值:8080)(
- –no-webui: 禁用Web UI (默认: enabled)
- -ngl, --gpu-layers, --n-gpu-layers N: 要加载到GPU内存中的层数