Ollama没有使用来自特斯拉P40卡的20GB VRAM,

pprl5pva  于 22天前  发布在  其他
关注(0)|答案(5)|浏览(24)

问题是什么?

不确定这是否是bug、损坏的硬件还是驱动程序问题,但我想报告一下以防万一。
当Ollama检测到这些卡时,它看到每张卡上有23.7GB可用空间,但在尝试分配内存时,只有3.7GB可用。从服务器日志中可以看到:
time=2024-08-21T17:49:38.582-07:00 level=INFO source=types.go:105 msg="inference compute" id=GPU-92d1b3ad-0ab8-2ece-050e-b4f5252f8098 library=cuda compute=6.1 driver=12.6 name="Tesla P40" total="23.9 GiB" available="23.7 GiB"
time=2024-08-21T17:49:38.582-07:00 level=INFO source=types.go:105 msg="inference compute" id=GPU-7a8dc17e-85e1-5bc8-e230-119d6be5252c library=cuda compute=6.1 driver=12.6 name="Tesla P40" total="23.9 GiB" available="23.7 GiB"
layers.requested=-1 layers.model=81 layers.offload=48 layers.split=3,45 memory.available="[3.7 GiB 23.7 GiB]"

操作系统

Windows

GPU

Nvidia

CPU

Intel

Ollama版本

0.3.6

dl5txlt9

dl5txlt91#

nvidia-smi的输出是什么?如果你能提供完整的日志,它可能包含一些细节,从而更好地了解正在发生的事情。

pes8fvy9

pes8fvy92#

我正在使用Windows系统。
我已经排除了硬件问题,因为当我改变CUDA_VISIBLE_DEVICES中设备顺序时,加载20GB的卡会发生变化。
我仍然不确定这是否是驱动程序问题,但我已经尝试了CUDA 11.7、12.4、12.6以及P40的一些不同服务器驱动程序,我还尝试了Ollama 0.3.6和0.3.7。
抱歉我现在无法提供截图,但SMI显示的内容与此相同:
llm_load_tensors: CUDA0缓冲区大小 = 920.12 MiB
llm_load_tensors: CUDA1缓冲区大小 = 21536.62 MiB
一张卡将加载20GB,另一张卡将加载约1GB。
这是完整的日志:
server1.log

yr9zkbsy

yr9zkbsy3#

我要求输出nvidia-smi的原因是它显示了正在使用GPU的进程。日志显示,其中一个GPU只有3.6GiB可用:

time=2024-08-21T16:26:53.736-07:00 level=INFO source=memory.go:309 msg="offload to cuda" layers.requested=-1 
layers.model=81 layers.offload=46 layers.split=2,44 memory.available="[3.6 GiB 23.7 GiB]" 
memory.required.full="44.7  GiB" memory.required.partial="26.4 GiB" memory.required.kv="640.0 MiB"
memory.required.allocations="[3.1 GiB 23.3 GiB]" memory.weights.total="38.9 GiB" memory.weights.repeating="38.1 GiB"
memory.weights.nonrepeating="822.0 MiB"  memory.graph.full="1.1 GiB" memory.graph.partial="1.1 GiB"

如果你能找出哪个卡使用了20G的内存,你可能可以为模型加载腾出一些显存。

hpxqektj

hpxqektj4#

就我所知,没有任何东西在使用它,它显示的是1600/24000M。也许它被某些东西预留了,或者Ollama/CUDA没有正确读取它?

昨晚我试图找到解决方案时找到了这张图片,抱歉它没有进程信息。

0s7z1bwu

0s7z1bwu5#

这似乎是由于Quadro K2200引起的,在Windows中禁用它使得模型能够在两张P40上正确加载。
我已经将CUDA_VISIBLE_DEVICES设置为P40的UUID,因此Quadro不应该被检测到,但也许CUDA在这两张卡之间混淆了可用的显存?
不确定您是想要调查票还是想关闭它,但感谢您花时间查看此问题。

相关问题