common.title
Cloud support

Nobisuke

Dekisugi

RAG


autoQAOA
RAG for dev
Fortune telling app
Annealing
DEEPSCORE
Translation

Overview
Service overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

在AMD最新的MI300X服务器上用一张GPU运行了**Llama-3.2-90B-Vision-Instruct**。

Yuichiro Minato

2024/10/19 04:00

在AMD最新的MI300X服务器上用一张GPU运行了Llama-3.2-90B-Vision-Instruct

大家好!我刚刚和Supermicro公司以及我们股东Shinden Hightex公司一起测试了最新的GPU。

Supermicro
https://www.supermicro.com/ja/

Shinden Hightex
https://www.shinden.co.jp/

此次测试的目标是……
AMD Instinct™ MI300X
https://www.amd.com/ja/products/accelerators/instinct/mi300/mi300x.html

这台机器是AMD制造的,令人惊讶的是,它拥有192GB的显存(VRAM)。而且,Supermicro和AMD目前为日本市场推出的型号是8张GPU的配置,所以整台机器的显存总容量达到了1.5TB……

由于国内几乎没有公司拥有适用于AMD GPU的应用程序,因此我们公司受邀测试LLM、RAG和量子计算软件。

首先,AMD最近推出了MI300X这一最新的GPU。它比NVIDIA的H100快约1.3倍,且显存高达192GB,这让它在某些圈子里引起了轰动。

我个人一直使用NVIDIA的机器,因此对AMD的操作还不熟悉,但最近pytorch推出了ROCm(RockM),作为NVIDIA CUDA的替代品,已相对稳定。这次我们对LLM、RAG和量子计算的可用性进行了验证。

通常我们使用Mistral、Llama 3和Gemma 2等模型,但就在我乘坐电车赶往测试的路上,我看到新闻说Llama 3.2已经发布了!

Meta发布了Llama 3.2,提高了图像识别性能,并推出了针对智能手机的小型版本。
https://gigazine.net/news/20240926-llama-3-2/#google_vignette

起初,我没有多想,安装了Mistral 7B模型,并使用Faiss作为RAG的向量数据库,还选择了一个合适的Embedding模型。结果显示,一切顺利,高速运行。我本打算做速度基准测试的对比,但还没来得及。

随后,我想立即试试Llama 3.2,于是发起了挑战。

由于AMD MI300X拥有192GB的显存,我想或许一张GPU就能运行90B模型。于是我尝试了meta-llama/Llama-3.2-90B-Vision-Instruct
https://huggingface.co/meta-llama/Llama-3.2-90B-Vision-Instruct

这个模型需要事先申请访问权限,建议尽早申请。模型参数有900亿个,是我们通常使用的7-9B模型的十倍。然而,令人惊讶的是,它可以在一张GPU上运行。我建议尽早准备,因为下载模型需要相当长的时间。模型文件大约180GB,显然是一个无法一次性装载进显存的大小……

更新Transformers后,从HuggingFace下载模型,这次的示例有些不同。

import requests
import torch
from PIL import Image
from transformers import MllamaForConditionalGeneration, AutoProcessor

model_id = "meta-llama/Llama-3.2-90B-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]))

这次看来是基于Llama 3.1的文本模型构建了一个视觉模型。示例代码通过观察彼得兔的图片生成了一首俳句。

如果你在AMD GPU上运行代码,唯一需要注意的是需要将pytorch替换为ROCm兼容版本。

在ROCm上安装PyTorch
https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/3rd-party/pytorch-install.html

完成后,代码与在NVIDIA上的运行方式相同,没有出现任何错误。

实际运行时……由于显存充足,完全无需量化或轻量化操作即可执行。要注意的是,如果不设置设备,它会默认卸载到CPU,因此一定要设置GPU设备。

实际生成的结果是一首俳句,感觉像是哈利波特里的句子。运行时间因max_new_token的设置而异,有时是3秒,有时是20秒。

示例代码中的max_new_token设置较小,我也进行了扩展测试。根据相同的图像生成俳句,使用日语时效果也很不错。(因为借用的测试机无法复制粘贴文本,所以抱歉只能简单描述。)

这次使用的机器有8张GPU,但90B模型运行在1张GPU上即可。设置方式与cuda:0相同。如果将device_map设为auto,会自动分配设备,但无法准确判断具体使用了哪个设备,因此精确测试无法进行。运行速度有快有慢,但总体来说差距不大,仅有几秒的差异。

总结一下,通过网络下载模型权重非常耗时,要充分利用AMD MI300X的8张GPU和1.5TB的显存相当困难。对于HPC等需要处理大数据量的任务,可能能够完全利用其资源,但对于像LLM这种需要将模型加载到显存中进行推理的应用,192GB的显存对于单张GPU来说已经是非常高的规格了。要完全用尽其性能还需要一定的技能和需求。仅用于推理时可能无法充分利用,或许更适合多人共享使用。

价格并不算高(在业内来说),所以对于那些想要追赶GPU技术的公司来说,经过验证后购买也是一个不错的选择。

如有咨询,请联系Shinden Hightex公司。
https://www.shinden.co.jp/

能够体验到最先进的硬件设备真的非常棒,我会继续努力,充分发挥其性能!

© 2024, blueqat Inc. All rights reserved