开源地址 :huggingface Llama3.2
Llama 3.2 : Llama 3.2 多语言大型语言模型 (LLM) 集合是 1B 和 3B 大小(文本输入/文本输出)的预训练和指令调整生成模型的集合。
Llama 3.2 Vision: Llama 3.2-Vision 多模态大型语言模型 (LLM) 集合是经过预训练和指令调整的图像推理生成模型的集合,大小为 11B 和 90B(文本 + 图像输入/文本输出)
在线体验:meta.ai
Llama 3.2介绍
Llama大模型是由Meta的人工智能研究团队开发并开源的大型语言模型,继Llama2+模型之后,Meta进一步推出了性能更卓越的Meta Llama3系列语言模型,包括一个80亿参数模型和一个700亿参数模型。lama370B的性能媲美Gemini1.5Pro,全面超越Claude大杯,而Llama3 400B+的模型与Claude超大版和新版GPT-4 Turbo相当。
Llama 3.2 系列中最大的两个模型 11B 和 90B 支持图像推理用例 ,例如文档级理解(包括图表和图形)、图像字幕以及视觉基础任务(例如基于自然语言描述在图像中精确定位对象)。
例如,一个人可以问一个问题,即他们的小企业去年哪个月的销售额最高,然后 Llama 3.2 可以根据可用的图表进行推理并快速提供答案。
在另一个例子中,该模型可以使用地图进行推理并帮助回答问题,例如何时徒步旅行可能会变得更陡峭或地图上标记的特定路径的距离。
11B 和 90B 模型还可以通过从图像中提取细节、理解场景,然后制作一两句话作为图像字幕来帮助讲述故事,从而弥合视觉和语言之间的差距。
轻量级 1B 和 3B 模型具有强大的多语言文本生成和工具调用功能 。这些模型使开发人员能够构建个性化的设备代理应用程序,具有很强的隐私性,数据永远不会离开设备。
例如,这样的应用程序可以帮助汇总最近收到的 10 条消息,提取操作项,并利用工具调用直接发送日历邀请以进行后续会议。
在本地运行这些模型具有两大优势:
- 首先,由于处理是在本地完成的,因此提示和响应可以即时完成。
- 其次,在本地运行模型可以保护隐私,因为不会将消息和日历信息等数据发送到云端,从而使整个应用程序更加私密。
模型要点
- 2024 年 9 月 25 日MetaAI发布了 Llama 3.2,其中包括小型和中型视觉 LLM(11B 和
90B )以及适合边缘和移动设备的轻量级纯文本模型(1B 和 3B),包括预训练和指令调整版本。 - Llama 3.2 1B 和 3B模型支持 128K指令 的上下文长度,在同类产品中处于领先地位,适用于总结、指令跟踪和在边缘本地运行的重写任务等设备用例。这些模型在第一天就适用于
Qualcomm 和联发科硬件,并针对 Arm 处理器进行了优化。 - Llama 3.2 11B 和 90B视觉模型得到了广泛生态系统的支持,是其相应文本模型的直接替代品,同时在图像理解任务上的表现优于封闭模型(例如 Claude 3Haiku)。与其他开放多模态模型不同,预训练和对齐模型都可以使用 torchtune 针对自定义应用程序进行微调,并使用torchchat 在本地部署。
- 第一个官方LlamaStack发行版,这将极大地简化开发人员在不同环境中使用 Llama 模型的方式,包括单节点、本地、云和设备端,从而实现检索增强生成 (RAG) 和集成安全性的工具支持应用程序的交钥匙部署。
- Llama 3.2 模型在llama.com和Hugging Face上可供下载,同时也可以在合作伙伴平台生态系统上立即开发,包括AMD、AWS、Databricks、Dell、Google Cloud、Groq、IBM、Intel、Microsoft Azure、NVIDIA、Oracle Cloud、Snowflake 等。
模型评估
Llama 3.2 视觉模型在图像识别和一系列视觉理解任务上与领先的基础模型 Claude 3 Haiku 和 GPT4o-mini 具有竞争力。3B 模型在遵循指令、总结、快速重写和工具使用等任务上优于 Gemma 2 2.6B 和 Phi 3.5-mini 模型,而 1B 模型与 Gemma 具有竞争力。
对涵盖多种语言的 150 多个基准数据集进行了性能评估。对于视觉 LLM,我们根据图像理解和视觉推理的基准评估了性能。
视觉模型
作为首批支持视觉任务的 Llama 模型,11B 和 90B 模型需要支持图像推理的全新模型架构。
为了添加图像输入支持,训练了一组适配器权重,将预训练的图像编码器集成到预训练的语言模型中。适配器由一系列交叉注意层组成,这些层将图像编码器表示输入到语言模型中。
在文本-图像对上训练了适配器,以使图像表示与语言表示对齐。在适配器训练期间,还更新了图像编码器的参数,但有意不更新语言模型参数。通过这样做,保持了所有纯文本功能不变,为开发人员提供了 Llama 3.1 模型的直接替代品。
Llama 3.2训练流程由多个阶段组成,从预训练的 Llama 3.1 文本模型开始:
- 添加图像适配器和编码器
- 在大规模噪声(图像、文本)对数据上进行预训练。
- 在中等规模的高质量领域内和知识增强的(图像、文本)对数据上进行训练。
- 在后期训练中,使用与文本模型类似的方法,在监督微调、拒绝采样和直接偏好优化方面进行多轮对齐。
利用 Llama 3.1 模型生成合成数据,在域内图像的基础上过滤和扩充问题和答案,并使用奖励模型对所有候选答案进行排名,以提供高质量的微调数据。还添加了安全缓解数据,以生成具有高安全水平的模型,同时保留模型的有用性
最终结果是一组可以同时接收图像和文本提示并深入理解和推理两者组合的模型。这是 Llama 模型向拥有更丰富代理能力迈出的又一步。
轻量级模型
正如在 Llama 3.1 中讨论的那样,可以利用强大的教师模型来创建性能更佳的小型模型。在 1B 和 3B 模型上使用了两种方法(修剪和提炼),使其成为首批能够高效适应设备的高性能轻量级 Llama 模型。
修剪使能够缩小 Llama 群中现有模型的大小,同时尽可能多地恢复知识和性能。对于 1B 和 3B 模型,采用了从 Llama 3.1 8B 中一次性使用结构化修剪的方法。这涉及系统地移除网络的某些部分并调整权重和梯度的大小,以创建一个更小、更高效的模型,同时保留原始网络的性能。
知识蒸馏使用较大的网络将知识传授给较小的网络,其理念是较小的模型使用教师可以获得比从头开始更好的性能。对于 Llama 3.2 中的 1B 和 3B,将 Llama 3.1 8B 和 70B 模型的对数合并到模型开发的预训练阶段,其中这些较大模型的输出(对数)被用作 token 级目标。修剪后使用知识蒸馏来恢复性能。
在后期训练中,使用与 Llama 3.1 类似的方法,通过在预训练模型的基础上进行几轮对齐来生成最终的聊天模型。每轮都涉及监督微调 (SFT)、拒绝采样 (RS) 和直接偏好优化 (DPO)。
在训练后,将上下文长度支持扩展到 128K 个 token,同时保持与预训练模型相同的质量。还参与了合成数据生成,经过仔细的数据处理和过滤以确保高质量。精心混合数据,以优化多项功能(如摘要、重写、指令遵循、语言推理和工具使用)的高质量。
为了让社区能够在这些模型上进行创新,与全球排名前两的移动片上系统 (SoC) 公司高通和联发科以及为99 %的移动设备提供基础计算平台的 Arm 密切合作。今天发布的权重基于 BFloat16 数值。
立即试用 Llama 3.2
Llama Stack 发行版
项目地址:https://github.com/meta-llama/llama-stack
7 月,发布了关于 Llama Stack API 的评论请求,这是一个用于规范工具链组件(微调、合成数据生成)的标准化接口,用于定制 Llama 模型和构建代理应用程序。参与度很高。
从那时起,一直在努力让 API 成为现实。为推理、工具使用和 RAG 构建了 API 的参考实现。此外,一直在与合作伙伴合作,使他们成为 API 的提供商。最后,引入了 Llama Stack Distribution,作为一种打包多个 API 提供商的方法,这些提供商可以很好地协同工作,为开发人员提供单一端点。现在与社区分享一种简化且一致的体验,使他们能够在多种环境中使用 Llama 模型,包括本地、云、单节点和设备上。
全套发布内容包括:
- Llama CLI(命令行界面)用于构建、配置和运行 Llama Stack 发行版
- 多种语言的客户端代码,包括 python、node、kotlin 和 swift
- Llama Stack 分发服务器和代理 API 提供程序的 Docker 容器
- 多个分布:
- 通过 Meta 内部实现和 Ollama 进行单节点 Llama Stack 分发
- 通过 AWS、Databricks、Fireworks 和 Together 分发的 Cloud Llama Stack
- 通过 PyTorch ExecuTorch 实现 iOS 设备上的 Llama Stack Distribution
- 戴尔支持本地部署 Llama Stack Distribution
调用transformers
文本模型使用跟Llama3.1一致,多模态模型使用如下:
python
import requests
import torch
from PIL import Image
from transformers import MllamaForConditionalGeneration, AutoProcessor
model_id = "meta-llama/Llama-3.2-11B-Vision-Instruct"
model = MllamaForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
)
processor = AutoProcessor.from_pretrained(model_id)
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/0052a70beed5bf71b92610a43a52df6d286cd5f3/diffusers/rabbit.jpg"
image = Image.open(requests.get(url, stream=True).raw)
messages = [
{"role": "user", "content": [
{"type": "image"},
{"type": "text", "text": "If I had to write a haiku for this one, it would be: "}
]}
]
input_text = processor.apply_chat_template(messages, add_generation_prompt=True)
inputs = processor(image, input_text, return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=30)
print(processor.decode(output[0]))