诗林 发表于 2025-3-7 00:36:45

在 Kubernetes(k8s)集群中部署AI大模型 ollama并启用GPU加速

一、弁言

在本教程中,你将会举行以下利用:

[*]使用 K3s 在按需实例上搭建单节点 Kubernetes 集群。
[*]安装 NVIDIA GPU Operator,以便集群能够使用实例的 GPU。
[*]在集群中部署 Ollama 来提供 llama3模型服务。
终极实如今 Kubernetes(k8s)集群中部署AI大模型 ollama并启用GPU加速。
二、搭建单节点 Kubernetes 集群


[*]启动实例:如果尚未利用,可使用仪表板或云 API 启动一个实例,然后通过 SSH 连接到该实例。
[*]安装 K3s(Kubernetes):运行以下下令来安装 K3s:
curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE=644 sh -s - --default-runtime=nvidia

[*]验证集群状态:通过运行以下下令验证 Kubernetes 集群是否准备就绪:
k3s kubectl get nodes
你应该会看到类似如下的输出:
NAME            STATUS   ROLES                  AGE    VERSION
104-171-203-164   Ready    control-plane,master   100s   v1.30.5+k3s1

[*]安装 socat:运行以下下令安装 socat,它在后续步骤中用于启用端口转发:
sudo apt -y install socat
三、安装 NVIDIA GPU Operator

在 Kubernetes 集群中运行以下下令来安装 NVIDIA GPU Operator:
cat <<EOF | k3s kubectl apply -f -
apiVersion: v1
kind: Namespace
metadata:
name: gpu-operator
---
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: gpu-operator
namespace: gpu-operator
spec:
repo: https://helm.ngc.nvidia.com/nvidia
chart: gpu-operator
targetNamespace: gpu-operator
EOF
几分钟后,通过运行以下下令验证集群是否检测到实例的 GPU:
k3s kubectl describe nodes | grep nvidia.com
你应该会看到类似如下的输出,表明集群检测到了相应的 GPU 信息:
nvidia.com/cuda.driver-version.full=535.129.03
nvidia.com/cuda.driver-version.major=535
nvidia.com/cuda.driver-version.minor=129
nvidia.com/cuda.driver-version.revision=03
nvidia.com/cuda.driver.major=535
nvidia.com/cuda.driver.minor=129
nvidia.com/cuda.driver.rev=03
nvidia.com/cuda.runtime-version.full=12.2
nvidia.com/cuda.runtime-version.major=12
nvidia.com/cuda.runtime-version.minor=2
nvidia.com/cuda.runtime.major=12
nvidia.com/cuda.runtime.minor=2
nvidia.com/gfd.timestamp=1727461913
nvidia.com/gpu-driver-upgrade-state=upgrade-done
nvidia.com/gpu.compute.major=7
nvidia.com/gpu.compute.minor=0
nvidia.com/gpu.count=8
nvidia.com/gpu.deploy.container-toolkit=true
nvidia.com/gpu.deploy.dcgm=true
nvidia.com/gpu.deploy.dcgm-exporter=true
nvidia.com/gpu.deploy.device-plugin=true
nvidia.com/gpu.deploy.driver=pre-installed
nvidia.com/gpu.deploy.gpu-feature-discovery=true
nvidia.com/gpu.deploy.node-status-exporter=true
nvidia.com/gpu.deploy.operator-validator=true
nvidia.com/gpu.family=volta
nvidia.com/gpu.machine=Standard-PC-Q35-ICH9-2009
nvidia.com/gpu.memory=16384
nvidia.com/gpu.mode=compute
nvidia.com/gpu.present=true
nvidia.com/gpu.product=Tesla-V100-SXM2-16GB
nvidia.com/gpu.replicas=1
nvidia.com/gpu.sharing-strategy=none
nvidia.com/mig.capable=false
nvidia.com/mig.strategy=single
nvidia.com/mps.capable=false
nvidia.com/vgpu.present=false
nvidia.com/gpu-driver-upgrade-enabled: true
其中,nvidia.com/gpu.count=8 表示集群检测到 8 个 GPU,nvidia.com/gpu.product=Tesla-V100-SXM2-16GB 表明检测到的 GPU 是 Tesla V100 SXM2 16GB GPU。
留意:在本教程中,Ollama 只会使用 1 个 GPU。
四、在 Kubernetes 集群中部署 Ollama


[*]启动 Ollama 服务器:在 Kubernetes 集群中运行以下下令来启动 Ollama 服务器:
cat <<EOF | k3s kubectl apply -f -
apiVersion: v1
kind: Namespace
metadata:
name: ollama
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ollama
namespace: ollama
spec:
strategy:
    type: Recreate
selector:
    matchLabels:
      name: ollama
template:
    metadata:
      labels:
      name: ollama
    spec:
      containers:
      - name: ollama
      image: ollama/ollama:latest
      env:
      - name: PATH
          value: /usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      - name: LD_LIBRARY_PATH
          value: /usr/local/nvidia/lib:/usr/local/nvidia/lib64
      - name: NVIDIA_DRIVER_CAPABILITIES
          value: compute,utility
      ports:
      - name: http
          containerPort: 11434
          protocol: TCP
      resources:
          limits:
            nvidia.com/gpu: 1
      tolerations:
      - key: nvidia.com/gpu
      operator: Exists
      effect: NoSchedule
---
apiVersion: v1
kind: Service
metadata:
name: ollama
namespace: ollama
spec:
type: ClusterIP
selector:
    name: ollama
ports:
- port: 11434
    name: http
    targetPort: http
    protocol: TCP
EOF

[*]验证 Ollama 服务器状态:几分钟后,运行以下下令验证 Ollama 服务器是否接受连接并正在使用 GPU:
kubectl logs -n ollama -l name=ollama
你应该会看到类似如下的输出,最后一行表明 Ollama 正在使用单个 Tesla V100 - SXM2 - 16GB GPU:
2024/09/27 18:51:55 routes.go:1153: INFO server config env="map OLLAMA_SCHED_SPREAD:false OLLAMA_TMPDIR: ROCR_VISIBLE_DEVICES: http_proxy: https_proxy: no_proxy:]"
time=2024-09-27T18:51:55.719Z level=INFO source=images.go:753 msg="total blobs: 0"
time=2024-09-27T18:51:55.719Z level=INFO source=images.go:760 msg="total unused blobs removed: 0"
time=2024-09-27T18:51:55.719Z level=INFO source=routes.go:1200 msg="Listening on [::]:11434 (version 0.3.12)"
time=2024-09-27T18:51:55.720Z level=INFO source=common.go:49 msg="Dynamic LLM libraries" runners=""
time=2024-09-27T18:51:55.720Z level=INFO source=gpu.go:199 msg="looking for compatible GPUs"
time=2024-09-27T18:51:55.942Z level=INFO source=types.go:107 msg="inference compute" id=GPU-d8c505a1-8af4-7ce4-517d-4f57fa576097 library=cuda variant=v12 compute=7.0 driver=12.2 name="Tesla V100-SXM2-16GB" total="15.8 GiB" available="15.5 GiB"
五、访问 Ollama 服务

进入 Ollama 服务对应的 pod 内部,执行 ollama run llama3 下令举行模型安装。若提前构建了模型的镜像并在部署步骤中举行了部署,则可省略此手动安装步骤。
模型安装完成后,在 namespace 下的其他 pod 中可通过 curl 下令向 Ollama 服务哀求已安装的模型。
例如,执行
$ curl -L 'http://ollama:11434/api/generate' -H 'Content-Type: application/json' -d '{"model": "llama3", "prompt": "如那边理职场辩论", "format": "json", "stream": false}'
下令,即可获取模型对职场辩论处置惩罚相关题目的回答,展示了 Ollama 服务在 Kubernetes 环境中正常运行并能够对外提供大模型服务的能力。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 在 Kubernetes(k8s)集群中部署AI大模型 ollama并启用GPU加速