当前位置: 首页 > news >正文

一文学会,利用LLaMA 3.2打造能“识图断字”的个人AI助理

人工智能最直接也是最普及的应用之一肯定是聊天机器人,或者叫个人 AI 助理。尽管聊天机器人以各种形式存在了30年,但在过去两年中,这些个人AI助理才真正成为热门应用。它们已经从前沿技术范畴落地到生活的各个方面、社交场合和商业场景中。

虽然它们接入门槛低且易于使用,你打开个网页或 App 就能使用,但许多最好的聊天机器人都是闭源代码。这些平台有自己的好处,比如能上网搜东西、有个性化的用户资料来跟聊天机器人互动,还能用上现在最好的大语言模型。然而,开源社区的技术发展始终与这些闭源产品齐头并进,开源工具也有自己的优势,例如支持灵活的定制化、可微调和与其他技术进行集成。

在本文中,我们将介绍最新和最伟大的开源模型之一:LLaMA 3.2。它拥有11B参数、计算机视觉算法,在低成本的同时,与GPT-4o mini和Claude 3 - Haiku在多种视觉指令调整基准上的性能相当。此外,它们的轻量级2B参数模型与SOTA边缘模型如PHI mini it和Gemma 2b的性能相当。我们将从这些模型的特殊之处开始介绍。之后,我们将展示如何利用这个强大的开源模型创建个人 AI 助理聊天机器人。这个个人AI助理可以帮助你处理从写作、编程到翻译的任何事情,并且能够像处理文本一样轻松地处理图像数据。

准备工作

为了跟随本文后半部分的教程,你需要有一定的Python编程经验,以及对深度学习的初步理解。同时我们在带领你一步步实践的同时,也默认你有一个性能足够的机器以及合适的 GPU,可以运行我们提供的代码。

如果你还没有合适的 GPU,我们建议你可以先通过云服务获取。毕竟GPU 云服务会比自己购买 GPU 更便宜,而且还能灵活配置。不用担心,我们会在教程中给你提供低成本获取 H100 GPU 的方法。

先了解一下 LLaMa 3.2 模型

LLaMA 3.2 模型套件包括四个主要模型:一个小巧的11B参数的视觉语言模型,一个更大的90B参数的视觉语言模型,还有两个轻量级的纯文本模型(分别为1B和3B参数)。前者能够分析和理解文字和图片信息,而后者则专注于处理文字内容。每个模型在其所属类别中都展现了顶级或接近顶级的表现。

图片:多模态模型效果

LLama 官方认为他们的模型与GPT-4o Mini和Claude 3 - Haiku等知名基础模型的性能相当。我们从上面的图表中可以看到,得到了广泛的视觉语言任务基准测试的支持,包括数学和解决问题的任务。特别有趣的地方在于11B模型似乎相对较强,因为它展示了在较低端的GPU甚至相对较差的硬件上也能运行这些高性能LLMs。这意味着我们可以期待这些模型在使用时,能有与顶级封闭源代码模型相近的性能。

图片:端侧模型效果

在第二个图表中,我们可以看到轻量级、仅文本模型与顶级竞争模型PHI Mini IT和Gemma 2b的报告比较。在所有基准测试中,轻量级模型的表现都优于或接近这些知名基础模型。这表明LLaMA 3.2模型可以在较弱的处理器上运行,甚至有可能在移动设备上生成文本。

正如我们所看到的,模型套件的两个类别都与同等规模的顶级模型的对比,甚至可以超越一些较为前沿的封闭的大语言模型。

LLaMA 3.2的优势和劣势

当我们讨论 LLaMA 3.2 的优点和缺点时,首先需要明白的是,尽管它不像很多闭源工具那样自带各种功能,但它可以以闭源模型无法实现的方式进行定制。比如,保存了用户信息和个人设置的用户档案、网络连接或搜索功能,以及为添加检索增强生成(RAG)等特性设计的低代码插件,这些都不会自动集成到 LLaMA 3.2 中,除非我们自己动手添加。

既然这样,让我们来看看 LLaMA 3.2 相对于其他现有模型的主要优势有哪些:

优势

  • 微调与LoRAs(低秩适应):能够根据需求定制现有模型,这一直是开源模型的最大优势。通过这些技术,我们可以轻松地将已经开发得很出色的大型语言模型(LLMs)进一步专业化,无论是制作客户服务聊天机器人还是数学助手,可能性几乎是无穷无尽的。
  • 顶级性能:LLaMA 3.2 的表现与所有尺寸的最佳模型相当,包括那些强大的闭源模型。
  • 自定义集成:像 LLaMA 3.2 这样的模型很容易集成到各种现有的应用程序中,无需构建或使用可能既昂贵又难用的API客户端。
  • 视觉语言分析:LLaMA 在理解和处理图像数据方面给我们留下了深刻印象。它可以完成从光学字符识别(OCR)、解释到目标检测等各种任务,尽管这些功能最终都会以文本形式输出。
  • 摘要和重写:正如官方发布博客所展示的,这些模型在多种文本任务上表现出色,尤其在摘要和重写任务上更为突出。
  • 成本:LLaMA 3.2 不仅可以免费使用(非商业用途)和下载,而且是其类别中最高效的模型之一。即使是轻量级模型也可以在手持设备等性能较弱的处理器上运行。

不足

  • 达到顶尖表现:尽管有了很大的进步,LLaMA 3.2 仍然没有达到像 Claude Sonnet 或 GPT-4 这样顶级 GPT 模型的水平。
  • 网络访问能力:如果不做大量的开发工作,这些模型无法上网或学习新信息,除非有像 RAG 这样的技术来支持。这是当前许多顶级模型,如 Anthropic 的模型的一个重要优势。
  • 许可:需要注意的是,与一些完全开源的模型不同,LLaMA 的模型只允许非商业用途。

现在我们了解了这个模型的优点所在,接下来就展示如何运行演示。这将帮助我们在创建个人助理工具的过程中深入了解模型。

在H100 GPU 服务器上启动LLaMA 3.2

对于这个演示,我们将借鉴HuggingFace Projects团队的工作。他们在网站上发布了一个真正完美的Gradio演示,使用LLaMA 3.2 11B视觉模型。在继续之前,请务必查看他们的之前做的演示。

为了调整应用,我们将使用最新发布的 DigitalOcean GPU 云服务器实例。如果你想跟着操作,建议按照我们往期写的教程创建一个新的带有 Jupyter Notebook 的 GPU 实例。我们将在 GPU 实例上运行的 Jupyter Notebook 中执行接下来要展示的代码,通过 Visual Studio Code 的 SSH 主机功能,在本地浏览器中访问。

当你的GPU 服务器启动并运行起来,Jupyter Notebook 也已经在运行,并且你能够在本地浏览器中访问到它之后,就可以继续下一步了。

LLaMA 3.2个人助理应用程序分解

HuggingFace的LLaMA 3.2应用程序本身就很出色。它让你可以与一个强大的聊天机器人聊天,能够与我们上传的任何图像互动。这本身就允许我们执行复杂的操作,如目标内容识别或目标检测甚至阅读。此外,由于它是用Gradio编写的,因此完全支持FastAPI,可以直接使用它创建的API端点与应用程序互动。

查看下面的代码块,其中包含了整个应用程序,为了节省空间做了一些小调整。

from transformers import MllamaForConditionalGeneration, AutoProcessor, TextIteratorStreamer
from PIL import Image
import requests
import torch
from threading import Thread
import gradio as gr
from gradio import FileData
import time
import spaces
ckpt = "meta-llama/Llama-3.2-11B-Vision-Instruct"
model = MllamaForConditionalGeneration.from_pretrained(ckpt,torch_dtype=torch.bfloat16).to("cuda")
processor = AutoProcessor.from_pretrained(ckpt)@spaces.GPU
def bot_streaming(message, history, max_new_tokens=250):txt = message["text"]ext_buffer = f"{txt}"messages= [] images = []for i, msg in enumerate(history): if isinstance(msg[0], tuple):messages.append({"role": "user", "content": [{"type": "text", "text": history[i+1][0]}, {"type": "image"}]})messages.append({"role": "assistant", "content": [{"type": "text", "text": history[i+1][1]}]})images.append(Image.open(msg[0][0]).convert("RGB"))elif isinstance(history[i-1], tuple) and isinstance(msg[0], str):# messages are already handledpasselif isinstance(history[i-1][0], str) and isinstance(msg[0], str): # text only turnmessages.append({"role": "user", "content": [{"type": "text", "text": msg[0]}]})messages.append({"role": "assistant", "content": [{"type": "text", "text": msg[1]}]})# add current messageif len(message["files"]) == 1:if isinstance(message["files"][0], str): # examplesimage = Image.open(message["files"][0]).convert("RGB")else: # regular inputimage = Image.open(message["files"][0]["path"]).convert("RGB")images.append(image)messages.append({"role": "user", "content": [{"type": "text", "text": txt}, {"type": "image"}]})else:messages.append({"role": "user", "content": [{"type": "text", "text": txt}]})texts = processor.apply_chat_template(messages, add_generation_prompt=True)if images == []:inputs = processor(text=texts, return_tensors="pt").to("cuda")else:inputs = processor(text=texts, images=images, return_tensors="pt").to("cuda")streamer = TextIteratorStreamer(processor, skip_special_tokens=True, skip_prompt=True)generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=max_new_tokens)generated_text = ""thread = Thread(target=model.generate, kwargs=generation_kwargs)thread.start()buffer = ""for new_text in streamer:buffer += new_textgenerated_text_without_prompt = buffertime.sleep(0.01)yield bufferdemo = gr.ChatInterface(fn=bot_streaming, title="Multimodal Llama", textbox=gr.MultimodalTextbox(), additional_inputs = [gr.Slider(minimum=10,maximum=1024,value=250,step=10,label="Maximum number of new tokens to generate",)],cache_examples=False,description="Try Multimodal Llama by Meta with transformers in this demo. Upload an image, and start chatting about it, or simply try one of the examples below. To learn more about Llama Vision, visit [our blog post](https://huggingface.co/blog/llama32). ",stop_btn="Stop Generation", fill_height=True,multimodal=True)demo.launch(debug=True)

实际上,上面展示的是一个非常简洁的工作流程。首先,脚本会将模型文件加载到 GPU 上。然后,它启动了一个 Gradio 应用程序,让我们可以通过网页浏览器与模型互动。如果我们按照之前提到的文章中的说明操作,可以将运行代码块后输出的 URL 复制到 VS Code 的简单浏览器地址栏中,然后在我们的浏览器中打开新的 Gradio 窗口。或者,你可以将 `demo.launch()` 函数中的 `public` 参数设置为 `True`,这样就可以生成一个公开访问的链接。

总的来说,当运行时,我们得到的结果如下:

这个交互式应用程序允许我们使用文本或图像数据输入与模型互动。在我们的实验中,我们发现这个过程在图像理解、OCR和目标识别方面非常稳健。我们尝试了各种不同类型的图像,并获得了非常好的结果,显示出模型在文本和视觉领域之间的深厚融合。

此外,该应用程序本身对于正常的LLM任务也相当有效。我们能够用它生成工作的Python代码,讲述故事大纲,甚至协助撰写这篇博客文章的一小部分!总的来说,这个应用程序非常多功能,我们将继续将其用于我们未来的LLM任务。

写在最后

LLaMA 3.2的性能令人难以置信。在开源发布方面,它代表了向过去一年主导市场的流行封闭源代码模型的质量迈出了具体一步。它几乎能够做它们能做的任何事情,包括从代码生成到视觉理解再到长篇故事写作。我们鼓励所有读者在DigitalOcean GPU Droplet上尝试HuggingFace项目demo。Digitalocean 也上线了一键部署 HUGS 的功能,可以进一步简化你的AI项目开发工作。

大语言模型应用仍然具有无穷的可能性。从动态安全摄像头到全面的供应链管理,再到更好的AI聊天机器人,LLaMA已经可以用来改善我们周围的各种应用场景。我们很感兴趣的一点是,LLaMA 3.2 是否可以被适配成 T5 模型在流行的文字转图像建模中的合适替代品。这种技术正被像 PixArt 这样的团队在其最新模型中采用,以达到最先进的水平。

最后,如果你想尝试更多模型,却苦于没有合适的 GPU。欢迎尝试 DigitalOcean 的 GPU Droplet 云服务器,我们提供了包括 H100、A6000、A5000 等 GPU 资源,欢迎联系 Digitalocean 中国区独家战略合作伙伴卓普云,了解更多详情。

相关文章:

一文学会,利用LLaMA 3.2打造能“识图断字”的个人AI助理

人工智能最直接也是最普及的应用之一肯定是聊天机器人,或者叫个人 AI 助理。尽管聊天机器人以各种形式存在了30年,但在过去两年中,这些个人AI助理才真正成为热门应用。它们已经从前沿技术范畴落地到生活的各个方面、社交场合和商业场景中。 虽…...

idea的mapper.xml文件里写sql语句出现Tag name expected错误提示

原因如下&#xff1a; xml文件的某些特殊字符是自动转义的, xml解析器会忽视CDATA中的内容 解决方法&#xff1a; 使用下面的表达式表示对应符号。 小于(<)&#xff1a;<大于(>)&#xff1a;>和号(&)&#xff1a;&amp;单引号()&#xff1a;&apos;双引…...

EasyExcel 使用多线程按顺序导出数据

通过多线程读取数据&#xff0c;使用EasyExcel按顺序导出数据 导出时如果要保证顺序需要使用单线程&#xff0c;但是查询时可以用多线程&#xff0c;因为多线程查询后返回数据不是按照顺序排列的&#xff0c;所以我的思路是再循环时给每个线程打标识&#xff0c;通过标识来排序…...

数据驱动的投资分析:民锋科技的量化模型探索

在全球金融市场中&#xff0c;数据驱动的投资分析正在变革传统投资方式。民锋科技通过精密的量化模型和智能算法&#xff0c;为投资者提供更加科学的市场预测和投资分析工具&#xff0c;以帮助他们更好地理解市场波动、优化投资组合&#xff0c;实现风险管理。 #### 一、数据驱…...

cesium 设置相机视角 flyTo 参数destination,orientation

效果 // 监听相机的改变 用来设置相机飞行到哪里window.viewer.camera.changed.addEventListener(function () {// 当相机改变时&#xff0c;获取相机的参数let camera window.viewer.camera;// 获取当前摄像机的位置&#xff08;经纬度&#xff09;let cameraPosition wind…...

vue+Leaflet.PM插件实现创建和编辑几何图形(点、线、面、圆等)

场景 VueLeaflet实现加载OSM显示地图&#xff1a;https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上&#xff0c;使用Leaflet.pm插件实现在页面上绘制、编辑、剪切、移动几何元素。Leaflet.pm插件 用于创建和编辑几何图层的插件可…...

Rust语言在系统编程中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 引言 Rust 概述 定义与原理 发展历程 Ru…...

test 是 JavaScript 中正则表达式对象 (RegExp) 的一种方法,用于测试一个字符串是否匹配某个正则表达式

在你的代码中&#xff0c;test 方法用于验证扫描结果是否符合特定的格式要求。具体来说&#xff0c;/^[A-Za-z\d]{16}$/.test(res.result) 这一行代码用于检查扫描结果 res.result 是否是一个由16个字母或数字组成的字符串。 test 方法的作用 正则表达式匹配&#xff1a; ^ 表…...

大厂社招3年-力扣热点高频刷题记录(已更新100+道热点题)

前言&#xff1a; 最近从大厂出来看机会&#xff0c;大厂面试基本都考察算法&#xff0c;于是维护此文档&#xff0c;一是查缺补漏&#xff0c;确保整体热点算法题目的应知应会&#xff0c;与思路的灵活理解&#xff1b;二是分享出来给其他同学朋友做一个参考借鉴&#xff0c;共…...

6.2 对角化矩阵(2)

五、不能对角化的矩阵 假设 λ \lambda λ 是 A A A 的一个特征值&#xff0c;我们从两个方面发现这个事实&#xff1a; 特征向量&#xff08;几何的&#xff09;&#xff1a; A x λ x A\boldsymbol x\lambda\boldsymbol x Axλx 有非零解。特征值&#xff08;代数的&…...

ubuntu24.04播放语音视频

直接打开ubuntu自带的video播放.mp4文件&#xff0c;弹窗报错如下&#xff1a; 播放此影片需要插件 MPEG-4 AAC 编码器安装方式&#xff1a; sudo apt install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly sudo apt install ffmpeg验证AA…...

GPT4的下一代Orion已经降速了?

嘿&#xff0c;大家好&#xff0c;我是小索奇&#xff01;说起AI&#xff0c;相信不少人都和我一样&#xff0c;总感觉这玩意儿发展得就像装了火箭&#xff0c;快得让人眼花缭乱。咱们从GPT-3到GPT-4&#xff0c;一路哇哦着过来&#xff0c;天天惊叹它越来越聪明&#xff0c;越…...

SpringCloud框架学习(第二部分:Consul、LoadBalancer和openFeign)

目录 六、Consul服务注册和发现 1.基本介绍 2.下载运行 3.服务注册与发现 &#xff08;1&#xff09;支付服务provider8001注册进consul &#xff08;2&#xff09;修改订单服务cloud-consumer-order80 4.CAP &#xff08;1&#xff09;CAP理论 &#xff08;2&#x…...

Linux 批量配置互信

批量配置SSH互信脚本 #!/bin/bash# 定义目标机器列表 machines( "192.168.122.87" "192.168.122.89" "192.168.122.90" ) set -o errexit # 设置默认的用户名和密码 default_username"root" default_password"111111"# 读取…...

设计定长的内存池

目录 定长内存池设计设计思路具体实现定长内存池初始化T*New()申请内存代码 void Delete(T* obj)回收内存代码 设计的总代码测试代码 Objectpool.h文件代码test.cpp文件代码拓展windows和Linux下如何直接向堆申请页为单位的大块内存&#xff1a; 感谢各位大佬对我的支持,如果我…...

【动手学电机驱动】 STM32-FOC(7)基于 MCSDK6.0 控制与调试速度环

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…...

无人机飞手考证,地面站培训技术详解

无人机飞手考证及地面站培训技术涉及多个关键方面&#xff0c;以下是对这些方面的详细解析&#xff1a; 一、无人机飞手考证流程与要求 1. 证书类型 民用无人机驾驶员证书&#xff1a;这是国家民航局颁发的无人机操作人员资质证书&#xff0c;分为视距内驾驶员、超视距驾驶员…...

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

注&#xff1a;本文有部分内容引用了维基百科&#xff1a;https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 本文对MPEG2-TS格式的TS Header进行简介。 进行简介之前&#xff0c;请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…...

Sam Altman:年底将有重磅更新,但不是GPT-5!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

基于物联网的智能超市快速结算系统

摘 要 当今社会的商品层出不穷&#xff0c;人们因为越来越多大型仓储超市的出现使得生活更加便利&#xff0c;但许多随之而来的新问题也给人们带来了许多的不便&#xff0c;例如商家一直被更换标签不及时、货物丢失、超市内物品更换处理不及时、超市内人流高峰期人流控制不得…...

241111.学习日志——[CSDIY] Cpp零基础速成 [00]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…...

湘潭大学软件工程算法设计与分析实验-模拟退火算法

文章目录 写在前面代码分析 写在前面 总共是要四份代码&#xff0c;好像都是实现背包问题&#xff0c;前面三个都比较简单直观&#xff0c;朋友上周在机房给我讲解了一下之后&#xff0c;我大概弄清楚了&#xff0c;这周好像是最后一次算法课了&#xff0c;所以明天我得把剩下…...

Three.js 零基础+概念理解

文章目录 一、Three.js基础概念&#xff08;一&#xff09;什么是Three.js&#xff08;二&#xff09;核心对象&#xff08;三&#xff09;几何体&#xff08;Geometries&#xff09;和材质&#xff08;Materials&#xff09; 二、基础实例应用&#xff08;一&#xff09;创建一…...

c#使用COM接口设置excel单元格宽高匹配图片,如何计算?

c#使用COM接口设置excel单元格宽高如何换算 在实际工作中&#xff0c;经常需要在excel中插入图片。并设置单元格与图片对齐。但是excel单元格的宽度和高度使用不同的单位。单元格的宽度以字符宽度为单位&#xff0c;而高度以点为单位。如果按照实际值来设置&#xff0c;例如设…...

Excel模板下载\数据导出

pom <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version> </dependency><build><resources><resource><!--将xlsx打包到jar--><director…...

Vite初始化Vue3+Typescrpt项目

初始化项目 安装 Vite 首先&#xff0c;确保你的 Node.js 版本 > 12.0.0。然后在命令行中运行以下命令来创建一个 Vite Vue 3 TypeScript 的项目模板&#xff1a; npm init vitelatest进入项目目录 创建完成后&#xff0c;进入项目目录&#xff1a; cd vue3-demo启动…...

深入剖析【C++继承】:单一继承与多重继承的策略与实践,解锁代码复用和多态的编程精髓,迈向高级C++编程之旅

​​​​​​​ &#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: C专栏 目录 继承的概念及定义 继承的概念 继承定义 定义格式 继承基类成员访问⽅式的变化 继承类模板 基类和派⽣类间的转换 继承中的作⽤域 隐藏规则 成员函数的隐藏 考察继承【作⽤…...

地级市能源消耗数据(2006至2021)含原始数据、计算过程、计算结果-最新出炉

能源消耗数据分析-2006-2021年地级市能源消耗数据&#xff08;原始数据计算过程结果&#xff09; 下载链接-点它&#x1f449;&#x1f449;&#x1f449;&#xff1a;https://download.csdn.net/download/qq_67479387/89911272 全国能源消耗概况 2021年&#xff0c;我国单位…...

MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并

MySQL技巧之跨服务器数据查询&#xff1a;基础篇-A数据库与B数据库查询合并 上一篇已经描述&#xff1a;借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的链接名: MY_ODBC_MYSQL 以…...

AutoSAR CP DoIP规范导读

主要功能和用途 诊断通信协议实现 遵循标准&#xff1a;遵循ISO 13400 - 2标准&#xff0c;实现了诊断通信在IP网络上的传输协议和网络层服务&#xff0c;包括数据封装、传输、路由等功能。 多种消息支持 车辆识别与公告&#xff1a;能够进行车辆识别请求和响应&#xff0c;…...