ollama 调度器尝试在CUDA和ROCm GPU上加载模型分割

cidc1ykv  于 2个月前  发布在  其他
关注(0)|答案(5)|浏览(37)

问题是什么?
我有两个GPU混合使用(NVIDIA P40 + AMD RTX7900XTX)。
我可以加载较小的模型 - 这些先分配给P40。当加载一个大于P40容量的模型时,似乎malloc操作试图在第一个GPU上分配整个模型大小,尽管"offload to cuda"日志指向两个GPU之间的分散。
错误是:在设备0上分配39979.48 MiB失败:cudaMalloc失败:内存不足

ollama[8945]: time=2024-07-03T23:34:38.947+04:00 level=INFO source=memory.go:309 msg="offload to cuda" layers.requested=-1 layers.model=81 layers.offload=81 layers.split=41,40 memory.available="[23.7 GiB 23.5 GiB]" memory.required.full="44.4 GiB" memory.required.partial="44.4 GiB" memory.required.kv="1.2 GiB" memory.required.allocations="[22.6 GiB 21.8 GiB]" memory.weights.total="39.5 GiB" memory.weights.repeating="38.7 GiB" memory.weights.nonrepeating="822.0 MiB" memory.graph.full="1.1 GiB" memory.graph.partial="1.1 GiB"
ollama[8945]: time=2024-07-03T23:34:38.947+04:00 level=INFO source=server.go:368 msg="starting llama server" cmd="/tmp/ollama3425135909/runners/cuda_v11/ollama_llama_server --model /usr/share/ollama/.ollama/models/blobs/sha256-6baa2a027ec7595d421d151fec74dd338a15acebb83e52510a67e08fa4dd7b71 --ctx-size 4000 --batch-size 512 --embedding --log-disable --n-gpu-layers 81 --parallel 1 --tensor-split 41,40 --tensor-split 41,40 --port 43421
...
ggml_backend_cuda_buffer_type_alloc_buffer: allocating 39979.48 MiB on device 0: cudaMalloc failed: out of memory```

### OS

Linux

### GPU

Nvidia, AMD

### CPU

AMD

### Ollama version

0.1.48 (also had issue on previous version)
e3bfsja2

e3bfsja21#

关于这个问题,很抱歉-我们会努力修复它。

des4xlb0

des4xlb02#

当尝试在两张卡片上加载时,您是否可以分享一个设置了OLLAMA_DEBUG=1的服务器日志?(它不应该这样做,但听起来好像某个地方存在逻辑错误,导致在调度过程中出现错误)

xsuvu9jc

xsuvu9jc3#

已附上服务器日志。

hc8w905p

hc8w905p4#

这在最新版本中仍然发生。

i7uq4tfw

i7uq4tfw5#

在调度器的某个地方存在逻辑缺陷,我们不小心尝试在不同类型的GPU上拆分模型。我们只能在相同品牌的GPU上进行分布。这种混合品牌设置可以用于不同的模型,但不能用于单个模型。

相关问题