首页 > 其他分享 >一文学会,利用LLaMA 3.2打造能“识图断字”的个人AI助理

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

时间:2024-11-13 15:46:35浏览次数:3  
标签:AI text 模型 识图 断字 3.2 LLaMA GPU 我们

人工智能最直接也是最普及的应用之一肯定是聊天机器人,或者叫个人 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 handled
            pass
        elif isinstance(history[i-1][0], str) and isinstance(msg[0], str): # text only turn
            messages.append({"role": "user", "content": [{"type": "text", "text": msg[0]}]})
            messages.append({"role": "assistant", "content": [{"type": "text", "text": msg[1]}]})

    # add current message
    if len(message["files"]) == 1:
        
        if isinstance(message["files"][0], str): # examples
            image = Image.open(message["files"][0]).convert("RGB")
        else: # regular input
            image = 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_text
        generated_text_without_prompt = buffer
        time.sleep(0.01)
        yield buffer


demo = 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 中国区独家战略合作伙伴卓普云,了解更多详情。

标签:AI,text,模型,识图,断字,3.2,LLaMA,GPU,我们
From: https://blog.csdn.net/DO_Community/article/details/143744951

相关文章

  • 【JetBrains GoLand 2024软件下载与安装教程】
     1、安装包GoLand2024:链接:https://pan.quark.cn/s/578b3b1d9379提取码:pn3LGoLand2021:链接:https://pan.quark.cn/s/c4c9a3112b2c提取码:i9NfGoLand2018:链接:https://pan.quark.cn/s/5b9cc3b12cab提取码:adEW2、安装教程(建议关闭杀毒软件)1)       下载并......
  • 【JetBrains DataGrip 2024软件下载与安装教程】
    1、安装包datagrip2024:链接:https://pan.quark.cn/s/60f7993eae45提取码:TfaJdatagrip-2023.3.2:链接:https://pan.quark.cn/s/d65297b4e648提取码:6CdA2、安装教程(建议关闭杀毒软件)1)       解压下载安装包,双击datagrip-2024.1.2.exe安装,弹窗安装对话框  2)......
  • 揭秘AI如何揪出图片中的“李鬼”
    ✨✨欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨......
  • 实战:Mailivery 模拟登录
    问题情景混淆群内的小伙伴遇到这么个问题,Mailivery这个网站登录后,明明提交的表单(邮箱和密码也正确)、请求头等等都没问题,为啥一直重定向到登录页面呢?唉,该出手时就出手啊,我也看看咋回事吧!url:https://app.mailivery.io/login登录参数分析显而易见,需要:邮箱(有邮箱校验)、密码......
  • 03LangChain初学者指南:从零开始实现高效数据检索
    LangChain初学者指南:从零开始实现高效数据检索https://python.langchain.com/v0.2/docs/tutorials/retrievers/这个文档,我们将熟悉LangChain的向量存储和抽象检索器。支持从(向量)数据库和其他来源检索数据,并与大模型的工作流集成。这对于需要检索数据以进行推理的应用程序非常重......
  • CVPR截稿倒计时|无问芯穹Infini-AI超级算力周延长
    随着CVPR2025的投稿截止日期(11月14日)的临近,科研人员正全力以赴进行最后的冲刺。为了帮助大家轻松应对这一关键时刻,无问芯穹Infini-AI异构云平台特别延长了“超级算力周”活动,活动日期直至11月15日。现在,您只需支付每小时0.99元的优惠价格,即可享受到搭载4090显卡的高性能......
  • C题目:写一个函数,计算一个字符串的长度。在main函数中输入字符串,并输出其长度。
    题目要求如下:写一个函数,计算一个字符串的长度。在main函数中输入字符串,并输出其长度。提示:(1)定义intlength(char*p)函数,统计指针变量p指向的字符数组中的字符个数,返回其字符个数。(2)在main函数中,输入一个字符串,存入字符数组,调用length函数,求出字符串的长度,输出其长度值。代......
  • 【JetBrains Rider 2024软件下载与安装教程】
    1、安装包Rider2024:链接:https://pan.quark.cn/s/f3b3360dccc0提取码:Z8gARider-2023.3.2:链接:https://pan.quark.cn/s/82b63a1e0df3提取码:XdA82、安装教程(建议关闭杀毒软件)1)       双击下载安装包exe文件安装,弹窗安装对话框  2)       点击下一步......
  • 亚马逊铺货、跟卖之FBM配送模板的设置与应用-基于月亮树跨境AI自动调价插件综合运用的
    背景亚马逊后台的展示界面频繁出现问题,导致许多做铺货和跟卖的小伙伴在使用FBM(自发货)模式时,有时会遇到运费无法正常显示的情况。而在购物车界面才会显示运费久而久之,会出现这样的业务诉求:“我这里有4个商品,其中有2个想设置成免运费的模式。”将亚马逊配送模板设置好了,配......
  • aigc学习路线从入门到精通(非常详细),这篇文章看完,让你不再盲目学习
    话说AI的兴起,让很多人无所适从,大家的统一看法就是:“又开始卷了”。这次与其说“卷”,不如说“时代变革”。“卷”是在一个层面上,而这次明显不是。我作为一个10年的设计师和插画师,2022年12月份,自己也明显有了压力,刚开始也很抗拒人工智能,在一些绘画平台和社交平台,我们的原创......