>**黄浩文**
>
> 资深开发者布道师
>
> 亚马逊云科技
>
> 拥有电信、互联网以及云计算等行业超过 20 年的丰富经验,曾任职于微软、Sun 和中国电信。他目前专注于生成式 AI、大型语言模型 (LLM)、[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)和数据科学等领域的技术内容创作和实践分享,致力于赋能全球开发者。
本博客内容原文来自于作者在亚马逊云科技开发者社区发表的技术博客:
*“Leveraging Llama 3.2 90B Instruct model for Multimodal Diabetes Prevalence Analysis on [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail)”:*
https\://community.aws/content/2p6VvdzzeBfpOzSBXEzZdmJEyaE/?trk=cndc-detail
### **概述**
在大型语言模型领域,多模态模型的强大能力已经开始为解决复杂问题开辟了新的可能性。本文探讨的问题是分析全球糖尿病患病率趋势,这是一个关系到全球数亿人的重大健康问题。在本文中,我将探讨如何在 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上,使用 Meta Llama 3.2 90B Instruct 模型来分析全球不同国家或地区的糖尿病患者的患病率分布数据。
Meta 开发的 Llama 3.2 90B Instruct 模型,是一种先进的具有多模态能力的大模型,它能够处理和分析文本和图像,这使它成为我们分析全球糖尿病患者的患病率数据的理想选择之一。
我们将采用运行在 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 的 Llama 3.2 90B Instruct 模型来进行分析,[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 与流行的先进大型语言模型无缝集成,可以帮助开发者更高效专业地创建自己的生成式 AI 应用程序。
### **多模态能力和基准**
Meta 在其对外发布的论文 “The Llama 3 Herd of Models” 之中,详细阐释了将多模态能力添加到 Llama 3 系列模型的研究组合方法,该方法会经过五个阶段来训练多模态模型,分别是:
(1) 语言模型预训练
(2) 多模态编码器预训练
(3) 视觉适配器训练
(4) 模型微调
(5) 语音适配器训练
该论文中的图示说明了这一过程。
![image.png](https://dev-media.amazoncloud.cn/a636ce079ecc4016a7ad01c75c779039_image.png "image.png")
Source:
https\://ai.meta.com/research/publications/the-llama-3-herd-of-models/?trk=cndc-detail
来自 llama.com 网站公开的测试数据,比较了不同 AI 模型在各种基准测试和任务上的表现。下表分为“大学水平问题和数学推理”和“图表和图解理解”两大部分,每个部分下又有几个子类别。
在大多数基准测试中,Llama 3.2 90B 模型的表现普遍优于其他模型,在“AI2 Diagram”基准测试中,Llama 3.2 90B 模型获得了 92.3% 的最高分!
![image.png](https://dev-media.amazoncloud.cn/6530390058854f48902fb55d4e1c68f9_image.png "image.png")
Source:
https\://www\.llama.com/?trk=cndc-detail
接下来,我们将使用一个具体的案例研究,演示如何在 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上方便高效地利用 Llama 3.2 90B Instruct 模型的多模态能力。我们将使用这个模型分析全球不同国家和地区的糖尿病患病率趋势。
### **前期准备**
我们的分析数据集是一个包含糖尿病流行率信息的数据集,其包括相关的图像等。在我们可以利用 Meta Llama 3.2 90B Instruct 模型进行推理之前,我们还需要确保我们的图像数据与其要求兼容。
为了解决这个问题,我开发了一个实用的 Python 程序函数(可在 https\://github.com/hanyun2019/bedrock-in-practice/blob/main/utils.py?trk=cndc-detail 获得),用于调整图像大小并确保符合 Meta Llama 3.2 90B Instruct 模型规范。
分析中采用的两张关于糖尿病病患数据及趋势的图像来网站如下所示。该网站汇编了世界银行(2024 年)从多个来源收集的相关数据:
https\://ourworldindata.org/grapher/diabetes-prevalence?trk=cndc-detail
### **设置**
首先,让我们导入必要的库并打印 boto3 版本。以下代码将导入了 `boto3` 库,这是亚马逊云科技服务的 Python SDK,然后打印 `boto3` 的版本以确保它是最新的:
```
import boto3
print('boto3 version')
print(boto3.__version__)
!pip install --upgrade boto3
```
接下来,我们定义模型 ID 并加载需要分析的图像:
(1) `MODEL_ID`被设置为在 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上 Llama 3.2 90B Instruct 模型的特定模型 ID
(2) `ORIGIN_IMAGE`被设置为原始图像文件的路径
```
MODEL_ID = "us.meta.llama3-2-90b-instruct-v1:0"
ORIGIN_IMAGE = "images/diabetes-prevalence.png"
```
以下代码从我编写的自定义`utils`模块导入两个函数:`disp_image`和`resize_image`。需要调整图像大小是因为:Meta Llama 90B Instruct 模型对输入图像的大小有一定限制。
```
from utils import disp_image
from utils import resize_image
disp_image(ORIGIN_IMAGE)
# Image processing
from PIL import Image
img1 = Image.open(ORIGIN_IMAGE)
img1.size
RESIZED_IMG = resize_image(img1)
# Open the JPG image
jpg_image = Image.open("images/resized_image.jpg")
# Convert the image to PNG format
png_image = jpg_image.convert("RGB")
# Save the converted PNG image
png_image.save("images/resized_image.png")
RESIZED_IMAGE = "images/resized_image.png"
disp_image(RESIZED_IMAGE)
```
图像处理完成后,我使用自己定义的图像显示函数 `disp_image()` ,来显示将输入到 Llama 模型的第一张图像。这是一张全球糖尿病病患分布趋势的图像。颜色的深浅表示所在世界国家或地区的糖尿病患者在该区域占比的程度。颜色越深,病患情况就越严重。如下图所示:
![image.png](https://dev-media.amazoncloud.cn/17207b8945fa4597859fb2d70af258de_image.png "image.png")
Source:
https\://ourworldindata.org/grapher/diabetes-prevalence?trk=cndc-detail
### **与模型互动**
一切准备就绪,现在可以使用调整后的图像作为输入,提供给 Llama 3.2 90B Instruct 模型了。
我们先使用 `boto3` 为 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Runtime 服务创建一个客户端对象:
```
bedrock_runtime = boto3.client("bedrock-runtime")
```
然后,以二进制读取模式 (`"rb"`) 打开调整后的图像文件,文件内容被读入 `image` 变量:
```
with open(RESIZED_IMAGE, "rb") as f:
image = f.read()
```
接着定义一个用户消息,要求模型识别出全球糖尿病患病率最高的 10 个国家:
```
user_message = "According to this chart, which are the top 10 countries with the highest prevalence of diabetes?"
```
创建一个消息列表,其中包含一条消息。消息中包括用户的角色、图像和用户的消息内容:
```
messages = [
{
"role": "user",
"content": [
{"image": {"format": "png", "source": {"bytes": image}}},
{"text": user_message},
],
}
]
```
调用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Runtime 客户端的 `converse` 函数,传入 `MODEL_ID` 和以上消息列表。模型的响应消息将存储在 `response` 变量中:
```
response = bedrock_runtime.converse(
modelId=MODEL_ID,
messages=messages,
)
```
从响应对象中提取响应文本,并将其存储在 `response_text` 变量中。之后,将响应文本打印显示出来:
```
response_text = response["output"]["message"]["content"][0]["text"]
print(response_text)
```
我自己获得的模型测试响应文本如下,供大家参考:
According to the chart, the top 10 countries with the highest prevalence of diabetes are:
1. *\*\*Saudi Arabia\*\*: 17.5%*
2. *\*\*Egypt\*\*: 17.5%*
3. *\*\*United Arab Emirates\*\*: 17.5%*
4. *\*\*Bahrain\*\*: 17.5%*
5. *\*\*Kuwait\*\*: 17.5%*
6. *\*\*Qatar\*\*: 17.5%*
7. *\*\*Oman\*\*: 17.5%*
8. *\*\*Yemen\*\*: 17.5%*
9. *\*\*Libya\*\*: 17.5%*
10. *\*\*Papua New Guinea\*\*: 17.5%*
These countries have the highest percentage of their population aged 20-79 with diabetes, according to the chart.
如果你从以上示例中得到启发,并希望进一步探索,可参考以下 GitHub 代码库查看我的完整代码:
https\://github.com/hanyun2019/bedrock-in-practice/blob/main/llama32-multimodal-diabetes-1.ipynb?trk=cndc-detail
在以上完整代码中,我还上传测试了第二张输入的图像:亚洲糖尿病患病率分布情况图,供 Meta Llama 3.2 90B Instruct 模型进行进一步分析。如下图所示:
![image.png](https://dev-media.amazoncloud.cn/776e1575cc7c47b7affe6f1d801e3d8a_image.png "image.png")
Source:
https\://ourworldindata.org/grapher/diabetes-prevalence?trk=cndc-detail
细心的开发者也可以找到你坐在的洲际数据图表,以进一步探索这个话题。
### **总结**
在这篇文章中,我们演示了如何利用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上 Meta Llama 3.2 90B Instruct 模型的多模态能力,来洞察全球糖尿病患病率。通过利用这种先进的大型多模态模型,我们能够同时分析文本数据和可视化数据,根据提供的图表来确定全球糖尿病患病率最高的前 10 个国家或地区。
Meta Llama 3.2 90B Instruct 模型在各种基准测试中表现卓越,尤其在图表理解等领域,非常适合这种多模态分析任务。在 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上运行该模型,还能够更高效地处理数据并生成准确的洞见。
通过这个实际案例,我们展示了将先进的大模型与多模态数据相结合,来解决医疗分析等领域复杂现实问题的潜力。随着大模型多模态能力的不断发展,从各种数据源中获取更深入的洞见,为各行业带来影响深远的全新解决方案,将孕育出更多新的市场机遇。
### **参考文献**
1. The Llama 3 Herd of Models
https\://ai.meta.com/research/publications/the-llama-3-herd-of-models/?trk=cndc-detail
2. Introducing Llama 3.2 models from Meta in [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail)
https\://aws.amazon.com/blogs/aws/introducing-llama-3-2-models-from-meta-in-amazon-bedrock-a-new-generation-of-multimodal-vision-and-lightweight-models/?trk=cndc-detail
3. Vision use cases with Llama 3.2 11B and 90B models from Meta
https\://aws.amazon.com/blogs/machine-learning/vision-use-cases-with-llama-3-2-11b-and-90b-models-from-meta/?trk=cndc-detail
### **说明**
本文的封面图片由 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 上的 SDXL 1.0 模型生成。给定的输入提示词是:
*“A developer with a laptop and a diabetes scientist, sitting in a café, developer with a laptop, excitedly discussing Leveraging generative AI for diabetes prevalence analysis, comic, graphic illustration, comic art, graphic novel art, vibrant, highly detailed, colored, 2d”*
> *前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。