首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >让 2013 年的 GTX TITAN 跑本地 LLM — Kepler 架构 GPU 复活记

让 2013 年的 GTX TITAN 跑本地 LLM — Kepler 架构 GPU 复活记

作者头像
用户8140185
发布2026-09-15 10:37:23
发布2026-09-15 10:37:23
710
举报

谁说老显卡只能吃灰呀?我 2013 年的 NVIDIA GTX TITAN(Kepler 架构,6G 显存),2026 年依然可以流畅跑 4B 参数的本地大语言模型, 推理速度 >17 tokens/s。本文记录完整的踩坑过程。

一、硬件与背景

项目

配置

GPU

NVIDIA GeForce GTX TITAN (GK110, compute 3.5, 6080 MiB)

驱动

470.256.02 (最后一个支持 Kepler 的驱动分支)

系统 CUDA Runtime

11.4

CPU

Intel Xeon E3-1231 v3 @ 3.40GHz

内存

7.2 GB

OS

Ubuntu 26.04 LTS

磁盘可用

~81 GB

GTX TITAN :2013 年旗舰卡,Kepler 架构(GK110),算力 3.5(sm_35)。 NVIDIA 在 CUDA 12.0 起彻底移除了对 Kepler 架构GPU的支持,而本地 LLM 推理框架llama.cpp早就只能用 CUDA 12 +了。

二、找到 Kepler 的救命稻草

直接上结论:使用三方大神适配的 babal35/llamacpp-kepler,是基于 llama.cpp,给 sm_35/sm_37(Tesla K80/K40/K20 以及 GTX TITAN 系列)打了补丁,让它在 CUDA 11.x 下重新可用。

关键约束:

  • • CUDA 必须用 11.x(11.8 是最后一个支持编译 sm_35 的版本)
  • • GCC 必须 ≤ 10(CUDA 11.x 不支持 GCC 11+,而我的系统 GCC 是 15.2)
  • • 我ubunutu26.04系统(没错,我装了最新的,命令行输入密码都有*号提示了)装的 CUDA 是 11.8

三、环境搭建

为了避免污染系统(也不想去折腾 apt 装 gcc-10、去 NVIDIA 官网下 runfile),直接用 conda 建一个独立环境。好处:免 sudo、好删除、好复制。

3.1 创建环境(第一次踩坑)

最初的想法很简单,直接以下的命令:

代码语言:javascript
复制
mamba create -n llama-kepler -c nvidia -c conda-forge \
  python=3.11 gcc=10.4.0 gxx=10.4.0 cmake \
  cuda-toolkit=11.8.0 -y

结果 nvcc --version 显示 11.8,但 conda list 一看——cuda-cudart 居然是 12.4。cuda-toolkit=11.8.0 这个 metapackage 不约束子包版本,conda-forge 的 12.x 包混了进来,环境变成了 nvcc 11.8 + 库12.4 的缝合怪。

3.2 创建环境(正确版本)

于是我把 每一个 cuda-* 子包显式 pin 到 11.8:

代码语言:javascript
复制
mamba create -n llama-kepler -c nvidia -c conda-forge \
  python=3.11 gcc=10.4.0 gxx=10.4.0 cmake \
  cuda-nvcc=11.8.89 \
  cuda-cudart=11.8.89 \
  cuda-cudart-dev=11.8.89 \
  cuda-cccl=11.8.89 \
  cuda-nvrtc=11.8.89 \
  cuda-nvrtc-dev=11.8.89 \
  cuda-driver-dev=11.8.89 \
  cuda-nvtx=11.8.86 \
  cuda-nvml-dev=11.8.86 \
  -y

验证了下,没问题啦:

代码语言:javascript
复制
conda activate llama-kepler
conda list | grep cuda
# 所有 cuda-* 都应该是 11.8.x,channel 是 nvidia
nvcc --version   # release 11.8, V11.8.89
gcc --version    # 10.4.0

3.3 补cuBLAS(第二次踩坑)

cmake编译时遇到了 configure 报错:

代码语言:javascript
复制
CMake Error: Target "ggml-cuda" links to CUDA::cublas but the target was not found.

CUDA::cublas 由 cuBLAS 提供,但 nvidia channel 上的包名不是 cuda-cublas,而是 libcublas。而且 11.8 对应的版本号是 11.8.1.74(不是 11.8.89):

代码语言:javascript
复制
mamba install -c nvidia -c conda-forge \
  libcublas=11.8.1.74 libcublas-dev=11.8.1.74 -y

(这个版本号是用 curl 直接拉 nvidia channel 的 repodata.json 查出来的,conda search 在国内网络下经常超时,无奈呀。。。)

四、克隆与编译

4.1 用镜像加速 clone

国内直连 GitHub 很慢,而且容易 GnuTLS recv error。于是我用了 gh-proxy.com 镜像 + 浅克隆 + 强制 HTTP/1.1:

代码语言:javascript
复制
git -c http.version=HTTP/1.1 -c http.postBuffer=524288000 \
  clone --depth 1 https://gh-proxy.com/https://github.com/babal35/llamacpp-kepler

(如果是从 ZIP 下载的,解压后不是 git 仓库,cmake 会警告 "Git repository not found",不影响编译。)

4.2 cmake 配置

Kepler 架构的GPU配置时必须关掉 CUDA Graphs(GGML_CUDA_GRAPHS=OFF),否则会报错,详细命令如下:

代码语言:javascript
复制
cd llamacpp-kepler
mkdir build && cd build
cmake .. \
  -DGGML_CUDA=ON \
  -DCMAKE_CUDA_ARCHITECTURES=35 \
  -DGGML_CUDA_GRAPHS=OFF \
  -DGGML_NATIVE=OFF \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLAMA_BUILD_TESTS=OFF \
  -DCMAKE_EXE_LINKER_FLAGS="-Wl,-rpath-link,$CONDA_PREFIX/lib -Wl,-rpath,$CONDA_PREFIX/lib" \
  -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-rpath-link,$CONDA_PREFIX/lib -Wl,-rpath,$CONDA_PREFIX/lib" \
  -DCMAKE_BUILD_RPATH="$CONDA_PREFIX/lib" \
  -DCMAKE_INSTALL_RPATH="$CONDA_PREFIX/lib"

4.3 链接器(第三次踩坑)

我上面用的 -Wl,-rpath-link 参数看着啰嗦,但缺了它编译会失败,报一堆 undefined reference to cudaMalloc@libcudart.so.11.0 / SSL_CTX_new@OPENSSL_3.0.0 / GOMP_barrier@GOMP_1.0

主要原因是:conda-forge 的 ld 默认不带 --copy-dt-needed-entries,链接可执行文件时不会自动把共享库的传递依赖(libcudart、libssl、libgomp)拉进来。-rpath-link 告诉 ld 去哪里找这些传递依赖。

(一开始我试过 --copy-dt-needed-entries,结果只是把 error 降级成 warning,链接还是失败。-rpath-link 才是正解。)

4.4 编译

代码语言:javascript
复制
make -j$(nproc)

我Xeon E3-1231 v3(4 核 8 线程)的CPU,编译花了大概 10 分钟,完成后程序在 build/bin/ 下:llama-clillama-serverllama-bench 等等。

验证 了下GPU 能成功识别:

代码语言:javascript
复制
./bin/llama-cli --list-devices
# ggml_cuda_init: found 1 CUDA devices (Total VRAM: 6080 MiB):
#   Device 0: NVIDIA GeForce GTX TITAN, compute capability 3.5
# Available devices:
#   CUDA0: NVIDIA GeForce GTX TITAN (6080 MiB, 5973 MiB free)

五、下载模型并推理

5.1 选模型

由于咱6GB 显存是硬约束,也没法off-load到RAM。而且模型 + KV cache 都得塞进去。所以经验上以下模型较好:

模型

量化

文件大小

适配性

Qwen2.5-1.5B-Instruct

Q8_0

~1.6 GB

富余,上下文可以拉很长

Qwen2.5-3B-Instruct

Q4_K_M

~2 GB

富余

Qwen3.5-4B

Q8_0

4.48 GB

刚好(剩 ~876 MiB 给上下文)

Qwen2.5-7B-Instruct

Q4_K_M

~4.4 GB

紧张,上下文受限

但是我还是决定用更新的模型, HauhauCS/Qwen3.5-4B-Uncensored-HauhauCS-Aggressive 的 Q8_0 版本(4.48 GB),Q8版本,保证模型效果。

5.2 用镜像下载

因为国内 HuggingFace 也不稳,所以用 hf-mirror.com镜像进行:

代码语言:javascript
复制
mkdir -p ~/models && cd ~/models
curl -L --retry 3 --retry-delay 5 \
  -o Qwen3.5-4B-Uncensored-Q8_0.gguf \
  "https://hf-mirror.com/HauhauCS/Qwen3.5-4B-Uncensored-HauhauCS-Aggressive/resolve/main/Qwen3.5-4B-Uncensored-HauhauCS-Aggressive-Q8_0.gguf?download=true"

5.3 跑起来

就是比较简单的命令啦

代码语言:javascript
复制
conda activate llama-kepler

./build/bin/llama-cli \
  -m ~/models/Qwen3.5-4B-Uncensored-Q8_0.gguf \
  -p "1+1等于几?直接回答数字,不要思考过程。" \
  -n 200 \
  -ngl 99 \
  --temp 0.3 \
  --single-turn

-ngl 99 表示把全部 99 层都卸载到 GPU。输出:

代码语言:javascript
复制
> 1+1等于几?直接回答数字,不要思考过程。

[Start thinking]
Thinking Process:
1.  Analyze the Request: ...
2.  Determine the Answer: 1 + 1 = 2.
3.  Format the Output: Just "2".
4.  Final Check: ...
5.  Construct Output: 2
[End thinking]

2

[ Prompt: 31.1 t/s | Generation: 16.7 t/s ]

看了下生成速度有 16.7 tokens/s,对一个 2013 年的卡来说相当能打。

显存占用(llama.cpp 自带的 breakdown):

代码语言:javascript
复制
|   - CUDA0 (GTX TITAN)  |  6080 = 876 free + (4932 = 4264 model + 178 context + 490 compute) + 271 |

模型 4264 MiB + 上下文 178 MiB + 计算 490 MiB = 4932 MiB,还剩 876 MiB。不过一运行,GPU温度飙到96度了,也是无语了,问了下AI可能是硅脂干了或者灰太多,看了下灰还好,只能是前者了,不想折腾,就轻度用下吧!老的还是不行呀,特别是电子产品,可能许多洋垃圾也会面临这种情况呀!

如果手头也有吃灰的 Kepler 卡,不妨试试。整个环境装在一个 conda env 里,不要了 mamba env remove -n llama-kepler 一键清干净,系统干干净净。


环境:Ubuntu 26.04 + miniforge3 + conda env llama-kepler(CUDA 11.8.89 + gcc 10.4.0)+ llamacpp-kepler fork(commit b367989)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 一、硬件与背景
  • 二、找到 Kepler 的救命稻草
  • 三、环境搭建
    • 3.1 创建环境(第一次踩坑)
    • 3.2 创建环境(正确版本)
    • 3.3 补cuBLAS(第二次踩坑)
  • 四、克隆与编译
    • 4.1 用镜像加速 clone
    • 4.2 cmake 配置
    • 4.3 链接器(第三次踩坑)
    • 4.4 编译
  • 五、下载模型并推理
    • 5.1 选模型
    • 5.2 用镜像下载
    • 5.3 跑起来
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档