本文将介绍如何在本地部署Llama 3.2 90B(900亿参数)视觉多模态大模型,并开发一些Use Case,展示其强大的视觉理解能力。

Llama 3.2 介绍

今年9月,Meta公司发布了 Llama 3.2版本,包括11B 和 90B的中小型视觉大语言模型,适用于边缘计算和移动设备的1B 和 3B轻量级文本模型,,均预训练基础版和指令微调版,除此之外,还发布了一个安全模型Llama Guard 3。
Llama 3.2 Vision 是 Meta 发布的最强大的开源多模态模型。它具有出色的视觉理解和推理能力,可以用于完成各种任务,包括视觉推理与定位、文档问答和图像 - 文本检索,思维链 (Chain of Thought, CoT) 答案通常非常好,这使得视觉推理特别强大。

Llama 2于2023年7月发布,包含7B、13B和70B参数的模型。之后Meta在2024年4月推出了Llama 3,并在2024年7月迅速发布了Llama 3.1版本,更新了8B和70B的模型,最重要的是推出了一个拥有405B参数的基础级模型。这些模型支持8种语言,具备工具调用功能,并且拥有128K的上下文窗口。

2024年9月份刚刚发布了Llama 3.2模型,增强了Llama 3.1的8B和70B模型,构建出11B和90B多模态模型,使其具备了视觉能力。

Llama 3.2 系列中最大的两个模型 11B 和 90B 支持图像推理使用案例,例如文档级理解(包括图表和图形)、图像字幕和视觉接地任务(例如根据自然语言描述定向精确定位图像中的对象)。例如,可以问他们公司在上一年的哪个月销售额最好,然后 Llama 3.2 可以根据可用图表进行推理并快速提供答案。还可以使用地图进行推理并帮助回答诸如徒步旅行何时会遇到陡峭的地形,或在地图上标记路线的距离等问题。11B 和 90B 型号还可以通过从图像中提取细节、理解场景,然后生成一两个可用作图像标题的句子来帮助讲述故事,从而弥合视觉和语言之间的差距。

此外,Meta还发布了两个轻量级的模型:1B和3B模型,这些将帮助支持设备端的AI应用。

在本地运行这些模型有两个主要优势。首先,提示和响应可能会让人感觉是即时的,因为处理是在本地完成的。其次,在本地运行模型不会将消息和日历信息等数据发送到云中,从而保护隐私,从而使整个应用程序更加私密。由于处理是在本地处理的,因此应用程序可以清楚地控制哪些查询保留在设备上,哪些查询可能需要由云中的更大模型处理。

Llama Guard 3也是3.2版本的一部分,这是一种视觉安全模型,可以标记和过滤用户输入的有问题的图像和文本提示词。

GPU显卡内存估算

如何计算大模型到底需要多少显存,是常常被问起的问题,了解如何估算所需的 GPU 内存、正确调整硬件大小以服务这些模型至关重要。这是衡量你对这些大模型在生产中的部署和可扩展性的理解程度的关键指标。

要估算服务大型语言模型所需的 GPU 内存,可以使用以下公式:

$M=\frac{(P * 4 B)}{(32 / Q)} * 1.2$

  • M是所需的 GPU 显卡内存(单位:GB千兆字节)。
  • P是模型中的参数数量,表示模型的大小。例如,这里使用的 Llama 90B模型有 900 亿个参数,则该值将为 90。
  • 4B表示每个参数使用 4 个字节。每个参数通常需要 4 个字节的内存。这是因为浮点精度通常占用 4 个字节(32 位)。但是,如果使用半精度(16 位),则计算将相应调整。
  • Q是加载模型的位数(例如,16 位或 32 位)。根据以 16 位还是 32 位精度加载模型,此值将会发生变化。16 位精度在许多大模型部署中很常见,因为它可以减少内存使用量,同时保持足够的准确性。
  • 1.2 乘数增加了 20% 的开销,以解决推理期间使用的额外内存问题。这不仅仅是一个安全缓冲区;它对于覆盖模型执行期间激活和其他中间结果所需的内存至关重要。

gpu-compute-components

这里想要估算为具有 90B(900 亿)个参数、以 16 位精度加载的 Llama 3.2 90B 视觉大模型提供服务所需的内存:

$M=\frac{(90 * 4)}{(32 / 16)} * 1.2 = 216 GB$

这个计算告诉我们,需要大约216 GB 的 GPU 内存来为 16 位模式下具有 900 亿个参数的 Llama 3.2 90B 大模型提供服务。

因此,单个具有 80 GB 内存的 NVIDIA A100 GPU 或者 H00 GPU 不足以满足此模型的需求,需要至少3张具有 80 GB 内存的 A100 GPU 才能有效处理内存负载。

此外,仅加载 CUDA 内核就会消耗 1-2GB 的内存。实际上,无法仅使用参数填满整个 GPU 内存作为估算依据。

如果是训练大模型情况(下一篇文章会介绍),则需要更多的 GPU 内存,因为优化器状态、梯度和前向激活每个参数都需要额外的内存。

但博主囊中羞涩,为了完成这篇文章,选择 unsloth/Llama-3.2-90B-Vision-Instruct-bnb-4bit 的Llama 3.2 90B 视觉大模型的4bit量化模型,根据上面的估算公式,仅使用1张具有 80 GB 内存的 GPU 就可以运行完成本文案例所需的模型推理任务。

环境搭建

云服务器

找一台带一张H800 GPU 显卡的服务器(博主租用了一台服务器,花费大概50元左右就能跑完本文案例use case,当然还需要一些降低费用的小技巧,比如提前租用配置的服务器把模型文件下载到服务器,这样就可以节省很多费用💰),具体配置如下:

  • GPU:H800,80GB显存
  • CPU:20 核,Xeon(R) Platinum 8458P
  • 内存:100 GB
  • 系统盘:30 GB
  • 数据盘:200 GB(用于存放模型文件)

读者可以添加下面博主公众号,回复241220,获取租用云服务器的链接和方法,无需安装以下所需的CUDA、cuDNN、Python和PyTorch,直接使用。

公众号

如果读者自行安装CUDA和cuDNN,并配置环境变量,具体方法可以参考英伟达官网:

CUDA

cuDNN

本文所需的的CUDA、cuDNN、Python和PyTorch版本如下:

  • CUDA版本:12.4
  • cuDNN版本:9.1.0.70
  • Python版本:3.12.2
  • PyTorch版本:2.5.1

读者可以使用VSCode、Cursor或者其它SSH客户端连接到云服务器,然后使用以下命令安装CUDA和cuDNN。

安装前需要确保服务器上已经安装了NVIDIA驱动,可以使用以下命令查看是否安装了NVIDIA驱动:

   nvidia-smi

安装前,需要确保PyTorch与CUDA的版本对应,否则会报错。

PyTorch与CUDA的对应版本

1. 安装CUDA 12.4

wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_535.104.05_linux.run
sudo sh cuda_12.4.0_535.104.05_linux.run

2. 安装cuDNN 9.1.0.70

# 首先从NVIDIA开发者网站下载cuDNN
tar -xvf cudnn-linux-x86_64-9.1.0.70_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include 
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

3. 配置环境变量

echo 'export PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

4. 安装Python 3.12.2

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.12
sudo apt install python3.12-venv python3.12-dev

5. 安装pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.12 get-pip.py

6. 安装PyTorch 2.5.1

pip3 install torch==2.5.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

读者可以使用以下命令查看GPU内存信息

   nvidia-smi

如果安装正确,则可以看到类似如下的GPU内存信息

nvidia-smi

下载模型文件

为了在本地部署模型,事先需要从Huggingface上手动下载Unsloth量化过的Llama 3.2 90B 视觉大模型的4 bit量化模型unsloth/Llama-3.2-90B-Vision-Instruct-bnb-4bit 。

unsloth/Llama-3.2-90B-Vision-Instruct-bnb-4bit

  1. 安装Huggingface Hub客户端
pip install -U huggingface_hub
  1. 设置Huggingface镜像源(必须设置,否则下载模型会报错⚠️)
export HF_ENDPOINT=https://hf-mirror.com
  1. 登录Huggingface (跳过这步)
huggingface-cli login
  1. 下载模型
huggingface-cli download --resume-download unsloth/Llama-3.2-90B-Vision-Instruct-bnb-4bit --local-dir 【这里替换为模型本地存放路径】

下载成功后的Llama 3.2 90B视觉大模型的文件列表如下:

drwxr-xr-x 3 root root       4096 Dec 19 16:33 ./
drwxr-xr-x 3 root root       4096 Dec 19 16:33 ../
drwxr-xr-x 3 root root       4096 Dec 19 10:08 .cache/
-rw-r--r-- 1 root root       1570 Dec 19 10:08 .gitattributes
-rw-r--r-- 1 root root       6131 Dec 19 10:08 README.md
-rw-r--r-- 1 root root       5151 Dec 19 10:08 chat_template.json
-rw-r--r-- 1 root root       5870 Dec 19 10:08 config.json
-rw-r--r-- 1 root root        210 Dec 19 10:08 generation_config.json
-rw-r--r-- 1 root root 4947107668 Dec 19 11:22 model-00001-of-00010.safetensors
-rw-r--r-- 1 root root 4977064274 Dec 19 10:58 model-00002-of-00010.safetensors
-rw-r--r-- 1 root root 4977064462 Dec 19 10:36 model-00003-of-00010.safetensors
-rw-r--r-- 1 root root 4977098481 Dec 19 10:40 model-00004-of-00010.safetensors
-rw-r--r-- 1 root root 4933796471 Dec 19 10:34 model-00005-of-00010.safetensors
-rw-r--r-- 1 root root 4977064512 Dec 19 10:40 model-00006-of-00010.safetensors
-rw-r--r-- 1 root root 4977064455 Dec 19 11:08 model-00007-of-00010.safetensors
-rw-r--r-- 1 root root 4977098479 Dec 19 10:47 model-00008-of-00010.safetensors
-rw-r--r-- 1 root root 4933796461 Dec 19 11:07 model-00009-of-00010.safetensors
-rw-r--r-- 1 root root 4263159971 Dec 19 16:33 model-00010-of-00010.safetensors
-rw-r--r-- 1 root root     678066 Dec 19 10:40 model.safetensors.index.json
-rw-r--r-- 1 root root        477 Dec 19 10:40 preprocessor_config.json
-rw-r--r-- 1 root root        454 Dec 19 10:40 special_tokens_map.json
-rw-r--r-- 1 root root   17210088 Dec 19 10:40 tokenizer.json
-rw-r--r-- 1 root root      55931 Dec 19 10:40 tokenizer_config.json

安装模型运行环境Unsloth

安装Conda

mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh

安装模型运行环境Unsloth

以下代码用于安装模型运行环境Unsloth,并导入模型运行所需的依赖包。

conda create --name unsloth_env \
    python=3.11 \
    pytorch-cuda=12.1 \
    pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers \
    -y
conda activate unsloth_env

pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pip install --no-deps trl peft accelerate bitsandbytes
import warnings
warnings.filterwarnings('ignore')

%pip install unsloth

加载模型

from unsloth import FastVisionModel # 从unsloth库中导入FastVisionModel类,用于处理视觉相关的大语言模型

import torch

model, tokenizer = FastVisionModel.from_pretrained(
    "/root/autodl-fs/model/unsloth/Llama-3.2-90B-Vision-Instruct-bnb-4bit", # 此处替换为Llama-3.2-90B-Vision-Instruct-bnb-4bit在模型本地存放的绝对路径
    load_in_4bit = True, # 使用4bit以减少内存使用。False则使用16bit LoRA。
    use_gradient_checkpointing = "unsloth", # True或"unsloth"用于长文本上下文
)

FastVisionModel.for_inference(model) # 启动视觉大模型的推理模式
==((====))==  Unsloth 2024.12.8: Fast Mllama vision patching. Transformers: 4.46.3.
   \\   /|    GPU: NVIDIA H800 PCIe. Max memory: 79.205 GB. Platform: Linux.
O^O/ \_/ \    Torch: 2.5.1+cu124. CUDA: 9.0. CUDA Toolkit: 12.4. Triton: 3.1.0
\        /    Bfloat16 = TRUE. FA [Xformers = 0.0.28.post3. FA2 = False]
 "-____-"     Free Apache license: http://github.com/unslothai/unsloth
Unsloth: Fast downloading is enabled - ignore downloading bars which are red colored!



Loading checkpoint shards:   0%|          | 0/10 [00:00<?, ?it/s]

加载模型成功后,可以使用以下命令查看模型占用内存

nvidia-smi -l 2

nvidia-smi

Llama 3.2 90B 多模态视觉大模型推理案例展示

本文以下内容使用jupyter notebook进行演示。

我们该怎样系统的去转行学习大模型 ?

很多想入行大模型的人苦于现在网上的大模型老课程老教材,学也不是不学也不是,基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近100余次后,终于把整个AI大模型的学习门槛,降到了最低!

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料 分享出来: 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

一、大模型经典书籍(免费分享)

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

二、640套大模型报告(免费分享)

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
在这里插入图片描述

三、大模型系列视频教程(免费分享)

在这里插入图片描述

四、2025最新大模型学习路线(免费分享)

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1阶段:启航篇丨极速破界AI新时代

L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理、关键技术以及大模型应用场景。

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体。

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调。

L5阶段:专题集丨特训篇 【录播课】

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方二维码,免费领取

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐