Radeon 680M 核显本地运行大语言模型.
简介
本文介绍(经过多次踩坑摸索出来的)在 Windows 系统、AMD Radeon 680M 核显上运行 llama.cpp 的方法。
Radeon 680M 是 AMD Ryzen 6000 系列移动处理中的中高端型号(7、9)搭载的核显:
- Ryzen 7 6800U: 2200 MHz
- Ryzen 7 6800H: 2200 MHz
- Ryzen 7 6800HS: 2200 MHz
- Ryzen 9 6900HX: 2400 MHz
- Ryzen 9 6980HX: 2400 MHz
- Ryzen 7 PRO 6850U: 2200 MHz
- Ryzen 7 PRO 6850H: 2200 MHz
- Ryzen 7 PRO 6850HS: 2200 MHz
参数详见:https://www.techpowerup.com/gpu-specs/radeon-680m.c3871
此核显的理论性能略强于 GTX 1050 Ti,然而因为是核显,受到内存频率的影响,性能可能有较大的波动。
Radeon 680M (gfx1035) 不在 AMD ROCm 的官方支持列表里面,因此无法开箱即用地使用 ROCm。而在 Windows 上使用 ROCm 更加复杂。经过摸索,需要自行编译 llama.cpp 并使用针对 gfx1035 编译好的 ROCm 库文件方可正常运行。
我的环境:
- CPU: Ryzen 7 6800HS
- 核显: Radeon 680M
- 内存: 16 GB DDR5 6400MHz 内存,但是延迟很高
- 系统: Windows 11 24H2
我的设备没有独显。
太长不看版
- 如果你的目标模型比较小(7B 或更小),使用预编译好的 Vulkan 后端 llama.cpp 即可。对于小模型 Vulkan 后端的性能与 ROCm 后端不相上下甚至更好。
- 如果你的目标模型超过 7B,那么用 Radeon 680M 推理,很可能无法获得一个能够正常使用的速度。此时你应该考虑使用更好的显卡。
如果你真的愿意用 ROCm:
- 安装 HIP SDK,见后文。只安装运行时库即可。推荐安装 HIP SDK 自带的显卡驱动。安装后将 SDK 的
bin
文件夹添加到Path
环境变量。 - 下载我编译好的 gfx1035 的 llama.cpp 并解压到任意位置。
https://eslzzyl.lanzouv.com/iviBH2na0zcd 提取码:8y0t - 到 https://github.com/likelovewant/ROCmLibs-for-gfx1103-AMD780M-APU/releases 下载适配 gfx1035 的运行时库并根据此仓库的 README 替换已经安装的 HIP SDK 运行时库。
- 正常使用 llama.cpp。通过
-ngl
来把模型的层装载到显存。
环境准备
安装 MSVC 和 Windows SDK
使用 Visual Studio Installer 安装 MSVC 编译器和 Windows SDK。我们在后面不会用到 MSVC 编译器,但这个组件附带的一些库文件是必须的。
详细安装方法可以参考 https://www.cnblogs.com/eslzzyl/p/18544679
安装 HIP SDK
根据 AMD 官网:HIP SDK 是一个将 ROCm 的一部分功能带到 Windows 上的 SDK。我们需要安装此 SDK 来编译 llama.cpp 并提供运行必须的库文件。
到 https://www.amd.com/en/developer/resources/rocm-hub/hip-sdk.html 处下载 HIP SDK 的安装程序。我们可以选择最新的 6.2.4 版本下载。
下载后运行安装程序。必须安装的组件是:
- HIP SDK 核心
- HIP 库(包括运行时和开发文件)
- HIP 运行时编译器(包括运行时和开发文件)
此外,建议安装此安装程序附带的显卡驱动,在安装类型中选择“Driver Only”即可。
不建议更改默认的安装位置,因为后面我们会多次引用此位置,反复修改路径十分不便。
安装完毕后,将 SDK 的 bin
文件夹添加到 Path
环境变量。如果没有改过默认的安装路径,那么就是把 C:\Program Files\AMD\ROCm\6.2\bin
添加到 Path
环境变量。
替换适配 gfx1035 的 ROCm 运行库
到此处下载 https://github.com/likelovewant/ROCmLibs-for-gfx1103-AMD780M-APU
根据 Release 中的说明,应该是下载 https://github.com/likelovewant/ROCmLibs-for-gfx1103-AMD780M-APU/releases/download/v0.6.2.4/rocm.gfx1034-gfx1035-gfx1036.for.hip.sdk.6.2.4.7z 注意下载的 ROCm 版本需要和前面安装的版本匹配。我们的 HIP SDK 是 6.2.4 版本,所以我们也下载 6.2.4 版本的运行库。
下载后解压这个压缩文件(这个玩意压缩率出奇的高,11.5MB 解压出来有 600+ MB),里面有一个 rocblas.dll
文件和一个 library
文件夹。
- 用解压出来的
rocblas.dll
替换掉C:\Program Files\AMD\ROCm\6.2\bin
中的同名文件。 - 用解压出来的
library
文件夹替换掉C:\Program Files\AMD\ROCm\6.2\bin\rocblas
文件夹中的同名文件夹。
安装其他编译工具
Ninja 和 CMake
可以参考 https://www.cnblogs.com/eslzzyl/p/18544679 中的说明进行安装。这两个工具都可以通过 winget
工具进行安装。
Perl
建议安装 Strawberry Perl: https://strawberryperl.com/
可以直接下载 Portable 压缩包,解压后将其中的 perl\bin
添加到 Path
环境变量。
Strawberry Perl 会自带一个 mingw,其中有 gcc 编译器,我们不需要使用,无需添加到 Path
。
编译 llama.cpp
克隆 llama.cpp 的 Git 仓库:
git clone https://github.com/ggerganov/llama.cpp.git
打开一个新的 PowerShell 窗口,切换到 llama.cpp
文件夹。然后执行以下命令来生成构建脚本:
cmake -S . -B build -G Ninja -DAMDGPU_TARGETS=gfx1035 -DGGML_HIP=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="C:\Program Files\AMD\ROCm\6.2\bin\clang.exe" -DCMAKE_CXX_COMPILER="C:\Program Files\AMD\ROCm\6.2\bin\clang++.exe" -DCMAKE_PREFIX_PATH="C:\Program Files\AMD\ROCm\6.2"
解释:
-DAMDGPU_TARGETS=gfx1035
是必须的。这样编译出来的llama.cpp
程序会在执行时查找 gfx1035 对应的库文件,而前面我们执行的替换操作正好提供了这些库文件。-DGGML_HIP=ON
告诉 CMake 生成使用 ROCm 的llama.cpp
程序。-DCMAKE_BUILD_TYPE=Release
是必须的,如果使用Debug
配置,那么性能将会差得不可接受。DCMAKE_C_COMPILER="C:\Program Files\AMD\ROCm\6.2\bin\clang.exe"
告诉 CMake 要使用的 C 编译器的位置。此处我们使用由 HIP SDK 提供的 clang 编译器。不要使用其他编译器,例如 gcc 或 MSVC,因为它们不能正确处理与 HIP SDK 相关的源代码。-DCMAKE_CXX_COMPILER
同理,对应 C++ 编译器。-DCMAKE_PREFIX_PATH="C:\Program Files\AMD\ROCm\6.2"
将 HIP SDK 的位置加入了CMAKE_PREFIX_PATH
,这样 CMake 就可以找到 HIP SDK 了。
如果一切正常,CMake
会在 llama.cpp\build
文件夹中生成构建脚本。之后如果遇到任何编译问题,都需要删除 build
文件夹,然后重新执行脚本生成的步骤。
随后使用
cmake --build build
来启动编译。有一些警告是正常的。编译完毕后,在 build\bin
文件夹中可以找到所有的 llama.cpp
程序和需要的库。
测试
可以通过 llama-server.exe
来运行模型进行测试。此处我们选取最近在 Hugging Face 比较火的 SmallThinker-3B-Preview 模型来测试。此模型具备一定的推理能力。我跑的是 abliterated 版本的 Q6_K GGUF 量化模型:此处
执行命令:
.\llama-server.exe -m D:\path\to\SmallThinker-3B-Preview-abliterated-Q6_K.gguf -ngl 100 -c 8192
-ngl 100
表示将 100 层装载到显存。此模型没有 100 层,也就是说将所有层都装入显存。这个参数是必须的,否则就是用 CPU 推理了。
如果一切正常,将可以看到程序开头的输出:
ggml_cuda_init: GGML_CUDA_FORCE_MMQ: no ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no ggml_cuda_init: found 1 ROCm devices: Device 0: AMD Radeon(TM) Graphics, gfx1035 (0x1035), VMM: no, Wave Size: 32 build: 4672 (bdcf8b6a) with for x86_64-pc-windows-msvc system info: n_threads = 8, n_threads_batch = 8, total_threads = 16 system_info: n_threads = 8 (n_threads_batch = 8) / 16 | ROCm : NO_VMM = 1 | PEER_MAX_BATCH_SIZE = 128 | CPU : SSE3 = 1 | SSSE3 = 1 | AVX = 1 | AVX2 = 1 | F16C = 1 | FMA = 1 | LLAMAFILE = 1 | AARCH64_REPACK = 1 |
以及输出:
main: server is listening on http://127.0.0.1:8080 - starting the main loop
llama-server
在加载模型之后会自动进行一次推理,从而确保模型正常工作。如果你能够看到监听的地址信息,就代表自动推理通过了,那么多半不会有其他问题,可以正常使用。
最近版本的 llama-server
自带了一个简单的对话网页,直接打开监听的地址就可以看到了。还是很方便的。
我们来问几个问题。
你是谁?
9.8 和 9.11 哪个大?
鲁迅为什么要打周树人?
单词“DeepSeek”中有几个“e”?
截图太长了,直接放文本了。
单击展开
让我来数一数“DeepSeek”这个单词中有多少个“e”。首先,我需要把单词写下来,确保每个字母都看清楚了。 所以,单词是“DeepSeek”。 现在,我来逐个字母地检查,看哪些字母是“e”。 第一个字母是D,不是e。 第二个字母是E,这是一个e。 第三个字母是E,又是e。 第四个字母是P,不是e。 第五个字母是S,不是e。 第六个字母是K,不是e。 第七个字母是E,又是e。 第八个字母是E,又是e。 第九个字母是E,又是e。 第十个字母是E,又是e。 第十一个字母是E,又是e。 等等,好像所有e都在这里了。 让我数一数: 第一个E,第二个E,第三个E,第四个E,第五个E,第六个E,第七个E,第八个E,第九个E,第十个E,第 eleven个E。 好像有11个e。 等一下,让我确认一下。 单词是“DeepSeek”,共有11个字母。 D-E-P-S-E-K-E。 所以,E出现了6次。 等待一下,我可能数错了。 让我再数一遍。 D E P S E K E E E E。 嗯,看起来有6个E。 但是,我之前以为有11个E,但实际上只有6个。 也许我记错了。 让我再仔细数一次。 D E P S E K E E E E。 第一个人格词形“DeepSeek”中,字母顺序是D-E-P-S-E-K-E-E-E。 所以,E出现的次数是4次。 等一下,我可能还是记错了。 让我仔细检查。 D E P S E K E E E。 D,E,P,S,E,K,E,E,E。 所以,E出现了4次。 第一个E在第二个位置,然后第三个,第四个,第五个。 等待一下,也许我需要更仔细地数。 D-E-P-S-E-K-E-E-E。 所以,E在位置2,3,4,5,6,7。 等一下,位置2是E,位置3是E,位置4是E,位置5是E,位置6是K,位置7是E,位置8是E,位置9是E,位置10是E,位置11是E。 所以,E出现了5次。 但是,我之前数了4次,可能记错了。 让我再确认一下。 位置1:D 位置2:E 位置3:E 位置4:P 位置5:S 位置6:E 位置7:K 位置8:E 位置9:E 位置10:E 位置11:E 所以,E在位置2,3,5,6,7,9,10,11。 等一下,位置5是S,不是E。 所以,只有位置2,3,6,7,9,10,11有E。 也就是位置2,3,6,7,9,10,11。 总共7个E。 等一下,我可能还是记错了。 让我再数一次。 位置1:D 位置2:E 位置3:E 位置4:P 位置5:S 位置6:E 位置7:K 位置8:E 位置9:E 位置10:E 位置11:E 所以,E在位置2,3,6,7,9,10,11。 总共7个E。 但是,我之前数了6个,现在又数了7个。 这可能是因为我之前漏掉了某个E。 让我再仔细检查一次。 D E P S E K E E E E。 所以,E在位置2,3,6,7,9,10,11。 总共7个。 或者,也许单词是“DeepSeek”,但根据标准的拼写,是D-E-P-S-E-K-E。 所以,E在位置2,3,5,6,7。 等待一下,位置5是S,不是E。 所以,只有位置2,3,6,7有E。 所以,只有4个E。 等一下,我可能还是记错了。 让我再检查一下。 单词是“DeepSeek”。 D E P S E K E。 所以,E在位置2,3,6,7。 所以,共4个E。 或者,也许单词是“Deep Seek”,单词之间有空格。 但是,根据题意,是单词“DeepSeek”,所以没有空格。 所以,应该是连续的字母。 所以,字母顺序是D E P S E K E。 所以,E在位置2,3,6,7。 所以,共4个E。 我可能之前记错了。 所以,答案是4个E。 Final Answer 4
日译中
将以下内容翻译为中文:
現在、東京は日本における政治・経済・文化の中心である。
政治面では、日本国政府が本拠地とする。立法府である国会議事堂、司法府の頂点である最高裁判所、行政府の長である内閣総理大臣の官邸、大臣や官僚が仕事をする中央省庁(霞が関)などは、いずれも東京の中心部である東京23区にある(ただし文部科学省の外局の文化庁のみ、2023年5月15日に京都府京都市上京区に移転)。
経済面では、日本の株式上場企業の本社のほとんどが東京に集中し、(東京圏では)購買力平価(PPP)を基にしても東京都市圏のGDPは1兆5369億ドル(2014年現在)であり、世界的な経済都市であり、大消費地でもある。 数多くの展示会・見本市が東京23区で開催され、見本市都市として国内で圧倒的に優位に立ち、国際会議の開催件数も国内最多である。
单击展开
我需要将这段日文翻译成中文。让我先仔细阅读一下这段话,理解它的内容。 这段话主要讨论的是东京在日本的政治、经济和文化中的地位。首先提到东京是日本政治、经济和文化的中心。然后在政治方面具体说明了日本政府的各个机构都在东京,比如国会、最高法院、内阁总理大臣官邸以及各个中央省庁都在东京23区。不过,文化庁在2023年5月15日从京都府迁到了京都府京都市上京区。这可能是因为文化庁的职责涉及到文化方面,所以搬迁到京都。 接着,从经济的角度来看,日本大部分的上市公司总部都在东京,东京 metropolitan area的购买力平价(PPP)GDP在2014年是1.5369万亿美元,因此东京是全球著名的经济中心和消费地。此外,东京23区还是举办了许多展览和贸易展览会的中心,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是国内最多的。 现在,我开始翻译这段话。 “现在,东京是日本政治、经济和文化的核心。 在政治方面,日本政府的各个机构都设在东京。国会、最高法院、内阁总理大臣官邸以及各部部长和官员都在东京23区工作(不过,文化庁在2023年5月15日从京都府迁至京都府上京区)。 在经济方面,东京 metropolitan area是日本大部分上市公司总部的所在地,其购买力平价(PPP)GDP在2014年达到了1.5369万亿美元,因此东京是世界著名的经济中心和消费地。许多展览和贸易展览会都在东京23区举行,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是最多的。” 我需要确保翻译准确无误,特别是关于机构位置和经济数据的部分。让我再检查一下原文。 原文中提到,文化庁在2023年5月15日从京都府迁到了京都府京都市上京区。但是,原文里似乎没有明确表示这是一个历史性的搬迁,或者有什么特别的意义。可能是因为文化庁的职责与文化相关,所以搬迁到京都是有原因的。不过,我需要确认一下这一点。 另外,关于经济数据,提到东京 metropolitan area的PPP GDP是1.5369万亿美元,这是一个具体的数字,需要确保单位和表述是准确的。可能需要查找一下这个数据的来源,以确保准确性。 此外,提到东京23区是展览和贸易展览会的中心,以及国际会议举办数量最多的,这些信息也需要核实,确保不出现错误。 总之,我需要一步一步地翻译这段话,确保每个部分都准确地表达出来。 首先,翻译“现在,东京是日本政治、经济和文化的核心。” 这是一句陈述句,直接表达东京在日本的政治、经济和文化中的重要地位。翻译时,我需要保持这个意思不变。 “现在,东京是日本政治、经济和文化的核心。” 这个翻译看起来直接,但需要确认一下“核心”这个词是否能准确表达其重要性。在日本,东京被称为“中枢”或者“中心”,可能“核心”一词在这里已经足够。 接下来是“在政治方面,日本政府的各个机构都设在东京。” 这句也是描述东京的政治地位。需要确保所有提及的机构都正确无误。 “在政治方面,日本政府的各个机构都设在东京。” 可以确认的是,国会、最高法院、内阁总理大臣官邸等都在东京。不过,文化庁搬迁一事需要单独处理,因为这可能是一个值得注意的事实。 然后是“国会、最高法院、内阁総理大臣官邸以及各部部长和官员都在东京23区工作(不过,文化庁在2023年5月15日从京都府迁至京都府上京区)。” 这里需要强调文化庁的搬迁。可能需要将其作为东京政治地位的一个例外或者附加信息。 在经济方面,东京 metropolitan area是日本大部分上市公司总部的所在地,其购买力平价(PPP)GDP在2014年达到了1.5369万亿美元,因此东京是世界著名的经济中心和消费地。 这句翻译相对完整,但需要确保GDP数字的准确性。可能需要查找一下2014年东京 metropolitan area的PPP GDP具体数字,以确保一致性。 此外,提到“东京 metropolitan area的GDP是1.5369万亿美元”,需要确认是否是购买力平价(PPP)GDP,因为有时候GDP是以市场汇率计算的。 再来看展览和贸易展览会的部分,“许多展览和贸易展览会都在东京23区举行,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是最多的。” 这句话是总结东京在展览和会议方面的优势。可能需要强调一下这些展览和会议的数量,以及它们的重要性。 整体来说,翻译需要保持原文的意思,同时确保每个术语都是准确的,特别是关于机构位置和经济数据的部分。 让我开始逐步翻译: “现在,东京是日本政治、经济和文化的核心。” “现在,东京是日本政治、经济和文化的核心。” “在政治方面,日本政府的各个机构都设在东京。” “在政治方面,日本政府的各个机构都设在东京。” “国会、最高法院、内阁総理大臣官邸以及各部部长和官员都在东京23区工作(不过,文化庁在2023年5月15日从京都府迁至京都府上京区)。” “在政治方面,日本政府的各个机构都设在东京。国会、最高法院、内阁総理大臣官邸以及各部部长和官员都在东京23区工作。不过,文化庁在2023年5月15日从京都府迁至京都府上京区。” “在经济方面,东京 metropolitan area是日本大部分上市公司总部的所在地,其购买力平价(PPP)GDP在2014年达到了1.5369万亿美元,因此东京是世界著名的经济中心和消费地。” “在经济方面,东京 metropolitan area是日本大部分上市公司总部的所在地,其购买力平价(PPP)GDP在2014年达到了1.5369万亿美元,因此东京是世界著名的经济中心和消费地。” “许多展览和贸易展览会都在东京23区举行,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是最多的。” “许多展览和贸易展览会都在东京23区举行,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是最多的。” 现在,我需要检查这些翻译是否准确,特别是机构位置和经济数据的部分。 首先,关于文化庁的搬迁,原文中提到“文化庁のみ、2023年5月15日に京都府京都市上京区に移転”。我需要确认一下“文化庁のみ”是否意味着只有文化庁搬迁,还是说所有机构中只有文化庁搬迁。从上下文来看,可能只提到文化庁搬迁,所以翻译时保留这一点。 另外,关于经济数据,提到东京 metropolitan area的PPP GDP是1.5369万亿美元。我需要确认一下这个数字是否准确。可能需要查找一下2014年东京 metropolitan area的PPP GDP具体数字,以确保翻译的准确性。 此外,展览和贸易展览会的部分,提到东京23区是展览和贸易展览会的中心,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是最多的。这个部分需要强调东京的会展业和会议举办方面的优势。 总之,我需要确保翻译不仅准确,而且能够清晰地表达原文的意思。 让我再检查一下机构的位置。原文中提到,国会、最高法院、内阁総理大臣官邸以及各部部长和官员都在东京23区工作,除了文化庁之外。所以,在翻译时,需要保留这一点。 另外,关于经济方面,提到东京 metropolitan area的GDP是1.5369万亿美元,这应该是购买力平价(PPP)GDP。我需要确认一下这个数据的来源和准确性。 如果可能的话,我最好能够查找一下2014年东京 metropolitan area的PPP GDP具体数字,以确保翻译的准确性。 假设我找不到具体的数字,那么我需要接受这个表述,并确保在翻译中保留这一点。 另外,关于展览和贸易展览会的部分,提到东京23区是展览和贸易展览会的中心,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是最多的。这个部分需要强调东京在会展业和会议方面的领先地位。 综上所述,我需要确保翻译时保留所有这些关键信息。 让我尝试再次翻译,这次更加注意细节。 “现在,东京是日本政治、经济和文化的核心。 在政治方面,日本政府的各个机构都设在东京。国会、最高法院、内阁総理大臣官邸以及各部部长和官员都在东京23区工作(不过,文化庁在2023年5月15日从京都府迁至京都府上京区)。 在经济方面,东京 metropolitan area是日本大部分上市公司总部的所在地,其购买力平价(PPP)GDP在2014年达到了1.5369万亿美元,因此东京是世界著名的经济中心和消费地。 此外,东京23区是展览和贸易展览会的中心,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是最多的。” 这样翻译是否准确呢?我需要确认一下。 首先,“现在,东京是日本政治、经济和文化的核心。”——这句直接翻译了原文,表达清楚。 其次,“在政治方面,日本政府的各个机构都设在东京。国会、最高法院、内阁総理大臣官邸以及各部部长和官员都在东京23区工作。不过,文化庁在2023年5月15日从京都府迁至京都府上京区。” 这里稍微做了点修改,将“不过”改为“此外”,以避免重复。同时,保留了文化庁搬迁的信息。 然后,“在经济方面,东京 metropolitan area是日本大部分上市公司总部的所在地,其购买力平价(PPP)GDP在2014年达到了1.5369万亿美元,因此东京是世界著名的经济中心和消费地。” 这句也是直接翻译,确保保留了经济数据。 最后,“此外,东京23区是展览和贸易展览会的中心,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是最多的。” 这句总结了东京在会展业和会议方面的优势。 我觉得这个翻译保留了原文的所有重要信息,并且表达清晰。不过,我还需要检查一下语法和用词是否恰当。 例如,“东京 metropolitan area”是否需要加上“metropolitan”?在中文中,是否需要这样表达? 实际上,在中文中,我们通常说“东京 metropolitan area”,所以这句翻译是正确的。 另外,“购买力平价(PPP)GDP”如何翻译?“购买力平价”是PPP,GDP是GDP,所以这句翻译也是准确的。 再来看展览和贸易展览会的部分,“东京23区是展览和贸易展览会的中心。”这句是否合适?可能需要更具体的表述,比如“东京23区是展览和贸易展览会的举办地。” 不过,原文中已经提到东京23区是展览和贸易展览会的中心,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是最多的。所以,这句翻译已经足够。 总之,我认为这个翻译是准确的。 最终翻译 现在,东京是日本政治、经济和文化的核心。 在政治方面,日本政府的各个机构都设在东京。国会、最高法院、内阁総理大臣官邸以及各部部长和官员都在东京23区工作(不过,文化庁在2023年5月15日从京都府迁至京都府上京区)。 在经济方面,东京 metropolitan area是日本大部分上市公司总部的所在地,其购买力平价(PPP)GDP在2014年达到了1.5369万亿美元,因此东京是世界著名的经济中心和消费地。 此外,东京23区是展览和贸易展览会的中心,国内展览城市中东京是最有优势的,而且国际会议的举办数量也是最多的。
在推理过程中,可以看到任务管理器中核显的“Compute”是有占用的,说明调用了核显进行运算。
Benchmark
下面是使用 llama.cpp 提供的 llama-bench 工具在 AVX-2、Vulkan、ROCm 三种后端以及 0.5B、1.5B、3B、7B 四种模型尺寸下得到的文本生成的性能评测结果。测试的模型都来自 Qwen2.5 家族。结果未必非常准确,因为运行模型时还有其他程序在运行。
由于内存容量有限,我没法测试更大的模型。
0.5B
b4667 AVX-2:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 1B Q4_K - Medium | 462.96 MiB | 630.17 M | RPC | 99 | tg128 | 65.64 ± 6.90 |
qwen2 1B Q4_K - Medium | 462.96 MiB | 630.17 M | RPC | 99 | tg256 | 67.32 ± 0.24 |
qwen2 1B Q4_K - Medium | 462.96 MiB | 630.17 M | RPC | 99 | tg512 | 65.86 ± 0.28 |
b4667 Vulkan:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 1B Q4_K - Medium | 462.96 MiB | 630.17 M | Vulkan,RPC | 100 | tg128 | 74.50 ± 1.04 |
qwen2 1B Q4_K - Medium | 462.96 MiB | 630.17 M | Vulkan,RPC | 100 | tg256 | 71.63 ± 0.59 |
qwen2 1B Q4_K - Medium | 462.96 MiB | 630.17 M | Vulkan,RPC | 100 | tg512 | 56.60 ± 1.28 |
build bdcf8b6a (4672) ROCm:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 1B Q4_K - Medium | 462.96 MiB | 630.17 M | ROCm | 100 | tg128 | 63.64 ± 1.53 |
qwen2 1B Q4_K - Medium | 462.96 MiB | 630.17 M | ROCm | 100 | tg256 | 60.38 ± 2.03 |
qwen2 1B Q4_K - Medium | 462.96 MiB | 630.17 M | ROCm | 100 | tg512 | 54.86 ± 0.68 |
1.5B
b4667 AVX-2:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 1.5B Q4_K - Medium | 1.04 GiB | 1.78 B | RPC | 99 | tg128 | 27.82 ± 1.70 |
qwen2 1.5B Q4_K - Medium | 1.04 GiB | 1.78 B | RPC | 99 | tg256 | 29.42 ± 0.07 |
qwen2 1.5B Q4_K - Medium | 1.04 GiB | 1.78 B | RPC | 99 | tg512 | 29.11 ± 0.06 |
b4667 Vulkan:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 1.5B Q4_K - Medium | 1.04 GiB | 1.78 B | Vulkan,RPC | 100 | tg128 | 38.54 ± 0.93 |
qwen2 1.5B Q4_K - Medium | 1.04 GiB | 1.78 B | Vulkan,RPC | 100 | tg256 | 38.02 ± 0.97 |
qwen2 1.5B Q4_K - Medium | 1.04 GiB | 1.78 B | Vulkan,RPC | 100 | tg512 | 33.41 ± 0.62 |
build bdcf8b6a (4672) ROCm:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 1.5B Q4_K - Medium | 1.04 GiB | 1.78 B | ROCm | 100 | tg128 | 27.88 ± 0.21 |
qwen2 1.5B Q4_K - Medium | 1.04 GiB | 1.78 B | ROCm | 100 | tg256 | 26.98 ± 0.53 |
qwen2 1.5B Q4_K - Medium | 1.04 GiB | 1.78 B | ROCm | 100 | tg512 | 25.88 ± 0.41 |
3B
b4667 AVX-2:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 3B Q6_K | 2.36 GiB | 3.09 B | RPC | 99 | tg128 | 14.72 ± 0.10 |
qwen2 3B Q6_K | 2.36 GiB | 3.09 B | RPC | 99 | tg256 | 14.53 ± 0.07 |
qwen2 3B Q6_K | 2.36 GiB | 3.09 B | RPC | 99 | tg512 | 11.91 ± 0.21 |
b4667 Vulkan:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 3B Q6_K | 2.36 GiB | 3.09 B | Vulkan,RPC | 100 | tg128 | 18.74 ± 0.55 |
qwen2 3B Q6_K | 2.36 GiB | 3.09 B | Vulkan,RPC | 100 | tg256 | 12.57 ± 2.83 |
qwen2 3B Q6_K | 2.36 GiB | 3.09 B | Vulkan,RPC | 100 | tg512 | 16.01 ± 2.28 |
build bdcf8b6a (4672) ROCm:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 3B Q6_K | 2.36 GiB | 3.09 B | ROCm | 100 | tg128 | 16.38 ± 0.69 |
qwen2 3B Q6_K | 2.36 GiB | 3.09 B | ROCm | 100 | tg256 | 15.20 ± 0.19 |
qwen2 3B Q6_K | 2.36 GiB | 3.09 B | ROCm | 100 | tg512 | 14.99 ± 0.11 |
7B
b4667 AVX-2:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 7B IQ4_XS - 4.25 bpw | 3.95 GiB | 7.62 B | RPC | 99 | tg128 | 9.26 ± 0.11 |
qwen2 7B IQ4_XS - 4.25 bpw | 3.95 GiB | 7.62 B | RPC | 99 | tg256 | 6.15 ± 0.23 |
qwen2 7B IQ4_XS - 4.25 bpw | 3.95 GiB | 7.62 B | RPC | 99 | tg512 | 6.03 ± 0.01 |
b4667 Vulkan:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 7B IQ4_XS - 4.25 bpw | 3.95 GiB | 7.62 B | Vulkan,RPC | 100 | tg128 | 8.84 ± 0.59 |
qwen2 7B IQ4_XS - 4.25 bpw | 3.95 GiB | 7.62 B | Vulkan,RPC | 100 | tg256 | 7.23 ± 1.70 |
qwen2 7B IQ4_XS - 4.25 bpw | 3.95 GiB | 7.62 B | Vulkan,RPC | 100 | tg512 | 8.54 ± 0.02 |
build bdcf8b6a (4672) ROCm:
model | size | params | backend | ngl | test | t/s |
---|---|---|---|---|---|---|
qwen2 7B IQ4_XS - 4.25 bpw | 3.95 GiB | 7.62 B | ROCm | 100 | tg128 | 10.37 ± 0.34 |
qwen2 7B IQ4_XS - 4.25 bpw | 3.95 GiB | 7.62 B | ROCm | 100 | tg256 | 9.98 ± 0.08 |
qwen2 7B IQ4_XS - 4.25 bpw | 3.95 GiB | 7.62 B | ROCm | 100 | tg512 | 10.04 ± 0.07 |
结论
这玩意只在模型比较大的时候能比 Vulkan 后端稍微快那么一点,对于小模型反而是不如 Vulkan 的。因此,直接选择 Vulkan 就完了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix