ollama Mixtral 22B无法在A100(80GB VRAM)上加载,

swvgeqrz  于 2个月前  发布在  其他
关注(0)|答案(8)|浏览(40)

问题是什么?
尝试使用A100 GPU在Kubernetes中部署Mixtral 8x22B模型,但在6分钟后仍无法加载。
Mistral 7B模型可以正常加载。
以下是调试日志:
time=2024-07-21T07:39:07.407Z level=DEBUG source=gpu.go:358 msg="updating system memory data" before.total="216.3 GiB" before.free="212.5 GiB" before.free_swap="0 B" now.total="216.3 GiB" now.free="212.5 GiB" now.free_swap="0 B" CUDA driver version: 12.4 time=2024-07-21T07:39:07.762Z level=DEBUG source=gpu.go:406 msg="updating cuda memory data" gpu=GPU-4101ce7d-41d5-c2ee-2fe9-927eb4440974 name="NVIDIA A100 80GB PCIe" overhead="0 B" before.total="79.1 GiB" before.free="78.7 GiB" now.total="79.1 GiB" now.free="78.7 GiB" now.used="426.1 MiB" releasing cuda driver library time=2024-07-21T07:39:07.768Z level=DEBUG source=sched.go:214 msg="loading first model" model=/root/.ollama/models/blobs/sha256-85bbeb31e9a57b841db2386003d8b057acbe0dce01e1939711cd533ccbc69bca time=2024-07-21T07:39:07.768Z level=DEBUG source=memory.go:101 msg=evaluating library=cuda gpu_count=1 available="[78.7 GiB]" time=2024-07-21T07:39:07.768Z level=INFO source=sched.go:701 msg="new model will fit in available VRAM in single GPU, loading" model=/root/.ollama/models/blobs/sha256-85bbeb31e9a57b841db2386003d8b057acbe0dce01e1939711cd533ccbc69bca gpu=GPU-4101ce7d-41d5-c2ee-2fe9-927eb4440974 parallel=4 available=84527415296 required="67.3 GiB" time=2024-07-21T07:39:07.769Z level=DEBUG source=server.go:100 msg="system memory" total="216.3 GiB" free="212.5 GiB" free_swap="0 B" time=2024-07-21T07:39:07.769Z level=DEBUG source=memory.go:101 msg=evaluating library=cuda gpu_count=1 available="[78.7 GiB]" time=2024-07-21T07:39:07.769Z level=INFO source=memory.go:309 msg="offload to cuda" layers.requested=-1 layers.model=57 layers.offload=57 layers.split="" memory.available="[78.7 GiB]" memory.required.full="67.3 GiB" memory.required.partial="67.3 GiB" memory.required.kv="1.8 GiB" memory.required.allocations="[67.3 GiB]" memory.weights.total="64.7 GiB" memory.weights.repeating="64.5 GiB" memory.weights.nonrepeating="157.5 MiB" memory.graph.full="832.0 MiB" memory.graph.partial="1.1 GiB" time=2024-07-21T07:39:07.769Z level=DEBUG source=payload.go:71 msg="availableServers : found" file=/tmp/ollama232821427/runners/cpu/ollama_llama_server time=2024-07-21T07:39:07.769Z level=DEBUG source=payload.go:71 msg="availableServers : found" file=/tmp/ollama232821427/runners/cpu_avx/ollama_llama_server time=2024-07-21T07:39:07.769Z level=DEBUG source=payload.go:71 msg="availableServers : found" file=/tmp/ollama232821427/runners/cpu_avx2/ollama_llama_server time=2024-07-21T07:39:07.769Z level=DEBUG source=payload.go:71 msg="availableServers : found" file=/tmp/ollama232821427/runners/cuda_v11/ollama_llama_server time=2024-07-21T07:39:07.769Z level=DEBUG source=payload.go:71 msg="availableServers : found" file=/tmp/ollama232821427/runners/rocm_v60102/ollama_llama_server time=2024-07-21T07:39:07.770Z level=DEBUG source=payload.go:71 msg="availableServers : found" file=/tmp/ollama232821427/runners/cpu/ollama_llama_server time=2024-07-21T07:39:07.770Z level=DEBUG source=payload.go:71 msg="availableServers : found" file=/tmp/ollama232821427/runners/cpu_avx/ollama_llama_server time=2024-07-21T07:39:07.770Z level=DEBUG source=payload.go:71 msg="availableServers : found" file=/tmp/ollama232821427/runners/cpu_avx2/ollama_llama_server time=2024-07-21T07:39:07.770Z level=DEBUG source=payload.go:71 msg="availableServers : found" file=/tmp/ollama232821427/runners/cuda_v11/ollama_llama_server time=2024-07-21T07:39:07.770Z level=DEBUG source=payload.go:71 msg="availableServers : found" file=/tmp/ollama232821427/runners/rocm_v60102/ollama_llama_server time=2024-07-21T07:39:07.770Z level=INFO source=server.go:383 msg="starting llama server" cmd="/tmp/ollama232821427/runners/cuda_v11/ollama_llama_server --model /root/.ollama/models/blobs/sha256-85bbeb31e9a57b841db2386003d8b057acbe0dce01e1939711cd533ccbc69bca --ctx-size 8192 --batch-size 512 --embedding --log-disable --n-gpu-layers 57 --verbose --parallel 4 --port 37297" time=2024-07-21T07:39:07.770Z level=DEBUG source=server.go:398 msg=subprocess environment="[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin LD_LIBRARY_PATH=/tmp/ollama232821427/runners/cuda_v11:/tmp/ollama232821427/runners:/usr/local/nvidia/lib:/usr/local/nvidia/lib64 CUDA_VISIBLE_DEVICES=GPU-4101ce7d-41d5-c2ee-2fe9-927eb4440974]" time=2024-07-21T07:39:07.770Z level=INFO source=sched.go:437 msg="loaded runners" count=1 time=2024-07-21T07:39:07.770Z level=INFO source=server.go:571 msg="waiting for llama runner to start responding" time=2024-07-21T07:39:07.770Z level=INFO source=server.go:612 msg="waiting for server to become available" status="llm server error" INFO [main] build info | build=1 commit="a8db2a9" tid="139752639410176" timestamp=1721547547 INFO [main] system info | n_threads=24 n_threads_batch=-1 system_info="AVX = 1 | AVX_VNNI = 0 | AVX2 = 0 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | AVX512_BF16 = 0 | FMA = 0 | NEON = 0 | SVE = 0 | ARM_FMA = 0 | F16C = 0 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | MATMUL_INT8 = 0 | LLAMAFILE = 0 | " tid="139752639410176" timestamp=1721547547 total_threads=24 INFO [main] HTTP server listening | hostname="127.0.0.1" n_threads_http="23" port="37297" tid="139752639410176" timestamp=1721547547 llama_model_loader: loaded meta data with 28 key-value pairs and 563 tensors from /root/.ollama/models/blobs/sha256-85bbeb31e9a57b841db2386003d8b057acbe0dce01e1939711cd533ccbc69bca (version GGUF V3 (latest)) llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output. llama_model_loader: - kv 0: general.architecture str = llama llama_model_loader: - kv 1: general.name str = Mixtral-8x22B-Instruct-v0.1 llama_model_loader: - kv 2: llama.block_count u32 = 56 llama_model_loader: - kv 3: llama.context_length u32 = 65536 llama_model_loader: - kv 4: llama.embedding_length u32 = 6144 llama_model_loader: - kv 5: llama.feed_forward_length u32 = 16384 llama_model_loader: - kv 6: llama.attention.head_count u32 = 48 llama_model_loader: - kv 7: llama.attention.head_count_kv u32 = 8 llama_model_loader: - kv 8: llama.rope.freq_base f32 = 1000000.000000 llama_model_loader: - kv 9: llama.attention.layer_norm_rms_epsilon f32 = 0.000010 llama_model_loader: - kv 10: llama.expert_count u32 = 8 llama_model_loader: - kv 11: llama.expert_used_count u32 = 2 llama_model_loader: - kv 12: general.file_type u32 = 12 llama_model_loader: - kv 13: llama.vocab_size u32 = 32768 llama_model_loader: - kv 14: llama.rope.dimension_count u32 = 128 llama_model_loader: - kv 15: tokenizer.ggml.model str = llama llama_model_loader: - kv 16: tokenizer.ggml.tokens arr[str,32768] = ["<unk>", "<s>", "</s>", "[INST]", "[... llama_model_loader: - kv 17: tokenizer.ggml.scores arr[f32,32768] = [-1000.000000, -1000.000000, -1000.00... llama_model_loader: - kv 18: tokenizer.ggml.token_type arr[i32,32768] = [3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, ... llama_model_loader: - kv 19: tokenizer.ggml.bos_token_id u32 = 1 llama_model_loader: - kv 20: tokenizer.ggml.eos_token_id u32 = 2 llama_model_loader: - kv 21: tokenizer.ggml.unknown_token_id u32 = 0 llama_model_loader: - kv 22: tokenizer.ggml.add_bos_token bool = true llama_model_loader: - kv 23: tokenizer.ggml.add_eos_token bool = false llama_model_loader: - kv 24: tokenizer.chat_template.tool_use str = {{bos_token}}{% set user_messages = m... llama_model_loader: - kv 25: tokenizer.chat_templates arr[str,1] = ["tool_use"] llama_model_loader: - kv 26: tokenizer.chat_template str = {{bos_token}}{% for message in messag... llama_model_loader: - kv 27: general.quantization_version u32 = 2 llama_model_loader: - type f32: 113 tensors llama_model_loader: - type f16: 56 tensors llama_model_loader: - type q8_0: 112 tensors llama_model_loader: - type q3_K: 169 tensors llama_model_loader: - type q4_K: 53 tensors llama_model_loader: - type q5_K: 59 tensors llama_model_loader: - type q6_K: 1 tensors llm_load_vocab: special tokens cache size = 259 llm_load_vocab: token to piece cache size = 0.1732 MB llm_load_print_meta: format = GGUF V3 (latest) llm_load_print_meta: arch = llama llm_load_print_meta: vocab type = SPM llm_load_print_meta: n_vocab = 32768 llm_load_print_meta: n_merges = 0 llm_load_print_meta: vocab_only = 0 llm_load_print_meta: n_ctx_train = 65536 llm_load_print_meta: n_embd = 6144 llm_load_print_meta: n_layer = 56 llm_load_print_meta: n_head = 48 llm_load_print_meta: n_head_kv = 8 llm_load_print_meta: n_rot = 128 llm_load_print_meta: n_swa = 0 llm_load_print_meta: n_embd_head_k = 128 llm_load_print_meta: n_embd_head_v = 128 llm_load_print_meta: n_gqa = 6 llm_load_print_meta: n_embd_k_gqa = 1024 llm_load_print_meta: n_embd_v_gqa = 1024 llm_load_print_meta: f_norm_eps = 0.0e+00 llm_load_print_meta: f_norm_rms_eps = 1.0e-05 llm_load_print_meta: f_clamp_kqv = 0.0e+00 llm_load_print_meta: f_max_alibi_bias = 0.0e+00 llm_load_print_meta: f_logit_scale = 0.0e+00 llm_load_print_meta: n_ff = 16384 llm_load_print_meta: n_expert = 8 llm_load_print_meta: n_expert_used = 2 llm_load_print_meta: causal attn = 1 llm_load_print_meta: pooling type = 0 llm_load_print_meta: rope type = 0 llm_load_print_meta: rope scaling = linear llm_load_print_meta: freq_base_train = 1000000.0 llm_load_print_meta: freq_scale_train = 1 llm_load_print_meta: n_ctx_orig_yarn = 65536 llm_load_print_meta: rope_finetuned = unknown llm_load_print_meta: ssm_d_conv = 0 llm_load_print_meta: ssm_d_inner = 0 llm_load_print_meta: ssm_d_state = 0 llm_load_print_meta: ssm_dt_rank = 0 llm_load_print_meta: model type = 8x22B llm_load_print_meta: model ftype = Q3_K - Medium llm_load_print_meta: model params = 140.63 B llm_load_print_meta: model size = 63.14 GiB (3.86 BPW) llm_load_print_meta: general.name = Mixtral-8x22B-Instruct-v0.1 llm_load_print_meta: BOS token = 1 '<s>' llm_load_print_meta: EOS token = 2 '</s>' llm_load_print_meta: UNK token = 0 '<unk>' llm_load_print_meta: LF token = 781 '<0x0A>' llm_load_print_meta: max token length = 48 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 A100 80GB PCIe, compute capability 8.0, VMM: yes time=2024-07-21T07:39:08.021Z level=INFO source=server.go:612 msg="waiting for server to become available" status="llm server loading model" llm_load_tensors: ggml ctx size = 0.51 MiB

操作系统

Linux

GPU

Nvidia

CPU

  • 无响应*

Ollama版本

2.6(docker镜像2.7)

sxpgvts3

sxpgvts32#

在使用"use_mmap":false,并设置OLLAMA_NUM_PARALLEL=1和OLLAMA_MAX_LOADED_MODELS=1之后的一些测试:
llm_load_tensors: offloading 56 repeating layers to GPU llm_load_tensors: offloading non-repeating layers to GPU llm_load_tensors: offloaded 57/57 layers to GPU llm_load_tensors: CUDA_Host buffer size = 82.50 MiB llm_load_tensors: CUDA0 buffer size = 64571.65 MiB time=2024-07-21T09:37:04.768Z level=DEBUG source=server.go:623 msg="model load progress 0.01" time=2024-07-21T09:37:13.306Z level=DEBUG source=server.go:623 msg="model load progress 0.02" time=2024-07-21T09:37:23.095Z level=DEBUG source=server.go:623 msg="model load progress 0.03" time=2024-07-21T09:37:31.133Z level=DEBUG source=server.go:623 msg="model load progress 0.04" time=2024-07-21T09:37:40.673Z level=DEBUG source=server.go:623 msg="model load progress 0.05" time=2024-07-21T09:37:47.954Z level=DEBUG source=server.go:623 msg="model load progress 0.06" time=2024-07-21T09:37:57.998Z level=DEBUG source=server.go:623 msg="model load progress 0.07" time=2024-07-21T09:38:11.808Z level=DEBUG source=server.go:623 msg="model load progress 0.08" time=2024-07-21T09:38:22.854Z level=DEBUG source=server.go:623 msg="model load progress 0.09" time=2024-07-21T09:38:27.123Z level=DEBUG source=server.go:623 msg="model load progress 0.10" time=2024-07-21T09:38:37.668Z level=DEBUG source=server.go:623 msg="model load progress 0.11" time=2024-07-21T09:38:43.695Z level=DEBUG source=server.go:623 msg="model load progress 0.12" time=2024-07-21T09:38:53.237Z level=DEBUG source=server.go:623 msg="model load progress 0.13" time=2024-07-21T09:39:02.527Z level=DEBUG source=server.go:623 msg="model load progress 0.14" time=2024-07-21T09:39:12.570Z level=DEBUG source=server.go:623 msg="model load progress 0.15" time=2024-07-21T09:39:19.097Z level=DEBUG source=server.go:623 msg="model load progress 0.16" time=2024-07-21T09:39:31.651Z level=DEBUG source=server.go:623 msg="model load progress 0.17" time=2024-07-21T09:39:43.452Z level=DEBUG source=server.go:623 msg="model load progress 0.18" time=2024-07-21T09:39:47.721Z level=DEBUG source=server.go:623 msg="model load progress 0.19" time=2024-07-21T09:39:58.514Z level=DEBUG source=server.go:623 msg="model load progress 0.20" time=2024-07-21T09:40:08.054Z level=DEBUG source=server.go:623 msg="model load progress 0.21" time=2024-07-21T09:40:13.077Z level=DEBUG source=server.go:623 msg="model load progress 0.22" time=2024-07-21T09:40:22.870Z level=DEBUG source=server.go:623 msg="model load progress 0.23" time=2024-07-21T09:40:35.676Z level=DEBUG source=server.go:623 msg="model load progress 0.24" time=2024-07-21T09:40:48.232Z level=DEBUG source=server.go:623 msg="model load progress 0.25" time=2024-07-21T09:40:53.505Z level=DEBUG source=server.go:623 msg="model load progress 0.26" time=2024-07-21T09:41:07.065Z level=DEBUG source=server.go:623 msg="model load progress 0.27" time=2024-07-21T09:41:18.362Z level=DEBUG source=server.go:623 msg="model load progress 0.28" time=2024-07-21T09:41:24.388Z level=DEBUG source=server.go:623 msg="model load progress 0.29" time=2024-07-21T09:41:35.181Z level=DEBUG source=server.go:623 msg="model load progress 0.30" time=2024-07-21T09:41:47.233Z level=DEBUG source=server.go:623 msg="model load progress 0.31"
所以,仅用4分钟就加载了31%的模型。此外,我在GPU指标中看到65GB正在被使用,似乎模型已经在GPU中加载,但不知何故Ollama认为只加载了31%?这是可能的吗?

5ssjco0h

5ssjco0h3#

我认为这意味着VRAM在加载开始时就被完全分配了,但需要时间将数据传输到已分配的内存中。模型是在本地磁盘还是网络磁盘上?

q0qdq0h2

q0qdq0h24#

感谢您的回答!这是一个网络磁盘。请从Azure Kubernetes Service中输入azurefile。我正在进行另一个测试,使用azure-csi-premium,因为它具有更好的性能。

mu0hgdu0

mu0hgdu05#

@rick-github,看起来在6分钟后,仅加载了use_mmap=True模型的51%。有关于如何提高加载性能的建议吗?另外,启用OLLAMA_KEEP_ALIVE时,这个模型是存储在哪里的?是在GPU还是RAM中?因为我们正在共享GPU,所以不能让所有模型都加载在那里,以便其他示例无法使用该GPU。

evrscar2

evrscar26#

我没有A100,也没有在云端运行,所以接下来的实验可能不相关。
我将mixtral:8x22b-instruct-v0.1-q3_K_M下载到一个NFS挂载的驱动器上,清空了页面缓存(echo 1 | sudo tee /proc/sys/vm/drop_caches),然后加载了模型(time curl localhost:11434/api/generate -d '{"model":"mixtral:8x22b-instruct-v0.1-q3_K_M"}')。第一次尝试在5分钟后超时。然而,在加载过程中,我可以看到页面缓存使用量增加(vmstat 5),当加载失败时暂停在37G。第二次尝试在4分41秒后成功,页面缓存达到65G。然后我卸载了模型(curl localhost:11434/api/generate -d '{"model":"mixtral:8x22b-instruct-v0.1-q3_K_M", "keep_alive":0}')并重新加载,这次花了4.2秒。
接着我将模型复制到本地磁盘,清空页面缓存,重启ollama以使用本地磁盘,并在11秒内加载了模型。
所以在我的情况下,页面缓存对于获得良好的加载时间至关重要。当加载失败时,大量数据仍在缓存中,因此后续尝试会成功。从你的日志来看,你的A100机器有约256G的空间用于缓存模型数据。然而,如果你在限制内存的环境中运行ollama(例如,在一个具有较小memory.limit_in_bytes的cgroup中,或者使用其他Azure功能),那么它可能会阻止ollama有效地使用页面缓存。在这种情况下,将模型复制到本地磁盘可能是一个解决方法。
至于OLLAMA_KEEP_ALIVE,是的,模型保留在GPU VRAM中。如果模型被卸载(无论是因为keep alive时间过期还是因为另一个模型正在加载),然后重新加载,页面缓存会加快加载时间。

pod7payv

pod7payv7#

感谢@rick-github。我不知道这是否相关,但由于资源节省的原因,我们有一个共享的文件系统。首先,我们在共享挂载路径(/root/.ollama/models)上运行一个容器来下载模型。然后我们执行ollama pull。接下来,我们有一个按需扩展和在空闲一段时间后缩小规模的无服务器示例。这个无服务器示例在之前从共享文件系统中拉取模型的容器中挂载共享文件系统。问题是,由于我们希望缩小GPU节点并节省成本,我们不能依赖本地文件系统,至少在不先将模型从共享文件系统中复制出来的情况下是这样

t1qtbnec

t1qtbnec8#

嗯,这意味着正在缩放的容器在缩小尺寸时会失去其页面缓存,因此当容器放大时,模型必须从共享文件系统中完整地拉取。如果你不能使用本地磁盘,那么你必须依赖于来自共享文件系统的快速网络,希望它能靠近你的服务容器。我不知道Azure是否有一些方法可以在服务容器上创建一个持久的sidecar,它只是大量的RAM,可以提供一个虚拟文件系统代理共享文件系统并充当页面缓存。当然,这是假设这确实是问题所在。

相关问题