一、弁言
在本教程中,你将会举行以下利用:
- 使用 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 集群是否准备就绪:
你应该会看到类似如下的输出:
- 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[CUDA_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION: HTTPS_PROXY: HTTP_PROXY: NO_PROXY: OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_GPU_OVERHEAD:0 OLLAMA_HOST:http://0.0.0.0:11434 OLLAMA_INTEL_GPU:false OLLAMA_KEEP_ALIVE:5m0s OLLAMA_LLM_LIBRARY: OLLAMA_LOAD_TIMEOUT:5m0s OLLAMA_MAX_LOADED_MODELS:0 OLLAMA_MAX_QUEUE:512 OLLAMA_MODELS:/root/.ollama/models OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:0 OLLAMA_ORIGINS:[http://localhost https://localhost http://localhost:* https://localhost:* http://127.0.0.1 https://127.0.0.1 http://127.0.0.1:* https://127.0.0.1:* http://0.0.0.0 https://0.0.0.0 http://0.0.0.0:* https://0.0.0.0:* app://* file://* tauri://*] 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="[cpu_avx cpu_avx2 cuda_v11 cuda_v12 cpu]"
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |