龙芯上用llamacpp跑Gemma4-E2B-it-Q4
脸盲的松鼠
2026年04月12日 17:30

环境:daoxiagnhu20 + gcc8 + cmake(版本大于20)

3A5000

3A5000上用的daoxiagnhu20操作系统,安装的是gcc (Loongnix 8.3.0-6.lnd.vec.44) 8.3.0,编译用CMake 3.24.3版,编译成功,加载运行模型Meta-Llama-3-8B-Instruct-Q4_K_M.gguf成功,用命令./bin/llama-server -m /home/pnxc/下载/Meta-Llama-3-8B-Instruct-Q4_K_M.gguf --port 8080启动推理速度很慢而且会卡死。

修复std::filesystem

  • 尝试编译最新的llama.cpp-b8665,需要修改CMakeList.txt的第191行代码加入以下内容

代码块
PlainText
自动换行
复制代码
# Fix std::filesystem linking for GCC < 9 (needed for loongarch with GCC 8.3)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")
    message(STATUS "Linking stdc++fs to ggml targets for GCC < 9.0")
    foreach(target IN ITEMS ggml ggml-base ggml-cpu)
        if(TARGET ${target})
            target_link_libraries(${target} PUBLIC stdc++fs)
        endif()
    endforeach()
endif()
复制成功

修改完后从177行到206行的内容如下:

代码块
PlainText
自动换行
复制代码
#
# 3rd-party
#

if (LLAMA_USE_SYSTEM_GGML)
    message(STATUS "Using system-provided libggml, skipping ggml build")
    find_package(ggml REQUIRED)
    add_library(ggml ALIAS ggml::ggml)
endif()

if (NOT TARGET ggml AND NOT LLAMA_USE_SYSTEM_GGML)
    set(GGML_BUILD_NUMBER ${LLAMA_BUILD_NUMBER})
    set(GGML_BUILD_COMMIT ${LLAMA_BUILD_COMMIT})
    add_subdirectory(ggml)

# Fix std::filesystem linking for GCC < 9 (needed for loongarch with GCC 8.3)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")
    message(STATUS "Linking stdc++fs to ggml targets for GCC < 9.0")
    foreach(target IN ITEMS ggml ggml-base ggml-cpu)
        if(TARGET ${target})
            target_link_libraries(${target} PUBLIC stdc++fs)
        endif()
    endforeach()
endif()
    # ... otherwise assume ggml is added by a parent CMakeLists.txt
endif()

#
# build the library
#
复制成功

修改完之后进行编译,会在bin文件夹编译出结果

代码块
Shell
自动换行
复制代码
./bin/llama-server -h
./bin/llama-cli -h
复制成功

3A5000推理速度

经典的你是谁的问题,模型Meta-Llama-3-8B-Instruct-Q4_K_M.gguf用命令./bin/llama-server -m /home/pnxc/下载/Meta-Llama-3-8B-Instruct-Q4_K_M.gguf --port 8080推理了4分钟,推理速度是0.83t/s。 用命令./bin/llama-server -m /data/home/pnxc/下载/gemma-4-E2B-it-UD-Q4_K_XL.gguf --port 8080换成模型gemma-4-E2B-it-UD-Q4_K_XL.gguf会出现思维链,思维链的推理速度是0.96t/s

启动命令加上--chat-template-kwargs '{"enable_thinking": false}'关闭思维链后,推理速度是2.21t/s,这速度只能说是能够跑起来的想用起来还有不少的路要走。

3A6000

3A6000上用daoxianghu20操作系统,安装的是g++ (Loongnix 8.3.0-6.lnd.vec.44) 8.3.0,编译用CMake 3.30.0-rc4版,这次用的llama.cpp-b8763.tar.gz,同样是要修改llamacpp根目录的CMakeList.txt文件来修复std::filesystem,CMakeList.txt要修改的地方是在第117行附近,代码内容跟3A5000一样

修复std::filesystem

  • 修改完文件就用下面的没能力编译

代码块
PlainText
自动换行
复制代码
cd build
rm -rf *   # 清空 build 目录
cmake ..
make -j$(nproc)
复制成功

编译后可以用下面两个来看下有没有正常输出,有正常输出那就编译成功了可以用后面的命令快速加载模型来测试推理速度。

代码块
PlainText
自动换行
复制代码
./bin/llama-server -h
./bin/llama-cli -h

~/下载/llamacpp/llama.cpp-b8763/build/bin/llama-server \
    --model ~/下载/Gemma4/gemma-4-E2B-it-Q4_K_M.gguf \
    --mmproj ~/下载/Gemma4/Gemma-4-E2B-it-GGUF-mmproj-F16.gguf \
    --chat-template-kwargs '{"enable_thinking": false}' \
    --host 0.0.0.0 \
    --port 8080 \
    --ctx-size 4096
复制成功

3A6000的推理速度

reading是23.02t/s,reason 是11t/s,generate 是8.37 t/s,思考模式下的速度是3A5000的8.7倍。关闭思考模式的推理速度是11.86t/s,这个速度总算进入可用的区间了。

记录完。