R9700 很香。
-
@Bunsei 等崩盘再填一张
@lesslin-xiu 很難,一個半月前台幣50280,昨天在論壇看到二手新品台幣59000
-
-
-
Windows 下掉驱动丢卡,先按这几条排,和显存/模型没关系:
1)装完驱动立刻关掉 Windows 自动更新驱动。自识别驱动能用是因为它回退到了基础显示驱动,稳但慢、且不支持 ROCm/Vulkan 加速——不是解决方案。用 DDU 干净卸载后装 AMD Software 最新 WHQL,再用组策略/注册表禁止系统自动替换。
2)拉长 TDR 超时。长时间推理最容易触发 TDR 判定「GPU 无响应」然后重置掉卡。注册表 HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers 新建 DWORD:TdrDelay=10、TdrDdiDelay=20,重启。这一条能治好很多「跑一会儿就掉卡」。
3)BIOS 里把显卡槽锁 Gen4(别用 Auto),关 PCIe ASPM / 节能,确认 Above 4G Decoding + ReBAR 正常。
4)供电按瞬态查。R9700 是 300W 级,单卡也别用一分二线;尖峰触发 OCP 也会表现为掉卡。
5)想限功率:AMD Software 的「性能 → 调整」里拉低功率上限(R9700 这代工作站卡有些版本锁了该选项,换成 PRO 版驱动试试;Linux 侧用 amd-smi --power-cap)。限功率同时也降温和尖峰。
6)跑 llama.cpp 优先用 ROCm/HIP 构建而不是 Vulkan;Vulkan 掉卡多半还是驱动层。
Q5 27B 单卡 30–45 t/s 是正常水平。先做 1+2,成本最低、命中率最高。
-
基础环境:
cpu : Intel(R) Core(TM) Ultra 7 265K (3.90 GHz)
内存:DDR5 32G
gpu: amd R9700
os : Windows 11 专业版 25H2
启动脚本如下,高手给指导下:
echo off
chcp 936 >nul 2>&1
setlocal EnableExtensions EnableDelayedExpansion
title Qwen3.8-27B 本地服务 (llama.cpp Vulkan / 只用 R9700)REM ==========================================================================
REM Qwen3.8-27B 本地部署一键启动
REM 显卡: 只使用 AMD Radeon AI PRO R9700(Intel 集显会被彻底排除)
REM 启动失败会自动降档重试;显卡真掉线时立刻停下并告诉你怎么修
REM ==========================================================================REM ------------------------- 可调参数 -------------------------
set "LLAMA=D:\xiuzy\llama.cpp\llama.cpp"
set "MODEL=D:\xiuzy\llama.cpp\model\Qwen3.8-27B-UD-Q5_K_M.gguf"
set "MMPROJ=D:\xiuzy\llama.cpp\model\mmproj-F16.gguf"
set "LOGDIR=D:\xiuzy\llama.cpp\logs"
REM 日志目录必须用英文路径! llama.cpp 打不开中文路径的日志文件(已实测)
set "HOST=127.0.0.1"
set "PORT=8080"
set "ALIAS=qwen3.8-27b@q5_k_m"set "MODE=full"
REM safe = 稳妥档: 24 层上显卡, 32K 上下文(推荐先用这个)
REM 实测这台机器的 R9700 目前一装满 66 层就掉线(DeviceLost + 驱动停用),
REM 全量档每次都要重启电脑才能恢复,所以默认不给全量
REM full = 全量档: 66 层全上显卡, 64K 上下文
REM 只有换过驱动/修好显卡之后再试;掉线了就用 修复显卡.bat + 重启set "CTX=130172"
REM 上下文。q8_0 的 KV 约 32KB/token: 32K≈1GB 64K≈2GB 128K≈4GB
set "NGL=24"
REM 上显卡的层数。降档重试时会自动再往下调
set "KVQ=q8_0"
set "KVQ_1=q4_0"
set "THREADS=20"
set "PARALLEL=1"
set "REASONING=on"
REM on / off / auto。off 出字快很多
set "MTP=on"
REM MTP 投机解码,实测接受率 80%%,生成速度约 +67%%
set "SPEC_NMAX=2"
set "SPEC_PMIN=0.75"
set "RETRY=1"
REM 1 = 启动失败自动降档重试
set "MAXALLOC="
REM 显存单块分配上限(字节)。显卡如果对大块显存分配有病态行为,试填 1073741824
REM 留空 = 不限制。要试就填: set "MAXALLOC=1073741824"
set "STABLE=0"
REM 1 = 额外打开 GGML_VK_DISABLE_ASYNC 和 GGML_VK_MAX_NODES_PER_SUBMIT
set "EXTRA= --cache-ram 0 --defrag-thold 0.2 --temp 0.08 --top-p 0.90 --min_p 0.05 "
REM ------------------------------------------------------------if "%MODE%"=="full" (
set "CTX=130172"
set "NGL=-1"
)
set "LOG=%LOGDIR%\llama-server.log"
if not exist "%LOGDIR%" mkdir "%LOGDIR%" >nul 2>&1
if not exist "%LLAMA%\llama-server.exe" goto noinstall
if not exist "%MODEL%" goto nomodelecho ============================================================
echo Qwen3.8-27B-UD-Q5_K_M Local Service
echo llama.cpp Vulkan b10924 / Only Use: AMD R9700
echo Mode: %MODE%
echo ============================================================
echo.REM ---------- 1/4 文件 ----------
for %%F in ("%MODEL%") do echo [1/4] MODE: %%~nxF ^(%%~zF Byte^)
set "MMARG="
if exist "%MMPROJ%" (
for %%F in ("%MMPROJ%") do echo 视觉投影: %%~nxF ^(%%~zF Byte^)
set MMARG=--mmproj "%MMPROJ%"
) else (
echo 视觉投影: 未找到,纯文本模式
)
echo.REM ---------- 2/4 只保留 R9700 ----------
echo [2/4] 枚举 Vulkan 设备 ...
"%LLAMA%\llama-cli.exe" --list-devices > "%TEMP%\llama_devices.txt" 2>&1
type "%TEMP%\llama_devices.txt"
set "RDV="
set "DEV="
set "GGML_VK_VISIBLE_DEVICES="
for /f "tokens=1 delims=: " %%D in ('findstr /C:"Radeon" "%TEMP%\llama_devices.txt"') do set "RDV=%%D"
if not defined RDV goto nogpu
set "GGML_VK_VISIBLE_DEVICES=!RDV:Vulkan=!"
echo.
echo 找到 R9700,已设置 GGML_VK_VISIBLE_DEVICES=!RDV:Vulkan=!(集显彻底排除)
echo 过滤后重新枚举:
"%LLAMA%\llama-cli.exe" --list-devices > "%TEMP%\llama_devices.txt" 2>&1
type "%TEMP%\llama_devices.txt"
for /f "tokens=1 delims=: " %%D in ('findstr /C:"Radeon" "%TEMP%\llama_devices.txt"') do set "DEV=%%D"
if not defined DEV goto nogpu
echo =^> 只使用: !DEV! ^(AMD Radeon AI PRO R9700^)
echo.REM ---------- 3/4 端口 ----------
netstat -ano | findstr /R /C:"LISTENING" | findstr /C:":%PORT% " >nul
if not errorlevel 1 goto portbusy
echo [3/4] 端口 %PORT% 空闲
echo.REM ---------- 4/4 启动 ----------
set "ATTEMPT=1"
:attempt
if "%MODE%"=="full" (
if "%ATTEMPT%"=="1" set "CTX=130172"
if "%ATTEMPT%"=="1" set "NGL=-1"
if "%ATTEMPT%"=="2" set "CTX=32768"
if "%ATTEMPT%"=="2" set "NGL=40"
if "%ATTEMPT%"=="3" set "CTX=16384"
if "%ATTEMPT%"=="3" set "NGL=24"
) else (
if "%ATTEMPT%"=="1" set "CTX=32768"
if "%ATTEMPT%"=="1" set "NGL=24"
if "%ATTEMPT%"=="2" set "CTX=16384"
if "%ATTEMPT%"=="2" set "NGL=16"
if "%ATTEMPT%"=="3" set "CTX=8192"
if "%ATTEMPT%"=="3" set "NGL=8"
)if defined MAXALLOC set "GGML_VK_FORCE_MAX_ALLOCATION_SIZE=%MAXALLOC%"
if "%STABLE%"=="1" set "GGML_VK_DISABLE_ASYNC=1"
if "%STABLE%"=="1" set "GGML_VK_MAX_NODES_PER_SUBMIT=1"set "SPECARG="
if /i "%MTP%"=="on" set SPECARG=--spec-type draft-mtp --spec-draft-device !DEV! --spec-draft-ngl !NGL! --spec-draft-n-max %SPEC_NMAX% --spec-draft-n-min 0 --spec-draft-p-min %SPEC_PMIN%echo [4/4] 第 %ATTEMPT% 档启动: 层数 %NGL% / 上下文 %CTX% / KV %KVQ%
echo ------------------------------------------------------------
echo 接口地址 : http://%HOST%:%PORT%/v1 模型名: %ALIAS%
echo 停止服务 : 在【本窗口】按 Ctrl+C,等它自己退出
echo 【警告】不要用任务管理器或 Stop-Process 强杀 llama 进程
echo 这张 RDNA4 卡被强杀会挂死,只能重启恢复(已实测复现)
echo ------------------------------------------------------------
echo."%LLAMA%\llama-server.exe" -m "%MODEL%" %MMARG% -dev !DEV! -ngl %NGL% -fa on ^
-c %CTX% -ctk %KVQ% -ctv %KVQ% -t %THREADS% -b 2048 -ub 512 -np %PARALLEL% ^
--host %HOST% --port %PORT% --alias "%ALIAS%" --jinja --metrics ^
-rea %REASONING% --no-reasoning-preserve %SPECARG% %EXTRA% ^
--log-file "%LOG%"set "RC=%errorlevel%"
echo.
echo 服务已退出,退出码 %RC%(0 = 按 Ctrl+C 正常停止)
if "%RETRY%"=="0" goto normalexit
if not "%RC%"=="0" goto failed
findstr /C:"DeviceLost" /C:"failed to create context" /C:"failed to allocate" "%LOG%" >nul 2>&1
if not errorlevel 1 goto failed
goto normalexit:failed
echo 启动失败:日志里出现 DeviceLost 或建上下文/显存分配失败。
"%LLAMA%\llama-cli.exe" --list-devices > "%TEMP%\llama_devices.txt" 2>&1
findstr /C:"Radeon" "%TEMP%\llama_devices.txt" >nul 2>&1
if errorlevel 1 goto gpudied
if %ATTEMPT% GEQ 3 goto allfailed
set /a ATTEMPT+=1
echo 显卡还在,5 秒后自动降档重试(第 %ATTEMPT% 档)...
%SystemRoot%\System32\timeout.exe /t 5 /nobreak >nul
goto attempt:normalexit
echo 日志: %LOG%
echo 想再启动,直接重新双击本脚本即可。
pause
exit /b 0:gpudied
echo ============================================================
echo 显卡已经从系统里掉了(设备列表里没有 Radeon 了)
echo 这是这张 R9700 目前最典型的问题: 一加载大模型就 DeviceLost,
echo 然后驱动被系统停用(设备管理器代码 22 或 31),只能重启恢复。
echo.
echo 现在请:
echo 1) 运行 修复显卡.bat 试修复;修不好就重启电脑
echo 2) 重启后先跑 体检.bat 确认设备 OK
echo 3) 再跑本脚本。如果还掉线,把 MODE 保持 safe 或者减小 NGL
echo 4) 反复掉线属于驱动/硬件问题:
echo - 用 DDU 或 AMD 官方"出厂重置"重装显卡驱动
echo - 报修证据: C:\ProgramData\Microsoft\Windows\WER\ReportQueue
echo 里的 Kernel_141_* 目录 + WATCHDOG-*.dmp
echo ============================================================
echo 日志: %LOG%
pause
exit /b 2:allfailed
echo ============================================================
echo 三档都失败了
echo 1) 重启电脑后再试
echo 2) 把 MODE 改成 safe、NGL 再调小(例如 8)
echo 3) 试试把 MAXALLOC 设成 1073741824
echo 4) 或者把 STABLE 改成 1
echo 5) 显卡反复掉线 = 驱动/硬件问题,见上面报修路径
echo ============================================================
echo 日志: %LOG%
pause
exit /b 3:nogpu
echo.
echo [错误] 没有检测到 AMD Radeon 显卡(列表里可能只剩 Intel 集显)
echo 原因通常是驱动崩溃后显卡被系统停用(设备管理器代码 22 或 31)
echo 处理: 先运行 修复显卡.bat,修不好就重启电脑
echo 救急: 用 纯CPU兜底.bat,生成约 2 token/s
pause
exit /b 1:portbusy
echo [错误] 端口 %PORT% 已被占用(可能是上次的服务没关)
echo 关掉旧窗口,或把本脚本里的 PORT 改成 8081
pause
exit /b 1:noinstall
echo [错误] 找不到 %LLAMA%\llama-server.exe
echo llama.cpp 没装好。把安装包解压到 %LLAMA%
pause
exit /b 1:nomodel
echo [错误] 找不到模型文件 %MODEL%
pause
exit /b 1 -



