請啟用 JavaScript 來查看內容

如何透過 llama.cpp 使用 GPU 來運行 LLM inference?

    前言

    最近想試用 llama.cpp 來跑 LLM (大型語言模型),但發現它執行起來生成速度很慢,結果是沒吃到我主機的 GPU。

    此篇文章我將最終解決方式記錄下來,供遇到類似情形的讀者參考。


    電腦環境:

    • Windows 11
    • NVIDIA GPU

    llama.cpp
    llama.cpp

    安裝 llama.cpp

    llama.cpp 有 幾種安裝方式 ,我是直接下載官方預先建置的二進位文件。 (最方便了~)


    llama.cpp GitHub 的 Releases 頁面 ,找到對應的版本下載。

    像我是在 Windows 並使用 NVIDIA GPU (CUDA),我就下載 llama-b5873-bin-win-cuda-12.4-x64.zip,並只要解壓縮即可。

    * 注意第一個 cudart-llama-bin-win-cuda-12.4-x64.zip,後續是其中一種解決方法。


    進入資料夾後,開啟終端機(命令提示字元),後續指令就在這路徑裡執行。


    下載 GGUF 模型

    llama.cpp 僅支援 GGUF 格式的模型。


    關於模型的下載方法,或如何自己轉換為 GGUF 格式模型,官方這邊有詳細的說明:
    https://github.com/ggml-org/llama.cpp#obtaining-and-quantizing-models

    我是直接手動去下載 gemma-3-4b-it-Q4_K_M.gguf
    https://huggingface.co/ggml-org/gemma-3-4b-it-GGUF/tree/main

    * 如果你需要模型能 "看圖片" (當然模型本身要支援),則還需要下載 mmproj-model-f16.gguf,它是用來把圖片轉換成 LLM 能理解的格式。


    建個資料夾 (以下範例是命名 model),將模型放進去。


    確認是否有使用 GPU

    輸入指令列出可用設備清單:

    1
    2
    3
    
    llama-server --list-devices
    # 或
    # ./llama-server --list-devices
    

    它的輸出會類似這樣:

    ggml_cuda_init: GGML_CUDA_FORCE_MMQ:    no
    ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
    ggml_cuda_init: found 1 CUDA devices:
      Device 0: NVIDIA RTX A6000, compute capability 8.6, VMM: yes
    load_backend: loaded CUDA backend from D:\llama.cpp\llama-b5873-bin-win-cuda-12.4-x64\ggml-cuda.dll
    load_backend: loaded RPC backend from D:\llama.cpp\llama-b5873-bin-win-cuda-12.4-x64\ggml-rpc.dll
    load_backend: loaded CPU backend from D:\llama.cpp\llama-b5873-bin-win-cuda-12.4-x64\ggml-cpu-sapphirerapids.dll
    Available devices:
      CUDA0: NVIDIA RTX A6000 (49139 MiB, 47545 MiB free)
    

    如果在 Available devices 看不到 GPU 的話,那就代表 llama.cpp 沒有成功讀取到電腦裡的 GPU,跳至下章節「 解決辦法 」。


    執行指令:

    1
    2
    3
    4
    
    llama-server -m ./model/gemma-3-4b-it-Q4_K_M.gguf --port 8080 -ngl 999
    
    # 或者需要模型 "看圖片"
    # llama-server -m ./model/gemma-3-4b-it-Q4_K_M.gguf --mmproj ./model/mmproj-model-f16.gguf --port 8080 -ngl 999
    

    後方加上 -ngl 999 (-ngl N, --n-gpu-layers N) 可將部分層級的運算任務轉移至 GPU 進行,通常可以提升效能。


    我是使用 llama-server 運行,瀏覽器開啟 http://127.0.0.1:8080,跟它對話,看看在生成時,GPU 有沒有運作。


    解決辦法

    我遇到的情況是在 llama-server --list-devices 就沒有出現我的 GPU 裝置了,可以依照以下步驟確認。


    1. 確認顯示卡驅動的 CUDA 版本

    輸入 nvidia-smi 指令,確認 CUDA 版本,範例輸出如下:

    Thu Jul 12 10:07:20 2025
    +-----------------------------------------------------------------------------------------+
    | NVIDIA-SMI 553.50                 Driver Version: 553.50         CUDA Version: 12.4     |
    |-----------------------------------------+------------------------+----------------------+
    | GPU  Name                     TCC/WDDM  | Bus-Id          Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
    |                                         |                        |               MIG M. |
    |=========================================+========================+======================|
    |   0  NVIDIA RTX A6000             WDDM  |   00000000:47:00.0 Off |                  Off |
    | 30%   32C    P8             17W /  300W |    7958MiB /  49140MiB |      3%      Default |
    |                                         |                        |                  N/A |
    +-----------------------------------------+------------------------+----------------------+
    

    右上角顯示 CUDA Version: 12.4,如果版本太舊,請去 NVIDIA 官方驅動下載頁 選擇對應的 GPU 並下載安裝,如有需要,安裝後可重開機。

    試試 llama-server --list-devices 可否正常讀到 GPU。


    1. 下載 cudart-llama-bin-win-cuda-12.4-x64.zip

    會到前面說的 llama.cpp GitHub 的 Releases 頁面 ,找到 cudart-llama-bin-win-cuda-12.4-x64.zip 並下載,將其解壓縮後,把裡面的檔案全部複製到 llama-b5873-bin-win-cuda-12.4-x64 資料夾中。

    (壓縮檔裡面應該會有 cublas64_12.dllcublasLt64_12.dllcudart64_12.dll)

    試試 llama-server --list-devices 可否正常讀到 GPU。


    1. 安裝 CUDA Toolkit

    如果使用上一步的 cudart-llama-bin-win-cuda-12.4-x64.zip,還是無法讓 llama.cpp 讀到 GPU 的話,那就安裝 CUDA Toolkit 試試,檔案比較大 (大概 3 GB 多)。

    再試試 llama-server --list-devices 可否正常讀到 GPU。


    1. 還是不行的話,那就問 ChatGPT 看看吧……

    結語

    LLM 在有無 GPU 的環境,inference (推論) 速度還是差異很大的。

    這次我把我解決 llama.cpp 無法連接 GPU 的解決步驟記錄下來,希望有幫助到各位~



    如果對於 生成式 AI 有興趣的讀者,記得追蹤『 IT空間 』FB 粉專,才不會錯過最新的發文通知呦~🔔




    參考:
    llama.cpp | GitHub


    人生總會有揮棒落空的時候,這球過了沒關係,再看下一球就好!

    —— 林智勝 (台灣棒球選手)


    🔻 如果覺得喜歡,歡迎在下方獎勵我 5 個讚~
    分享

    Jia
    作者
    Jia
    軟體工程師 - Software Engineer