from llama_cpp import Llama
# 加载 .gguf 格式的模型
model = Llama(model_path='/home/lqsilicon/Public/xgx/llama.cpp/models/llama-2-7b-chat.Q4_0.gguf')
# 输入问题
question = "What is the capital of France?"
response = model(question)
# 提取生成的文本
generated_text = response['choices'][0]['text']
# 打印生成的答案
print(generated_text)
注意 回答中的tokens的数量可能会被限制造成回答不全 可以手动进行设置
response = model(question,max_tokens=4096 )
结果为
/home/lqsilicon/Workspace/llama32_env/bin/python3 /tmp/pycharm_project_676/test.py
llama_model_loader: loaded meta data with 19 key-value pairs and 291 tensors from /home/lqsilicon/Public/xgx/llama.cpp/models/llama-2-7b-chat.Q4_0.gguf (version GGUF V2)
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 = LLaMA v2
llama_model_loader: - kv 2: llama.context_length u32 = 4096
llama_model_loader: - kv 3: llama.embedding_length u32 = 4096
llama_model_loader: - kv 4: llama.block_count u32 = 32
llama_model_loader: - kv 5: llama.feed_forward_length u32 = 11008
llama_model_loader: - kv 6: llama.rope.dimension_count u32 = 128
llama_model_loader: - kv 7: llama.attention.head_count u32 = 32
llama_model_loader: - kv 8: llama.attention.head_count_kv u32 = 32
llama_model_loader: - kv 9: llama.attention.layer_norm_rms_epsilon f32 = 0.000001
llama_model_loader: - kv 10: general.file_type u32 = 2
llama_model_loader: - kv 11: tokenizer.ggml.model str = llama
llama_model_loader: - kv 12: tokenizer.ggml.tokens arr[str,32000] = ["<unk>", "<s>", "</s>", "<0x00>", "<...
llama_model_loader: - kv 13: tokenizer.ggml.scores arr[f32,32000] = [0.000000, 0.000000, 0.000000, 0.0000...
llama_model_loader: - kv 14: tokenizer.ggml.token_type arr[i32,32000] = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...
llama_model_loader: - kv 15: tokenizer.ggml.bos_token_id u32 = 1
llama_model_loader: - kv 16: tokenizer.ggml.eos_token_id u32 = 2
llama_model_loader: - kv 17: tokenizer.ggml.unknown_token_id u32 = 0
llama_model_loader: - kv 18: general.quantization_version u32 = 2
llama_model_loader: - type f32: 65 tensors
llama_model_loader: - type q4_0: 225 tensors
llama_model_loader: - type q6_K: 1 tensors
llm_load_vocab: control token: 2 '</s>' is not marked as EOG
llm_load_vocab: control token: 1 '<s>' is not marked as EOG
llm_load_vocab: special_eos_id is not in special_eog_ids - the tokenizer config may be incorrect
llm_load_vocab: special tokens cache size = 3
llm_load_vocab: token to piece cache size = 0.1684 MB
llm_load_print_meta: format = GGUF V2
llm_load_print_meta: arch = llama
llm_load_print_meta: vocab type = SPM
llm_load_print_meta: n_vocab = 32000
llm_load_print_meta: n_merges = 0
llm_load_print_meta: vocab_only = 0
llm_load_print_meta: n_ctx_train = 4096
llm_load_print_meta: n_embd = 4096
llm_load_print_meta: n_layer = 32
llm_load_print_meta: n_head = 32
llm_load_print_meta: n_head_kv = 32
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 = 1
llm_load_print_meta: n_embd_k_gqa = 4096
llm_load_print_meta: n_embd_v_gqa = 4096
llm_load_print_meta: f_norm_eps = 0.0e+00
llm_load_print_meta: f_norm_rms_eps = 1.0e-06
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 = 11008
llm_load_print_meta: n_expert = 0
llm_load_print_meta: n_expert_used = 0
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 = 10000.0
llm_load_print_meta: freq_scale_train = 1
llm_load_print_meta: n_ctx_orig_yarn = 4096
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: ssm_dt_b_c_rms = 0
llm_load_print_meta: model type = 7B
llm_load_print_meta: model ftype = Q4_0
llm_load_print_meta: model params = 6.74 B
llm_load_print_meta: model size = 3.56 GiB (4.54 BPW)
llm_load_print_meta: general.name = LLaMA v2
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 = 13 '<0x0A>'
llm_load_print_meta: EOG token = 2 '</s>'
llm_load_print_meta: max token length = 48
llm_load_tensors: tensor 'token_embd.weight' (q4_0) (and 290 others) cannot be used with preferred buffer type CPU_AARCH64, using CPU instead
llm_load_tensors: CPU_Mapped model buffer size = 3647.87 MiB
..................................................................................................
llama_new_context_with_model: n_seq_max = 1
llama_new_context_with_model: n_ctx = 512
llama_new_context_with_model: n_ctx_per_seq = 512
llama_new_context_with_model: n_batch = 512
llama_new_context_with_model: n_ubatch = 512
llama_new_context_with_model: flash_attn = 0
llama_new_context_with_model: freq_base = 10000.0
llama_new_context_with_model: freq_scale = 1
llama_new_context_with_model: n_ctx_per_seq (512) < n_ctx_train (4096) -- the full capacity of the model will not be utilized
llama_kv_cache_init: CPU KV buffer size = 256.00 MiB
llama_new_context_with_model: KV self size = 256.00 MiB, K (f16): 128.00 MiB, V (f16): 128.00 MiB
llama_new_context_with_model: CPU output buffer size = 0.12 MiB
llama_new_context_with_model: CPU compute buffer size = 70.50 MiB
llama_new_context_with_model: graph nodes = 1030
llama_new_context_with_model: graph splits = 1
AVX = 1 | AVX_VNNI = 0 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | AVX512_BF16 = 0 | AMX_INT8 = 0 | FMA = 1 | NEON = 0 | SVE = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | RISCV_VECT = 0 | WASM_SIMD = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | MATMUL_INT8 = 0 | LLAMAFILE = 1 |
Model metadata: {'tokenizer.ggml.unknown_token_id': '0', 'tokenizer.ggml.eos_token_id': '2', 'general.architecture': 'llama', 'llama.context_length': '4096', 'general.name': 'LLaMA v2', 'llama.embedding_length': '4096', 'llama.feed_forward_length': '11008', 'llama.attention.layer_norm_rms_epsilon': '0.000001', 'llama.rope.dimension_count': '128', 'llama.attention.head_count': '32', 'tokenizer.ggml.bos_token_id': '1', 'llama.block_count': '32', 'llama.attention.head_count_kv': '32', 'general.quantization_version': '2', 'tokenizer.ggml.model': 'llama', 'general.file_type': '2'}
Using fallback chat format: llama-2
llama_perf_context_print: load time = 2867.75 ms
llama_perf_context_print: prompt eval time = 0.00 ms / 8 tokens ( 0.00 ms per token, inf tokens per second)
llama_perf_context_print: eval time = 0.00 ms / 13 runs ( 0.00 ms per token, inf tokens per second)
llama_perf_context_print: total time = 4797.69 ms / 21 tokens
();`
Answer: The capital of France is Paris.
GGUF (Generic GPU Unified Format)
GGUF(Generic GPU Unified Format)是一种用于深度学习模型的数据存储和交换格式,旨在支持高效的模型加载和推理操作。该格式由 llama.cpp
等推理框架使用,特别适用于量化和优化后的模型。GGUF 格式的主要特点包括:
-
高效的存储和加载: GGUF 格式专为大规模深度学习模型设计,可以存储包括权重、配置、词汇表等在内的完整模型数据,优化了模型加载速度。
-
量化支持: GGUF 格式通常支持模型的量化(如
Q4_0
、Q6_K
等量化级别),这意味着它能够在保持性能的前提下,减小模型的体积和内存占用,适合推理时使用。 -
适应多种硬件: GGUF 格式支持跨平台的模型推理,能够在多种硬件上运行,包括 CPU、GPU 和其他加速设备。这使得它成为一个广泛应用于推理场景的统一格式。
-
支持多种深度学习框架: GGUF 格式不依赖于特定的深度学习框架,能够支持从多个框架(如 PyTorch、TensorFlow 等)转换过来的模型。其主要目的是为推理过程提供统一、简洁的接口,减少框架和硬件之间的兼容性问题。
主要优势:
- 高效的内存管理:通过量化和优化,GGUF 格式减少了内存占用和计算开销。
- 统一格式:支持从不同训练框架导出的模型,兼容性强。
- 推理性能提升:优化了推理流程,特别是在量化后的版本中,性能和速度有显著提升。
常见用途:
- 部署在资源受限的设备上:例如嵌入式设备、移动设备等。
- 大规模推理:在云端或本地服务器上进行高效推理任务。
- 优化后的深度学习模型:尤其是经过量化、剪枝等优化后的模型,适合在生产环境中部署。
llama.cpp
llama.cpp
是一个高效的 C++ 实现,专门用于运行 LLaMA(Large Language Model Meta AI)系列模型,特别是针对 LLaMA v2 模型的优化。llama.cpp
提供了对 LLaMA 模型的推理支持,并提供了许多优化和扩展功能,使得 LLaMA 模型能够在更广泛的硬件平台上进行高效推理。
主要特点:
-
高效的推理框架:
llama.cpp
提供了一种轻量级的推理框架,专门用于加载和执行 LLaMA 模型,能够高效地在不同硬件上运行,包括 CPU 和 GPU。它支持高效的内存管理,优化了计算和数据流的处理。 -
支持 GGUF 格式:
llama.cpp
支持使用 GGUF 格式的模型文件,这意味着用户可以将原本训练在 PyTorch 或 TensorFlow 中的 LLaMA 模型转换为 GGUF 格式,并在llama.cpp
中进行高效推理。 -
量化支持:
llama.cpp
支持对 LLaMA 模型的量化,包括常见的量化格式,如Q4_0
、Q6_K
等。这些量化格式能显著减小模型的内存占用,使其适应低功耗设备和边缘设备。 -
灵活的模型加载:
llama.cpp
允许用户灵活地加载和切换模型,支持不同版本的 LLaMA 模型。用户可以根据硬件资源和计算需求选择合适的模型版本。 -
支持批量推理:
llama.cpp
提供了批量推理的支持,使得模型推理可以并行处理多个输入,提高推理效率,特别适合在大规模并行任务中使用。
主要优势:
- 高效性:通过 C++ 实现,
llama.cpp
提供了快速的模型加载和推理性能,适合生产环境部署。 - 多平台支持:不仅支持常规的 CPU,还能支持 GPU 和其他硬件加速设备。
- 量化和优化:支持量化后的模型,能够在有限的硬件资源上进行高效推理。
- 易于集成:提供了简洁的接口,可以方便地与其他应用集成,支持多种输入输出格式。
典型应用:
- 大规模推理任务:可以用于云端服务器、大规模数据中心等环境,支持并发处理多个推理请求。
- 低资源设备:适用于嵌入式设备、移动端和其他资源受限的设备,能够实现较高效的推理。
- 量化模型部署:优化后的量化模型可以在不牺牲性能的前提下,减少内存和计算开销。
GGUF 和 llama.cpp 之间的关系
-
GGUF作为存储格式:
- GGUF 是一种用于存储和交换大规模深度学习模型的数据格式。
llama.cpp
支持从 GGUF 格式加载 LLaMA 模型,能够高效地利用该格式提供的优化(如量化)来提升推理性能。
- GGUF 是一种用于存储和交换大规模深度学习模型的数据格式。
-
转换和兼容性:
- 你可以使用
llama.cpp
提供的转换工具,将 PyTorch 或 TensorFlow 格式的 LLaMA 模型转换为 GGUF 格式。这使得用户能够轻松将训练好的模型转换为llama.cpp
所支持的格式,并进行推理。
- 你可以使用
-
模型加载与推理:
- 使用
llama.cpp
加载 GGUF 格式的模型时,能够充分利用其内存和计算优化,使得在不同硬件平台上的推理更加高效。
- 使用
总结
- GGUF 是一种用于存储和交换深度学习模型的数据格式,特别适合大规模模型,支持量化优化,能够提升推理效率。
- llama.cpp 是一个高效的 C++ 推理框架,专为 LLaMA 模型设计,支持 GGUF 格式的模型,可以高效地执行模型推理,支持不同硬件平台和量化模型。
通过将 LLaMA 模型转换为 GGUF 格式,并使用 llama.cpp
进行推理,用户能够在不同硬件和资源环境中高效地执行大规模语言模型的推理任务。