[ Content contribution] 在 RX580 4g 显卡上跑llama.cpp 模型 初级体验
Tofloor
poster avatar
酷谷的谷子
deepin
11 hours ago
Author

在 RX580 4g 显卡上跑llama.cpp 模型 初级体验,显卡太老了,是基于开源驱动+vulkan

方案是宿主机 我安装的是linux mint mate 21.3 相当于乌帮图22.04 +docker 容器乌帮图24.04 应为24.04好编译

我在宿主机安装的依赖 这个我忘记了。简单一点 假设宿主机是24.04 容器都一样。

模型选择2b的,只有2b的能速度最快 千问3.5 2b gguf 在这里下载模型https://modelscope.cn

先要下载 node js 24 lts 设置环境变量

/etc/profile
# Node.js 环境变量
export NODE_HOME=/home/node-v24.16.0-linux-x64
export PATH=$NODE_HOME/bin:$PATH
source /etc/profile
# 验证安装
node --version
npm --version
apt update && apt install -y glslang-tools
# 基础编译工具
apt update && apt install -y build-essential cmake git pkg-config ninja-build
# Vulkan 核心(RX580 + mesa 开源驱动必需)
apt install -y libvulkan-dev vulkan-tools mesa-vulkan-drivers glslang-tools spirv-headers libspirv-cross-c-shared-dev
# 识图/图片解码(mmproj、jpg/png 解码)
apt install -y libpng-dev libjpeg-turbo8-dev libwebp-dev
# 运行时也需要的基础库
apt install -y libcurl4 libgomp1 libdrm-dev libgbm-dev
apt update && apt install -y libvulkan-dev vulkan-tools mesa-vulkan-drivers glslang-tools \
spirv-tools spirv-headers libspirv-cross-c-shared-dev
apt-get update && apt-get install -y --no-install-recommends ca-certificates git cmake \
build-essential libvulkan-dev glslc vulkan-validationlayers
rm -rf /var/lib/apt/lists/* 

创建容器 更具你自己手法来就可以 关键参数 --device=/dev/dri --device=/dev/kfd

#!/bin/bash
CONTAINER_NAME="OpenWebUI"
#MyRAM='--memory=4096m --memory-swap 5g'
REPOSITORY_TAG_NAME='llama-amd-vulkan:24.04'
#--network host 表示使用主机网络你可以认为是开启全部端口
MY_ROOT="--privileged=true"
#指定一个普通用户启动容器
MY_USER="--user 1000"
MY_DUANKOU="--network host"
#开两个端口吧给宝塔留一个 ,一个给模型留一个,ssh也留一个吧
PORT_A="-p 31191:31191 -p 31192:8080 -p 31193:31193"
#映射的文件目录,我这个已经有一个与编译的初级容器
VOLUME_A="-v /home/i8520/.RUST-OPENCLAW:/home/i8520/RUST-OPENCLAW"
CMD_INI='/sbin/init'
docker run  -d --name ${CONTAINER_NAME} ${MY_ROOT} \
--device=/dev/dri --device=/dev/kfd \
${PORT_A} ${VOLUME_A}  ${REPOSITORY_TAG_NAME} ${CMD_INI}
sleep 1

exit 0

进入容器

#!/bin/bash
#容器的名字
MHZX_NAME='MYllamaCpp'
#检查启动的容器中是否包行MHZX12-SR
MHZX_PS_NAME=`docker ps --filter "name=/${MHZX_NAME}$" --format "{{.Names}}"`
#判断${MHZX_NAME}是否等于${MHZX_PS_NAME},如果不相等说明容器MHZX12-SR没有启动
if [[ ! X${MHZX_NAME} = X${MHZX_PS_NAME} ]];then
  #启动容器
  docker start ${MHZX_NAME}
  sleep 2
  #进入容器
  docker exec -it ${MHZX_NAME} /bin/bash
else
  #进入容器
  docker exec -it ${MHZX_NAME} /bin/bash
fi
exit 0

编译源码

 二、编译命令(Vulkan + 识图 + server)
进入 llama.cpp 源码目录后:
cd /home/llama.cpp
mkdir build && cd build
cmake .. -DGGML_VULKAN=ON -DGGML_CLIP=ON -DGGML_MTMD=ON -DLLAMA_BUILD_SERVER=ON -DGGML_CUDA=OFF \
-DGGML_HIP=OFF -DCMAKE_BUILD_TYPE=Releas
make -j$(nproc)

这个ui编译
cd /home/llama.cpp/tools/ui
npm install
有一个警告,这个不管 千万不要去更新!!!
npm run build

启动代码

#!/bin/bash
# ============================================
# Qwen3.5-2B llama.cpp 启动脚本
# ============================================
MODEL_DIR="/home/i8520/RUST-OPENCLAW"
MODEL_FILE="Qwen3.5-2B-UD-Q4_K_XL.gguf"
MMPROJ_FILE="mmproj-F16.gguf"
LLAMA_DIR="/home/llama.cpp/build/bin"
UI_DIR="/home/llama.cpp/tools/ui/dist"
LOG_FILE="/tmp/llama-server.log"
PID_FILE="/tmp/llama-server.pid"

#预处理  
pkill -f llama-server
echo "正在结束历史进程 llama-server"
sleep 10
rm -rf $LOG_FILE $PID_FILE
sleep 3


PORT=31189     #遮盖是 web ui聊天网页端口,可以改
HOST=0.0.0.0  #表示监控所有ip地址
NGL=35      #这个一般2b模型就是有35层的样子
THREADS=6     #使用6个核心cpu
BATCH=512
CTX=60000   #遮个是最大上下文,
TEMP=0.7      #这个好像相似度,和问答有关,这个越大上下文关联度也会越好

if [ -f "$PID_FILE" ]; then
    OLD_PID=$(cat "$PID_FILE")
    if kill -0 "$OLD_PID" 2>/dev/null; then
        echo "[已运行] llama-server PID: $OLD_PID"
        exit 0
    fi
fi

echo "[启动] 模型: $MODEL_FILE"
echo "[启动] 端口: $PORT | 线程: $THREADS | 上下文: $CTX"

cd "$LLAMA_DIR"
#   --spec-type draft-mtp \ 遇判脱坑   需要模型支持
#   --spec-draft-n-max 3 \ 遇判2个脱坑
#    --mmproj "$MODEL_DIR/$MMPROJ_FILE" \ 相当于图片解解释器,开启可以有试图功能
nohup ./llama-server \
    -m "$MODEL_DIR/$MODEL_FILE" \
    --spec-type draft-mtp \
    --spec-draft-n-max 2 \
    --mmproj "$MODEL_DIR/$MMPROJ_FILE" \
    -ngl $NGL \
    -c $CTX \
    -t $THREADS \
    -b $BATCH \
    -ctk q8_0 -ctv q8_0 \
    --temp $TEMP \
    --reasoning off \
    --port $PORT \
    --host $HOST \
    --ui \
    --path "$UI_DIR" \
    --alias "qwen2.5-coder-3b" \
    -a vulkan \
    > "$LOG_FILE" 2>&1 &

echo $! > "$PID_FILE"

sleep 3

if kill -0 "$(cat $PID_FILE)" 2>/dev/null; then
    echo "[成功] 服务已启动,PID: $(cat $PID_FILE)"
    echo "[访问] Web: http://$(hostname -I | awk '{print $1}'):$PORT"
    echo "[访问] API: http://$(hostname -I | awk '{print $1}'):$PORT/v1"
    echo "[日志] tail -f $LOG_FILE"
else
    echo "[失败] 启动异常:"
    tail -20 "$LOG_FILE"
    exit 1
fi

Reply Favorite View the author
All Replies
avatar
流星追月
deepin
9 hours ago
#1

其实,RX580显卡的速度已经很快了,慢的不是GPU速度,是显存拖了后退,你试试HBM4高带宽显存,性能直接拉满。

个人用户是玩不起大模型的,特别是玩千亿级大模型的个人电脑,电费和token费就已经吃不消了,要去吃土了,强如脸谱公司最近都发声明退出token烧钱游戏。

Reply View the author
avatar
lon
deepin
7 hours ago
#2

好多年不用 mint 了,启动个2B这么费事吗,还不如deepin上来的方便

Reply View the author
avatar
酷谷的谷子
deepin
7 hours ago
#3
流星追月

其实,RX580显卡的速度已经很快了,慢的不是GPU速度,是显存拖了后退,你试试HBM4高带宽显存,性能直接拉满。

个人用户是玩不起大模型的,特别是玩千亿级大模型的个人电脑,电费和token费就已经吃不消了,要去吃土了,强如脸谱公司最近都发声明退出token烧钱游戏。

只是体验一下,只要不接入智能体。可以离线使用,其他也没什么优势。2b量化能做的事情也很有局限

Reply View the author
avatar
酷谷的谷子
deepin
7 hours ago
#4
lon

好多年不用 mint 了,启动个2B这么费事吗,还不如deepin上来的方便

这个只是一个体验方式,会给喜欢倒腾的人一点思路。

Reply View the author