一畳のくつろぎタイム

このブログでは紹介する商品画像をAmazonアソシエイトより借りています。画像やリンクにはアフィリエイト広告が含まれる事があります

2026年3月1日日曜日

SandyおじさんPC × GTX750TiでLLMを試す

産廃を嬉しそうに掲げるミナさん

Raspberry Pi5程度性能でもパラメータ数の少ないLLMなら動かせることがわかり、それならば、同等性能のSandyBridgeのCPUでも動かせるのでは?

という普通の人があまり考えない事をやってます。 
いつかはSandyおじさんの一人娘キャラのLLMアシスタントを作る予定です。

この記事では、

  • CUDAとSM_XXの関係
  • no kernel imageエラーの正体
  • VulkanとCUDAの違い
  • 実際にGTX750Tiでどの程度動くのか
  • GTX1050との比較結果

を整理しました。

 

環境

  • UbuntuのLTSのやつ
  • CPU:IvyBridge i5-3470
  • GPU:Geforce GTX750Ti 
  • CUDA12.2 

15年前のスペック 

GTX750TiでLLMは動くのか? 

古いGPU(GTX750Ti)で llama.cpp を動かそうとしたところ、最初に遭遇したのはこのエラーだった。

CUDA error: no kernel image is available for execution on the device

GPUが壊れているわけではない。
原因は「CUDAとSM_XXの理解不足」だった。


1. CUDAバージョンとSM_XX

まず混乱ポイント。

CUDA 12.x は開発ツールキットのバージョン。
SM_XX はGPUのCompute Capability(アーキテクチャ世代)。

手持ちのGPUだとこんな感じ。 

GPU Compute Capability 表記
GTX750Ti 5.0 sm_50
GTX1050 6.1 sm_61
GTX3060 8.6 sm_86
GTX5070 12.0 sm_120

英語版WikipediaでCUDAを参照すると、CUDA ToolKitのバージョンでどのGPUがサポートされるかわかる。

CUDA ToolKit12.2では、Maxwell、Pascal、Volta、Turing、Ampere、Ada、Lovelace、Hopperが対象だとわかる。つまりCUDA12.2でGTX750Ti(Maxwell sm_50)はギリギリサポートされているのだ。 


2. 「no kernel image」エラーの意味

CUDA error: no kernel image is available for execution on the device

これは

そのGPU向けにコンパイルされたCUDAカーネルが存在しない

という意味。

つまり、

  • バイナリに sm_50 が含まれていなかった
  • そのためGTX750Tiでは実行できなかった

対処はllamaビルド時に明示すること。

-DCMAKE_CUDA_ARCHITECTURES="50;60;61;70;75;80;86;90"

これで sm_50を含んでmaxwell以降のGPUのためのコードが生成される。

 

cmake \
  -DBUILD_SHARED_LIBS=OFF \
  -DLLAMA_BUILD_SERVER=ON \
  -DLLAMA_BUILD_EXAMPLES=ON \
  -DLLAMA_BUILD_TESTS=ON \
  -DLLAMA_BUILD_TOOLS=ON \
  -DGGML_CUDA=ON \
  -DCMAKE_CUDA_ARCHITECTURES="50;60;61;70;75;80;86;90" \
  -DGGML_VULKAN=ON \
  -DGGML_VULKAN_MXFP=OFF \
  -DGGML_AVX=ON \
  -DGGML_AVX2=OFF \
  -DGGML_FMA=OFF

sandy、IvyあたりにはAVX2がないためOFFとします。
VULKANとCUDAが使えるようにしている感じです。 

コンパイル、ビルドに割と時間がかかる 
BUILD_TOOLS=ONのため、llama-cliやllama-serverなどが作られる、このあとllama-cliを使っていく。 

オプション以外は👇の記事のllama.cppのところを見てください。
https://blogger.kinkuman.net/2025/11/oci-aituberkit.html 

 

3. Vulkanで動いているのか?

llama-cli --list-devices では750Tiの

CUDA0
Vulkan0
$ llama-cli --list-devices
ggml_cuda_init: found 1 CUDA devices: Device 0: NVIDIA GeForce GTX 750 Ti, compute capability 5.0, VMM: yes
ggml_vulkan: Found 1 Vulkan devices: ggml_vulkan: 0 = NVIDIA GeForce GTX 750 Ti (NVIDIA) | uma: 0 | fp16: 0 | bf16: 0 | warp size: 32 | shared memory: 49152 | int dot: 0 | matrix cores: none
Available devices: 
CUDA0: NVIDIA GeForce GTX 750 Ti (1999 MiB, 1629 MiB free) 
Vulkan0: NVIDIA GeForce GTX 750 Ti (2294 MiB, 1865 MiB free)

両方が表示される。

しかし重要なのは終了時のメモリ表示。

- CUDA0 (GTX 750 Ti)
Exiting... llama_memory_breakdown_print: | memory breakdown [MiB] | total free self model context compute unaccounted| llama_memory_breakdown_print: | - CUDA0 (GTX 750 Ti) | 1999 = 97 + (1469 = 969 + 200 + 299) + 432 | llama_memory_breakdown_print: | - Host | 326 = 280 + 24 + 22 |

model/context/compute が CUDA 側に確保されていれば、
実際にCUDAで推論しているという意味になる。

found Vulkanは「認識されている」だけで、実行に使われるとは限らない。

--device CUDA0 を指定すれば明示的にCUDAを使える。

 次のように起動した。

./llama-cli -m /home/user1/workspace/llama.cpp/model/tinyswallow-1.5b-instruct-q5_k_m.gguf --device CUDA0 -ngl 26 -c 8192 --threads 4 --chat-template chatml

4. 実測結果

GTX750Ti

Prompt: 34.0 t/s
Generation: 17.9 t/s

GTX1050

Prompt: 19.0 t/s
Generation: 12.6 t/s

理論スペックでは1050の方が新しい。
なぜか750Tiの方が良い結果が出る。 

よくわからない、使用したバイナリが異なるので、1050は再度測定する必要がある。

 


 

5. GTX750TiでLLMをやる意味はあるのか?

ほとんどない。
ゴミPCをいつでも使えるOpenAI API互換サーバーとして動かすと便利なぐらいだ。
1.5B程度のLLMは、うまく導いてあげればそれなりに働く。

  • VRAM 2GB
  • Tensor Coreなし
  • メモリ帯域も限定的
  • 現在の主流はRTX世代

750TiでLLMを動かすのは実用というより実験。 
しかし、適切にビルドすれば実際に動く。

まとめ

  • CUDA SDKバージョンとSM_XXの関係性の整理ができた
  • 「no kernel image」はGPU非対応ではなくビルド設定の問題
  • VulkanとCUDA両方選んで使える。
  • GTX750TiでもLLMは動く
  • 理論スペックと推論速度は一致しないかも?

古いGPUでも、使用できないわけではない。