在Kubernetes中用NVIDIA GPU运行自己的OLLMAMA服务
2024/12/30 21:03:22
本文主要是介绍在Kubernetes中用NVIDIA GPU运行自己的OLLMAMA服务,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在我的上一篇文章中,我分享了如何在云 Kubernetes (K8s) 集群中托管自己的 Ollama 服务。这次,让我们更上一层楼,通过 GPU 来提升你的 Ollama 服务。
我会用和之前一样的设置,并强调所做的改动。首先,在你的K8s集群中,你需要添加一个带有GPU的节点。我的集群位于Google Cloud上,我在那里添加了一个带有NVIDIA T4 GPU的节点。
安装 GPU 驱动程序关于如何使用包管理器安装显卡驱动的信息,请参阅以下链接(点击此处):NVIDIA 驱动安装快速入门指南。或者,您还可以从NVIDIA 官方驱动页面(点击此处)下载.run
安装包并进行安装。
$ nvidia-smi 2024年8月16日 星期五 21:54:53 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.183.01 驱动版本: 535.183.01 CUDA 版本: 12.2 | |-----------------------------------------+----------------------+----------------------+ | GPU 名称 持久性-M | 总线-ID 显示输出-A | 易失性未校正错误ECC | | 风扇速度 温度 性能 功耗:使用/最大值 | 内存使用 | GPU利用率 计算 | | | | MIG | |=========================================+======================+======================| | 0 Tesla T4 关闭 | 00000000:00:04.0 关闭 | 0 | | N/A 67°C P0 29W / 70W | 6104MiB / 15360MiB | 0% 默认 | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | 进程: | | GPU GI CI PID 类型: 进程名称: GPU 内存使用 | | ID ID | |=======================================================================================| | 0 N/A N/A 81441 C ...unners/cuda_v11/ollama_llama_server 6100MiB | +---------------------------------------------------------------------------------------+
安装NVIDIA的容器工具包(NVIDIA Container Toolkit):NVIDIA Container Toolkit
检查你的容器运行时的状态,使用 kubectl get nodes -o wide
。在我的情况里是 containerd://1.7.12
$ kubectl get nodes -o wide NAME 状态: 角色: 年龄: 版本: 内部IP: 外部IP: 操作系统镜像: 内核版本: 容器运行时: ollama-gpu 就绪 无 105m v1.30.3 10.148.0.2 无 Ubuntu 20.04.6 LTS 5.15.0-1066-gcp containerd://1.7.12
接下来,按照此处的指引安装NVIDIA容器工具包。
使用 nvidia-ctk
命令在 GPU 节点上进行容器运行时的设置
运行如下命令以配置containerd运行时使用NVIDIA容器工具包: $ sudo nvidia-ctk runtime configure --runtime=containerd
nvidia-ctk
命令会修改主机上的 /etc/containerd/config.toml
文件,使其适合使用 NVIDIA 容器运行时,这样 containerd
就可以使用该运行时了。
有效的处理器配置在运行时部分中设置。
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.${HANDLER_NAME}] /* ${HANDLER_NAME} 是一个变量或占位符 */ /* 以下配置用于指定插件的运行时环境 */ /* 这是一个插件配置中的部分 */
检查 config.toml
,处理器是 nvidia
。我们将使用该处理器在 Runtime 类中。
$ cat /etc/containerd/config.toml disabled_plugins = [] imports = [] oom_score = 0 plugin_dir = "" required_plugins = [] root = "/var/lib/containerd" state = "/run/containerd" version = 2 [plugins] [plugins."io.containerd.grpc.v1.cri"] [plugins."io.containerd.grpc.v1.cri".containerd] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia] base_runtime_spec = "" container_annotations = [] pod_annotations = [] privileged_without_host_devices = false runtime_engine = "" runtime_root = "" runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options] BinaryName = "/usr/bin/nvidia-container-runtime" CriuImagePath = "" CriuPath = "" CriuWorkPath = "" IoGid = 0 IoUid = 0 NoNewKeyring = false NoPivotRoot = false Root = "" ShimCgroup = "" SystemdCgroup = true ...
使用 YAML 文件来创建 nvidia
运行时类型
apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: nvidia handler: nvidia # 这是一个定义了nvidia作为运行时类处理器的k8s配置片段。
在 pod spec 中指定 runtimeClassName: nvidia
,并将节点分配到名为 nodeName: ollama-gpu
的 GPU 节点上。下面是一个示例 YAML 文件:
apiVersion: v1 kind: Pod metadata: name: 示例 Pod spec: runtimeClassName: nvidia nodeName: ollama-gpu containers: - name: 示例容器 image: tensorflow:latest-gpu
apiVersion: apps/v1 kind: Deployment metadata: name: ollama namespace: ollama spec: replicas: 1 selector: matchLabels: name: ollama template: metadata: labels: name: ollama spec: runtimeClassName: nvidia nodeName: ollama-gpu containers: - name: ollama image: ollama/ollama:0.3.5 volumeMounts: - mountPath: /root/.ollama name: ollama-storage ports: - name: http containerPort: 11434 protocol: TCP env: - name: PRELOAD_MODELS value: "llama3.1" - name: OLLAMA_KEEP_ALIVE value: "12h" lifecycle: postStart: exec: command: ["/bin/sh", "-c", "for model in $PRELOAD_MODELS; do ollama run $model \"\"; done"] volumes: - hostPath: path: /opt/ollama type: DirectoryOrCreate name: ollama-storage --- apiVersion: v1 kind: Service metadata: name: ollama namespace: ollama spec: type: ClusterIP selector: name: ollama ports: - port: 80 name: http targetPort: http protocol: TCP
检查 OLLAMA 是否正在运行
检查一个 OLLAMA pod 内的运行情况,应该显示 100% GPU
使用率:
$ kubectl get po -n ollama NAME READY STATUS RESTARTS AGE ollama-55ddc567bd-zmd9f 1/1 Running 0 177m $ kubectl exec -it -n ollama ollama-55ddc567bd-zmd9f -- bash root@ollama-55ddc567bd-zmd9f:/# ollama ps NAME ID 6.7 GB 100% GPU 从现在起11小时后
SIZE UNTIL
就这样,搞定啦!你现在有了一个在带有GPU的K8s上运行的托管的OLLAMA服务。
你可以使用WebUI来测试,并享受流畅体验。如果有上下文明确指Python库而非API,则维持“Python库”。否则建议改为“Python库或Python API”。
这篇关于在Kubernetes中用NVIDIA GPU运行自己的OLLMAMA服务的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-07Kubernetes部署策略详解:滚动更新、固定更新、蓝绿部署和金丝雀发布
- 2025-01-03使用Oracle数据库、Helidon和Coherence构建Kubernetes容器,轻松又实用 — 第6部分:构建容器,享受部署的乐趣
- 2025-01-03Django微服务与Docker和Kubernetes部署(系列第五篇:实战篇)
- 2025-01-02云原生Digest:Kubernetes v1.31版本中的移除功能和重大变更
- 2024-12-31Kubernetes工作节点的自动加入方法
- 2024-12-31Docker和Kubernetes面试速成指南 ??
- 2024-12-30玩乐案例:用开源技术从Hadoop迁移到Kubernetes的PB级数据平台之旅
- 2024-12-30平台工程实战:用Score和Humanitec部署线上精品店示例应用
- 2024-12-26使用Goldilocks优化Kubernetes资源请求和限制配置指南
- 2024-12-26Canonical Kubernetes 1.32稳定版发布:无缝集群创建与管理