Macbook Pro 16G 用 cpu 跑开源多模态大模型LLavA

news2025/3/1 10:24:28

文章目录

  • 1. 什么是LLaVA?
  • 2. LLaVA运行效果
  • 3. LLaVA 部署过程
    • 3.1 创建llava虚拟环境
    • 3.2 激活虚拟环境
    • 3.3 安装llama-cpp-python
    • 3.4 安装 llama-cpp-python服务器
    • 3.5 下载模型权重
    • 3.6 启动server服务
    • 3.7 在Pycharm中调用
  • 参考资料

摘要

本文介绍如何在macbook pro (M3)上利用llama-cpp-python库部署LLaVA。

1. 什么是LLaVA?

LLaVA(LLaMA-C++ for Vision and Audio)是一个综合性的多模态大模型(gpt4的开源平替),支持视觉和音频数据的处理和分析。LLaVA基于强大的LLaMA模型架构,结合视觉和音频处理技术,能够实现高效的图像描述、音频分析等功能。它适用于需要在本地环境中运行大模型的场景,尤其是对数据隐私和安全性要求较高的应用。

博主在MacBook Pro M3 16G上成功运行了LLaVA模型,使得能够在离线环境中运行LLaVA大模型,

2. LLaVA运行效果

让LLaVA描述图片

“Describe this image in detail and list the objects you see in the image.”

图 测试图像
图 cpu推理成本(mac内存16G)

LLaVA模型输出:

The scene features a beautiful dog standing alone on top of a lush green hill, taking up almost all the frame with its presence. It appears to be a hunting dog, possibly an English foxhound or a similar breed due to its unique coloration.
There is another smaller animal in the background, but it’s not as noticeable as the main subject - the dog on the hillside. The entire scene exudes serenity and tranquility, with the dog gazing at the camera while surrounded by a picturesque landscape.

对应的中文翻译:

场景中有一只美丽的狗单独站在郁郁葱葱的绿色山丘上,它几乎占据了整个画面的主要位置。它看起来像是一只猎犬,可能是英国猎狐犬或类似品种,因为它有着独特的毛色。在背景中还有另一只较小的动物,但它并不像主要对象——山坡上的狗那么显眼。整个场景散发出宁静祥和的氛围,狗望着镜头,被如画的景色所环绕。

3. LLaVA 部署过程

3.1 创建llava虚拟环境

使用conda创建一个新的虚拟环境:

conda create -n llava python=3.9.16 -y

3.2 激活虚拟环境

激活刚创建的虚拟环境:

conda activate llava

3.3 安装llama-cpp-python

使用pip安装llama-cpp-python:

CMAKE_ARGS="-DLLAMA_METAL=on" pip install -U llama-cpp-python --no-cache-dir

3.4 安装 llama-cpp-python服务器

注意:方括号有特殊含义,因此需要对其进行转义或者使用引号:

pip install 'llama-cpp-python[server]'

3.5 下载模型权重

在huggingface中下载模型权重。百度网盘 提取码: aw66

图 从huggingface中下载guff权重

记住模型权重的位置,待会儿要使用!

3.6 启动server服务

注意替换成自己下载的两个guff文件路径:

python -m llama_cpp.server --model /Users/ethan/miniconda3/envs/llava/ggml-model-q5_k.gguf --clip_model_path /Users/ethan/miniconda3/envs/llava/mmproj-model-f16.gguf --chat_format llava-1-5 --n_gpu_layers 1 --n_threads 8

启动成功后界面如下:

图 启动成功界面

本地服务器api访问地址:http://localhost:8000/v1

3.7 在Pycharm中调用

通过套用openai库的访问方式,所以先要安装openai库:

pip install openai

然后就可以用以下代码对本地的图片进行描述了:

from openai import OpenAI
import base64

def image_to_base64_with_prefix(local_path):
    with open(local_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
        return f"data:image/jpeg;base64,{encoded_string}"

image_path = '/Users/ethan/dog.jpeg' # 输入图片
image_data = image_to_base64_with_prefix(image_path)

client = OpenAI(base_url="http://localhost:8000/v1", api_key="sk-1234")
response = client.chat.completions.create(
    model="gpt-4-vision-preview",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": image_data,
                    },
                },
                {"type": "text", "text": "Describe this image in detail and list the objects you see in the image."},
            ],
        }
    ]
)

print(response.choices[0].message.content)

参考资料

How to Setup LLaVA with llama-cpp-python - Apple Silicon Supported

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1790964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GD32】从零开始学GD32单片机高级篇——SDIO外设详解(GD32F470ZGT6)

目录 简介总线拓扑总线操作“无响应” 和 “无数据” 操作多块读写操作数据流读写操作 总线协议命令响应R1/R1b (普通命令响应)R2 (CID, CSD 寄存器)R3 (OCR 寄存器)R4 (Fast IO)R4b(Fast IO)R5 (中断请求)R5b(中断请求)R6 (发布的…

揭秘数字工厂:如何运用AGV、LMS和WMS成为制造业的隐藏神器

揭秘数字工厂:如何运用AGV、LMS和WMS成为制造业的隐藏神器 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 &a…

当企业越来越难做,精益变革能带来什么改变?

随着技术的不断进步和消费者需求的日益多样化,传统的管理模式和生产方式已经难以适应时代的发展。越来越多的企业开始陷入困境,难以在激烈的市场竞争中立足。然而,正是在这样的背景下,精益变革应运而生,为企业带来了前…

【AI大模型】Transformers大模型库(四):AutoTokenizer

目录​​​​​​​ 一、引言 二、自动分词器(AutoTokenizer) 2.1 概述 2.2 主要特点 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服…

Spark SQL - 操作数据帧

本教程将通过一个具体的案例来演示如何在Spark SQL中操作数据帧。我们将从获取学生数据帧开始,包括两种方法:一是由数据集转换而来,二是直接读取文件生成数据帧。然后,我们将对数据帧进行各种操作,如投影、过滤、统计和…

数电实验中设计数字钟所用到的代码详细版(Verilog语言来实现)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、模6计数器的代码:二、模10计数器的代码三、模60计数器的代码四、模24计数器的代码五、显示控制电路模块代码六、1khz和250khz时钟输出实现的代码…

如何充分利用代理IP扩大网络接触面

目录 前言 第一部分:什么是代理IP? 第二部分:如何获取代理IP? 1. IP质量 2. 匿名性 3. 限制 第三部分:如何使用代理IP? 第四部分:如何充分利用代理IP? 总结: 前…

CentOS 9安装Kubernetes(k8s)集群

前言 1、版本说明 系统版本:CentOS 9 k8s版本:v1.29.5 docker版本:26.1.3 harbor:v2.9.4 2、提前准备好1台虚拟机,可以参考博客:Vmware 17安装 CentOS9 3、虚拟机提前安装好docker,参考博客&a…

Python 实现乘数加密法

乘数加密是简单代替密码的一种。乘数加密法脱胎于凯撒加密法,加密和解密符号设计把他们转换成数字,加上或者减去密钥,然后把新的数字转换回符号,当我们把加减密钥变成乘以密钥,就是乘法加密法。有关凯撒加密法可以看之前的文章《Python实现凯撒加解密》。 加密过程 乘数加…

二叉树练习题(2024/6/5)

1翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2: 输入:root [2,1,3] 输出:[2,3,1]…

电子电气架构 —— 刷写模式:并行刷写

电子电气架构 —— 刷写模式:并行刷写 我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将此…

C++ : 模板初阶

标题:C : 模板初阶 水墨不写bug 正文开始: C语言的问题 : 写不完的swap函数 在学习C语言时,我们有一个经常使用的函数swap函数,它可以将两个对象的值交换。 我们通常这样实现它: void swap(int t1,int t2)…

【网络协议 | HTTP】HTTP总结与全梳理(一) —— HTTP协议超详细教程

🔥博客简介:开了几个专栏,针对 Linux 和 rtos 系统,嵌入式开发和音视频开发,结合多年工作经验,跟大家分享交流嵌入式软硬件技术、音视频技术的干货。   ✍️系列专栏:C/C、Linux、rtos、嵌入式…

【微信小程序】模板语法

数据绑定 对应页面的 js 文件中 定义数据到 data 中: 在页面中使用 {{}} 语法直接使用: 事件绑定 事件触发 常用事件: 事件对象的属性列表(事件回调触发,会收到一个事件对象 event,它的详细属性如下&…

28 hive安装-本地模式

1.安装mysql(参考文章:centos7.8安装Mysql8.4-CSDN博客) 2.将mysql驱动拷贝到/opt/module/hive/lib目录下 (直接windows通过finalShell上传) 3./opt/module/hive/conf目录下新建hive-site.xml文件,进行配置…

InvokeAI 最新版安装指南

由于stable diffusion webui不太好安装,或者你使用一些SD整合包,可免除复杂安装,但你认为SD的操作界面太复杂,所以今天介绍一款支持新手一键安装的Stable Diffusion工具包InvokeAI。 1.什么是InvokeAI InvokeAI 是一个创新的开源…

点量3D实时云渲染平台:三步轻松实现云流化

3D实时云渲染技术通过在云端执行3D渲染任务,并将渲染结果实时传送到用户端,它不仅降低了用户的硬件要求,还提高了数据处理的安全性和效率,为用户提供了高效的体验。 可以通过下载“点量云流服务单机版”进行低延时、高画质、沉浸…

vivado BEL

描述 通常,BEL或基本元素对应于设计的网表视图中的叶单元。 BEL是目标Xilinx FPGA上的设备对象,用于放置或映射基本网表 触发器、LUT和进位逻辑等对象。 BEL在SITE对象(如SLICE和IO块)中的设备上分组在一起 (IOB&#…

kafka-消费者服务搭建配置简单消费(SpringBoot整合Kafka)

文章目录 1、使用efak 创建 主题 my_topic1 并建立6个分区并给每个分区建立3个副本2、创建生产者发送消息3、application.yml配置4、创建消费者监听器5、创建SpringBoot启动类6、屏蔽 kafka debug 日志 logback.xml7、引入spring-kafka依赖 1、使用efak 创建 主题 my_topic1 并…

VS2022,lib调用dll工程的一个函数

lib工程本身是一个静态库工程,没有链接器设置。然而,我们依然可以在lib工程中调用DLL工程中的函数,只需要确保头文件正确导入,并在最终使用lib的可执行文件项目中正确链接DLL的.lib文件。下面是一个详细的步骤说明: 假…