GKE + Gemma + Ollama:灵活部署大模型的超强三剑客
今天,我们将探索各种大型语言模型(LLM)的部署细节,特别关注Google Gemma。我们选择的平台将是GKE,并且将得到来自Ollama框架的宝贵支持。我们的旅程将通过Open WebUI来实现,其界面与原版OpenAI ChatGPT提示界面非常相似,确保无缝且直观的用户体验。
在深入探讨细节之前,让我们先来谈谈摆在我们面前的问题:为什么要选择这条道路?在我看来,我的理由非常明确,可以总结为几个关键因素:
- 成本效益:大型语言模型(LLM)可以在公共云基础设施上运行,这可能提供更经济的解决方案,特别是对于预算有限的小型组织或研究实体。然而,值得注意的是,这种好处是条件性的,因为像Vertex AI Studio和OpenAI开发者平台这样的平台已经提供了成本效益高、全面且管理式的服务。Vertex AI还将管理您的模型的生命周期和可观察性。请记住这一点。
- 定制和灵活性:Ollama的核心设计注重于定制、灵活性和开源原则。虽然云提供商的模型注册表提供了广泛的模型选择——以谷歌的模型花园为例,其中提供了超出全面的模型选择——在某些情况下,您感兴趣的特定模型可能并不容易获得。这就是Ollama发挥作用的地方,提供了一个解决方案。
- 跨环境的便携性:Ollama的设计是云和平台无关的,这意味着它可以自由地部署在任何支持Docker的私有或公共平台上,甚至可以在您的笔记本电脑上部署。这与Vertex AI和SageMaker等其他强大的解决方案形成了对比,后两者本质上与各自的云环境绑定在一起。这就是为什么Docker和Kubernetes几乎接管了整个市场的原因,同样的道理也适用于x86。
- 隐私和数据控制:对于那些倾向于使用完全开源的模型并在完全私人的框架中进行部署的人来说,这种方法为确保数据隐私和完全掌控部署环境提供了最佳途径。例如,使用 🌋 LLaVA 和Gemma。
∘ GKE平台介绍
∘ 部署Ollama和Open WebUI(原名Ollama WebUI)
∘ GPU与CPU——速度之别
∘ Ollama当前的限制:进一步探讨
∘ 要点总结
对于这个实验,我的GKE平台配置侧重于以效率和性能为优先。
- GKE 1.27(常规渠道):确保与最新Google Kubernetes Engine功能的兼容性和访问权限。
- 容器优化的OS:缩短节点启动时间,加速工作负载部署。你可以在我的旧文章中了解更多。
g2-standard-4
节点池(NVIDIA L4 GPU):强大的GPU和CPU资源组合,非常适合ML任务。基准测试结果将展示其优点。- 管理NVIDIA GPU驱动程序:通过直接将驱动程序集成到GKE中,简化了设置流程,确保只需一个参数
gpu-driver-version
即可实现无缝体验。集群启动后即可使用。
NVIDIA L4 GPU(https://www.nvidia.com/en-us/data-center/l4/)在原始规格和性能方面表现出色,为计算密集型的机器学习任务提供了强大的处理能力:
- 7680 个着色器处理器,240 个 TMU,80 个 ROP,60 个 RT Core,240 个 Tensor Core。
- 24GB GDDR6 内存,300GB/s 带宽。
- 485 万亿次 FP8 浮点运算。
G2 机器系列是该系列的底层平台,基于英特尔Cascade Lake处理器,它提供了出色的全方位处理性能来补充GPU的功能,确保其保持高效运行。
G2 支持 Spot VM:为能够容忍中断的合适机器学习工作负载提供显著的成本节约(大约节省 67% 的费用)。
安装 Ollama 和 Open WebUI(原名 Ollama WebUI)K8s成熟的生态系统简化了部署流程,现在只需要执行helm install
和kubectl apply
命令。Ollama的部署则利用了一个社区维护的Helm Chart,可在GitHub上找到,并提供了一个标准values.yaml
文件以指导配置。
ollama:
gpu:
enabled: true # 启用GPU并指定类型和数量
type: 'nvidia'
number: 1
models:
- gemma:7b
- llava:13b
- llama2:7b # 模型列表: 包含gemma:7b、llava:13b和llama2:7b模型
persistentVolume:
enabled: true # 持久卷: 启用持久卷并设置大小和存储类
size: 100Gi # 大小: 100Gi (Gi表示吉字节)
storageClass: "premium-rwo" # 存储类: 'premium-rwo' (premium-rwo是一种存储类配置)
相反地,对于部署Open WebUI,选择转向使用社区提供的官方Chart和Kustomize模板,这为实现提供了更加合适的选择。
open-webui/kubernetes/manifest at main · open-webui/open-webui用户友好的WebUI用于LLMs(原名Ollama WebUI) - github.com虽然 Open WebUI 提供了 Ollama 部署的清单,但我更喜欢 Helm Chart 的功能更全面。部署完成后,你应该可以导航到 GCP 负载均衡器的 IP 地址的 8080 端口来访问 Open WebUI 的登录界面。
在 ollama
命名空间中的简单检查应该显示所有系统都处于运行状态或状态良好。
我们来探讨一个经典科学问题:为什么天空是蓝色的?
这是实时视频——Gemma 7B在NVIDIA L4上以闪电般的速度提供结果!想试试看吗?在Ollama上部署模型从未如此简单:只需输入命令ollama run gemma:7b
。
现在平台已经准备好可以用了,我自然不会错过一个好的基准测试 😉。我针对不同模型进行了两种类型的基准测试,嘿嘿。
- 为什么天空是蓝色的这个问题:询问Gemma 2B和7B,以及LLaMA v1.6 7B和13B。测试它们的多模态和单模态能力!
[图片里有什么?](https://ollama.com/library/llava#:~:text=of%20the%20picture.-,API%20Usage,-curl%20http%3A//localhost)
用于LLaMA v1.6 7B和13B:这里的重点是图像分析。
别担心,我可不想搞什么大型语言模型对决,那完全是另一个话题,远超我的理解范围。我只想看看不同类型的机器如何影响速度和响应性。
地区 europe-west4
的价格比较
没有GPU加速的情况下,推理性能完全依赖于单纯的CPU性能和内存带宽。因此,我部署了Ollama,未对CPU或内存设限,验证CPU达到了最大负载。然而,推理任务常常会因为内存带宽不足和内存架构的限制而成为瓶颈。
这个图展示了几个关键指标:
total duration
:总耗时。response_token/s
:响应速度。monthly cost
:月费。
这里有很多需要解释的地方,但我想要先给大家一个警告:你即将看到的性能数字只适用于这个特定的场景。LLM的世界既宽广又变化莫测,当前的情况可能几天内就会变得完全不同,甚至在稍微不同的场景下同样适用。
GPU 主导:
- GPU提供比CPU低得多的延迟(每秒更多的token量)。即使每月花费12000美元的180个专用CPU核心也无法与之竞争。
- 相比旧的T4,NVIDIA L4在速度上提高了15%,但成本增加了78%。持续使用折扣已考虑在内。
- 虽然A100非常快,大约是L4的三倍速度,但由于其高昂的价格和主要专注于训练,对于大多数推理任务来说,它显得有些大材小用了。然而,它仍然在不到3.6秒的时间内给出了答案 🤯。
CPU 瓶颈:
- 更小的CPU毫无疑问运行缓慢且价格出奇地高。
- 即使是成本相当的CPU (
c3-highcpu-22
/c3d-highcpu-16
),在吞吐量上也比L4和T4低。 - 最大的CPU (
c3-standard-176
/c3d-standard-360
),由于其高昂的成本,性能表现较差。 - C3扩展性差,这可能是
ollama
/llama.cpp
、我的设置或C3实例及其缺乏vNUMA拓扑的问题。无论如何,高昂的价格使其毫无意义。
现在来看一下图像识别任务的提示,这次我们选择了 LLaVA v1.6,具有 130 亿参数的模型。
GPU在性能上的优势在这里同样存在,证明了CPU在这个领域根本竞争不过。值得一提的是,c3-standard-176
最终超出了c3-highcpu-22
,这打消了我对于C3或我的配置可能存在错误的疑惑。
按照惯例,所有结果都可在此 Google 表单中查询。
[ollama][medium] - GPU vs. CPU - 2024年3月28日机器类型,类型,CPU配置,内存,加速卡,GPU内存,月费用 g2-standard-4,4 vCPU / 2…docs.google.com在讨论Ollama的几个要点之前,我想分享一下我在这个环境中使用的具体的SHA和标签。AI世界的发展速度非常快,任何人如果尝试重现我的工作,可能会发现自己几周后面对的是一个完全不同的情况。
ollama
v0.1.29;- Gemma 2B SHA b50d6c999e59,版本号 v0.1.29;
- Gemma 7B SHA 430ed3535049,版本号 v0.1.29;
- LLaVA v1.6 7B SHA 8dd30f6b0cb1,版本号 v1.6;
- LLaVA v1.6 13B SHA 0d0eb4d7f485,版本号 v1.6。
我们再来看看这些基准测试是如何进行的:
curl http://localhost:8080/api/generate -d \
'{
"model": "gemma:7b",
"prompt": "为什么天空是蓝色的?",
"stream": false,
"options": {"seed": 100}
}'
curl http://localhost:8080/api/generate -d \
'{
"model": "llava:13b",
"prompt":"这张图片里都有什么?",
"images": ["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"],
"stream": false,
"options": {"seed": 100}
}'
正如你所见,在记录结果的过程中:
- 直接与Ollama API进行通信。
- 流式传输已禁用。
- 所有提示都使用同一个种子。
尽管记住Ollama是一个快速发展的项目这一点很重要,对资深用户来说,了解一些关键的限制因素也很有用。
- 仓库锁定瓶颈:被锁定在
[registry.ollama.ai](https://github.com/ollama/ollama/blob/v0.1.29/server/modelpath.go#L22)
限制了创新和实验。想象一下如果 Docker 永远只停留在 Quay.io!虽然可能有变通办法,但一个原生支持多样化的模型来源的解决方案将是巨大的进步,并且 社区已经提出了建议。 - 并行处理错失的机会:Ollama 的顺序请求处理限制了其实际吞吐量。想象一下在高流量场景中用户经历令人失望的延迟。好消息是并行解码功能已合并,并在 v0.1.30 版本中引入——请留意上游的问题 #358。
- AVX512 的失望和新兴选择:失望的是 AVX512 优化在 Ollama 中并未带来预期的性能提升。我甚至尝试过改善它,但在面对现实之前:AVX512 实际上比 AVX2 更慢 😭(当然,核心时钟还要慢一半),并且 “我希望 AVX512 死得痛苦”。Intel AMX 展现出更光明的前景。其有竞争力的价格,早期基准测试结果,以及在某些工作负载中性能可能超越 GPU 的潜力,使其成为一个令人兴奋的替代方案。在这一问题上,我强烈建议深入研究 The Next Platform 对 AI 推理为何将更多依赖 CPU 的见解。
使用 Ollama 在 GKE 上部署 LLM 也可以为重视定制化、灵活性、潜在的成本节省和隐私的用户提供一个引人注目的选择。这种方法解锁了使用商业平台不可用的模型的能力,并提供了对部署环境的完全控制。至关重要的是,GPU 加速对于实现最佳 LLM 性能不可或缺,远远优于强大的 CPU 实例。然而,需要注意的是,Ollama 当前存在一些限制,例如依赖于注册表和顺序请求处理,这些可能会影响实际应用场景。随着 Ollama 的持续发展,这些限制有望在未来得到解决,进一步增强其潜力。
我希望你玩得开心,这次经历对你来说也是一段新的旅程。如果有任何问题,欢迎随时留言,对我来说也是如此。
共同学习,写下你的评论
评论加载中...
作者其他优质文章