基于llama.cpp学习开源LLM本地部署

这篇博客介绍了开源项目llama.cpp,它是一个C++实现的大模型框架,支持在MacBook上运行4位整数量化的LLaMA模型。文章详细阐述了llama.cpp的下载、编译(包括CPU和GPU版本,如OpenBLAS、cuBLAS)、模型量化过程以及如何验证模型,并提到了API调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

一、llama.cpp是什么?

二、使用步骤

1.下载编译llama.cpp

2. 普通编译

3. BLAS编译

3.1、OpenBLAS 编译 CPU版

3.2 cuBLAS 编译GPU版本

4. 模型量化

4.1、模型文件下载:

4.2、安装python 依赖库。

4.3、模型转换(把7B 模型转换成 ggml FP16 )

4.4、对FP16模型进行4-bit 进一步量化。(使用上面编译生成的 ./quantize)

5、模型验证

6、API 方式调用

三、总结


前言

 LLM大模型学的时间也有大半年了,相关的模型、工具、技术和知识等也更新比较快。很多东西之前都没有留痕,回头一看,学了个寂寞。


一、llama.cpp是什么?

llama.cpp 的主要目标是在MacBook上使用 4 位整数量化运行 LLaMA 模型。

  • Plain C/C++ implementation without dependencies
  • Apple silicon first-class citizen - optimized via ARM NEON, Accelerate and Metal frameworks
  • AVX, AVX2 and AVX512 support for x86 architectures
  • Mixed F16 / F32 precision
  • 2-bit, 3-bit, 4-bit, 5-bit, 6-bit and 8-bit integer quantization support
  • CUDA, Metal and OpenCL GPU backend support

总之一句话:llama.cpp 一个C++编写的轻量级开源大模型框架,可以支持在消费级普通设备上本地部署运行大模型。基本上大部分开源大模型他都支持。

注:之前老版本转换的模型文件扩展名都是.bin,最新的模型文件都是.gguf。

二、使用步骤

1.下载编译llama.cpp

https://github.com/ggerganov/llama.cpp.git  

llama.cpp 编译分为CPU和GPU两种,但编译方式有好几种:普通编译,Metal 编译,MPI编译,BLAS编译。 本文只介绍少普通编译和BLAS编译。其他详见llama.cpp

2. 普通编译

默认编译出来的CPU版本。

  • 使用make构建使用下面命令:

    cd llama.cpp
    make

运行如下:

生成了以下:

注:如果失败了,使用make clean 清理一下,重新编译。

  • 使用Cmake构建如下:

    cd llama.cpp
    mkdir build
    cd build
    cmake ..
    cmake --build . --config Release

3. BLAS编译

使用 BLAS 可能会提高使用大于 32(默认值为 512)的批处理进行提示处理时的性能。支持纯 CPU BLAS 实现不会影响正常生成性能。我们可能会看到涉及 GPU 的 BLAS 实现(例如 cuBLAS、hipBLAS 和 CLBlast)的生成性能改进。目前有几种不同的 BLAS 实现可供构建和使用。

### 解决基于 llama.cpp 本地部署 DeepSeek-R1 模型时缺少上传附件功能的问题 为了使 Windows 7 用户能够成功部署并利用 DeepSeek-R1 模型,教程已经针对该环境进行了特定调整[^1]。然而,在实际应用过程中遇到了缺乏文件上传能力这一挑战。 #### 文件上传机制分析 通常情况下,Llama.cpp 并不自带图形界面或直接支持文件上传的功能。这是因为 Llama.cpp 主要专注于提供推理服务而非构建完整的应用程序框架。因此,当需要实现文件上传特性时,则需额外集成其他组件来补充此功能。 对于希望增加文件上传特性的用户来说,可以考虑采用以下几种方法: - **通过 Web 接口间接处理** 构建一个简单的 HTTP/HTTPS 服务器作为前端接口,允许用户提交文件到指定位置。Python 的 Flask 或 FastAPI 是两个轻量级的选择,易于配置且能快速搭建起所需的服务端逻辑。 ```python import os from flask import Flask, request, send_from_directory app = Flask(__name__) UPLOAD_FOLDER = './uploads' if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER) @app.route('/upload', methods=['POST']) def upload_file(): if 'file' not in request.files: return "No file part", 400 file = request.files['file'] if file.filename == '': return "No selected file", 400 filename = secure_filename(file.filename) filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(filepath) # 这里可以根据需求调用 llm 处理函数 process_llm_with_uploaded_file(filepath) return f"File {filename} has been uploaded successfully.", 200 def process_llm_with_uploaded_file(path_to_file): pass # 实现具体的LLM处理流程 if __name__ == "__main__": app.run(debug=True) ``` - **命令行参数传递** 如果应用场景较为简单,也可以简化设计思路——即让用户先手动将待处理的数据放置于预设目录下,再启动 Llama.cpp 应用程序并通过命令行参数告知其输入路径。这种方式虽然不够直观友好,但对于某些场景可能是最简便有效的解决方案之一。 - **第三方库辅助开发** 利用 Python 中诸如 `streamlit` 等可视化工具包创建交互式的 GUI 页面,不仅可以让整个过程更加人性化,同时也更容易满足不同层次用户的操作习惯。Streamlit 提供了便捷的方式用于展示模型预测结果以及接收来自用户的反馈信息。 综上所述,尽管原生的 Llama.cpp 不具备内置的文件管理能力,但借助外部技术和开源项目完全可以克服这个障碍,并为用户提供满意的体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值