llama.cpp Vulkan后端无法加载模型,vk::Device::createComputePipeline:错误未知,

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

我正在尝试在x86平台上交叉编译llama.cpp并将其移植到运行在Android设备(Adreno 740)上。在Android设备上,Vulkan可以识别我的设备(GPU),但是有一个负载模型错误。
我已经检查了模型路径,以确保模型存在于路径下。它具有成功读取的条件。我还尝试了以下模型:
llama-2-13b-chat.Q2_K.gguf
llama-2-13b-chat.Q5_K_S.gguf
llama-2-7b-chat.Q2_K.gguf
stories260K.gguf
我构建llama.cpp的方式:
cmake .. -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_NATIVE_API_LEVEL=33 -DLLAMA_VULKAN=1 -DCMAKE_C_FLAGS=-march=armv8.4a+dotprod+i8mm -DVulkan_INCLUDE_DIR=/home/smc/Downloads/Vulkan-Hpp-1.3.237 -DLLAMA_VULKAN_CHECK_RESULTS=1 -DLLAMA_VULKAN_DEBUG=1 -DLLAMA_VULKAN_VALIDATE=1 -DLLAMA_VULKAN_RUN_TESTS=1
make -j10
我运行main.out的方式:
通过scp将bin文件夹传输到您的Android设备上的/data/local/tmp/llama目录
./bin/main -t 8 -m /data/local/tmp/stories260K.gguf --color -c 2048 -ngl 2 --temp 0.7 -n 128 -p "One day, Lily met"
uname -a
Linux localhost 5.15.78-android13-8-g60893c660740-dirty #1 SMP PREEMPT Fri Jul 7 18:13:57 UTC 2023 aarch64 Toybox
GPU信息
Adreno (TM) 740
我想了解如何解决这个问题?有什么建议吗?非常感谢,期待您的回复

66bbxpm5

66bbxpm51#

翻译结果:

详细信息:
/data/local/tmp/llama-vulkan-test # ls
bin
/data/local/tmp/llama-vulkan-test # chmod +x ./*
tmp/stories260K.gguf --color -c 2048 -ngl 2 --temp 0.7 -n 128 -p "One day, Lily met" < Log
开始日志:main = build = 3 (de46a4b)
main: built with Android (11349228, +pgo, +bolt, +lto, -mlgo, based on r487747e) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362) for x86_64-unknown-linux-gnu
main: seed = 1713873819
llama_model_loader: loaded meta data with 19 key-value pairs and 48 tensors from /data/local/tmp/stories260K.gguf (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: tokenizer.ggml.tokens arr[str,512] = ["", "", "", "<0x00>", "<...
llma_load_vocab: bad special token: 'tokenizer.ggml.seperator_token_id' = 4294967295d, using default id -1
llma_load_vocab: bad special token: 'tokenizer.ggml.padding_token_id' = 4294967295d, using default id -1
llma_load_vocab: special tokens definition check successful ( 259/512).
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 = 512
llm_load_print_meta: n_merges = 0
llm_load_print_meta: n_ctx_train = 128
llm_load_print_meta: n_embd = 64
llm_load_print_meta: n_head = 8
llm_load_print_meta: n_head_kv = 4
llm_load_print_meta: n_layer = 5
llm_load_print_meta: n_rot = 8
llm_load_print_meta: n_embd_k = 8
llm_load_print_meta: n
这是一段关于创建GPU矩阵乘法流水线的代码,包括了不同参数组合的函数调用。
这是一段计算机程序的错误日志,主要涉及到模型加载失败、计算管线创建失败等问题。以下是翻译后的中文文本:

无法加载模型:vk::Device::createComputePipeline: 错误Unknown
无法从文件加载模型
无法从GPT参数初始化
主程序:无法加载模型
销毁设备 Adreno (TM) 740
销毁计算管线 matmul_f32_l
销毁计算管线 matmul_f32_m
销毁计算管线 matmul_f32_s
销毁计算管线 matmul_f32_aligned_l
销毁计算管线 matmul_f32_aligned_m
销毁计算管线 matmul_f32_aligned_s
销毁计算管线 matmul_f16_l
销毁计算管线 matmul_f16_m
销毁计算管线 matmul_f16_s
销毁计算管线 matmul_f16_aligned_l
销毁计算管线 matmul_f16_aligned_m
销毁计算管线 matmul_f16_aligned_s
销毁计算管线 matmul_f16_f32_l
销毁计算管线 matmul_f16_f32_m
销毁计算管线 matmul_f16_f32_s
销毁计算管线 matmul_f16_f32_aligned_l
销毁计算管线 matmul_f16_f32_aligned_m
销毁计算管线 matmul_f16_f32_aligned_s
销毁计算管线 matmul_q4_0_f32_l
销毁计算管线 matmul_q4_0_f32_m
销毁计算管线 matmul_q4_0_f32_s
销毁计算管线 matmul_q4_0_f32_aligned_l
销毁计算管线 matmul_q4_0_f32_aligned_m
销毁计算管线 matmul_q4_0_f32_aligned_s
销毁计算管线 matmul_q5_0_f32_l
销毁计算管线 matmul_q5_0_f32_m
销毁计算管线 matmul_q5_0_f32_s
销毁计算管线 matmul_q5_0_f32_aligned

cotxawn7

cotxawn72#

你尝试过构建llama.android示例应用程序吗?

a0x5cqrl

a0x5cqrl3#

你尝试过构建llama.android示例应用吗?

@smilingOrange 我没有,因为我没有使用termux和Android studio。我使用NDK交叉编译llama.cpp,然后通过scp将相应的产品传输到我的Android设备(高通GPU),我已经证明了这一点是有效的。因为当我不使用vulkan后端而是使用blast进行交叉编译时,我几乎无法运行Q2量化的大型模型。但是由于我对vulkan不太熟悉,我不确定为什么在使用vulkan后端进行交叉编译时,vulkan可以识别到我设备中的GPU,但无法加载模型。我很好奇如何解决这个问题,如果你有任何想法,请随时告诉我。

klr1opcd

klr1opcd4#

在我的调试过程中,发现Q4_K和Q5_K的计算着色器在高通骁龙上不受支持。如果去掉这些着色器,程序仍然可以运行。

更多信息:
失败的着色器有:
matmul_q4_k_f32_l
matmul_q4_k_f32_m
matmul_q4_k_f32_s
matmul_q4_k_f32_aligned_l
matmul_q4_k_f32_aligned_m
matmul_q4_k_f32_aligned_e
matmul_q5_k_f32_l
matmul_q5_k_f32_m
matmul_q5_k_f32_s
matmul_q5_k_f32_aligned_l
matmul_q5_k_f32_aligned_m
matmul_q5_k_f32_aligned_s
dequant_q4_K
dequant_q5_K

t9eec4r0

t9eec4r05#

使用llama.cpp的Vulkan后端与Adreno GPU一起使用可能会出现问题。
参考:#5186(评论)

相关问题