Nobisuke
Dekisugi
RAG
Privacy policy
2024/10/19 04:00
在AMD最新的MI300X服务器上用一张GPU运行了Llama-3.2-90B-Vision-Instruct。
大家好!我刚刚和Supermicro公司以及我们股东Shinden Hightex公司一起测试了最新的GPU。
Supermicro
Shinden Hightex
此次测试的目标是……
AMD Instinct™ MI300X
这台机器是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,提高了图像识别性能,并推出了针对智能手机的小型版本。
起初,我没有多想,安装了Mistral 7B模型,并使用Faiss作为RAG的向量数据库,还选择了一个合适的Embedding模型。结果显示,一切顺利,高速运行。我本打算做速度基准测试的对比,但还没来得及。
随后,我想立即试试Llama 3.2,于是发起了挑战。
由于AMD MI300X拥有192GB的显存,我想或许一张GPU就能运行90B模型。于是我尝试了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
完成后,代码与在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公司。
能够体验到最先进的硬件设备真的非常棒,我会继续努力,充分发挥其性能!
© 2024, blueqat Inc. All rights reserved