基于 Kubernetes 的 Ollama DeepSeek-R1 模型部署

基于 Kubernetes 的 Ollama DeepSeek-R1 模型部署

一、理论背景

1. Ollama

Ollama是由Ollama公司开发的AI模型工具,专注于将大规模语言模型(如GPT-3、BERT、T5等)本地化部署。它的主要特点如下:
- 私有化部署:允许在本地机器上运行AI模型,避免将敏感数据上传到外部服务器。
- 支持多种语言模型:如GPT、T5等。
- 高效性:本地部署提高了对数据安全的控制。
- 易于集成:提供简单的API接口,便于与现有应用集成。

2. DeepSeek

DeepSeek是一个智能搜索和深度学习驱动的工具,旨在提升大规模数据集的处理能力,尤其是在NLP和文本数据搜索方面。它的主要特点包括:
- 深度学习驱动的搜索:通过深度学习技术优化传统的搜索引擎。
- 语义搜索:提供更精准的搜索结果。
- 大规模数据处理:适用于新闻、电商、科研等行业。
- 自学习能力:能够根据用户行为进行自我优化。

二、硬件与环境要求

1. 硬件要求

由于部署的模型是大规模的671B参数模型,建议的硬件配置如下:
- 计算资源:至少32 vCPU,推荐64 vCPU。
- 内存:至少128GB内存,推荐256GB内存。
- 存储:每个节点最好配备1TB SSD或以上存储。
- 网络要求:内部网络带宽至少10Gbps。

在这里插入图片描述

2. Kubernetes集群要求

- Kubernetes版本:1.20-1.30
- 集群配置:多节点部署,支持资源调度与扩展。
- GPU支持:如果需要加速计算,建议启用GPU资源。

三、部署前准备步骤

1. 获取模型Docker镜像

确保已经获取到Ollama和DeepSeek-R1的Docker镜像。使用以下命令拉取镜像:
 ctr -n=k8s.io images pull ollama/ollama-model:latest
 ctr -n=k8s.io images pull deepseek-r1/deepseek-r1-model:671b

如过容器运行时是docker:
docker pull ollama/ollama-model:latest
docker pull deepseek-r1/deepseek-r1-model:671b

2. 安装Nvidia 显卡 和 切换容器运行时为nvidia

Nvidia显卡,执行nvidia-smi 没有输出则说明没有装显卡驱动
国产显卡执行npu-smi info 
怎么检查服务器是不是带有显卡?
lspci | grep -i nvidia
将下载的 gpu 驱动文件上传到服务器安装即可
直接安装即可,视情况加参数
chmod a+x NVIDIA-Linux-x86_64-535.154.05.run
./NVIDIA-Linux-x86_64-535.154.05.run

3.K8S中如何使用GPU资源

nvidia-docker 并不会与已经安装好的 Docker 冲突。nvidia-docker 是一个额外的工具,用于在 Docker 中更方便地使用 gpu,它与 Docker 共存并为其提供额外的功能。在安装过程中,nvidia-docker 会检测系统是否安装了 Docker,并会自动地与 Docker 进行集成,以提供对 gpu 容器的支持。因此,安装 nvidia-docker 后,可以继续使用已经安装好的 Docker 工具,并能够在 Docker 中更方便地使用 gpu。 nvidia-docker 属于旧一代的工具,适用于 docker19.3 以下版本,目前,官方推荐使用 nvidia-container-toolkit

4. 安装K8S nvidia 插件

查看某GPU节点资源情况
这说明 k8s 节点没有识别到 gpu 资源,即使当前节点有 gpu 资源

在这里插入图片描述

k8s 中要识别 gpu 资源,需要安装 nvidia-device-plugin 插件,注册分配 gpu 主要由 device-plugin 插件完成

官网:https://github.com/NVIDIA/k8s-device-plugin

wget https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml

vim nvidia-device-plugin.yml   #该文件存在 hostpath 的卷,注意确认 kubelet 的安装路径正确.

kubectl apply -f nvidia-device-plugin.yml
kubectl  get pod -n kube-system  | grep nvidia-device-plugin  #查看 k8s 的 gpu 节点资源情况就可以显示 gpu 资源了

在这里插入图片描述

四、准备Kubernetes配置文件

1. Ollama部署配置

vim ollama-deployment.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: ollama
  namespace: ollama
spec:
  serviceName: "ollama"
  replicas: 1
  selector:
    matchLabels:
      app: ollama
  template:
    metadata:
      labels:
        app: ollama
    spec:
      containers:
        - name: ollama
          image: swr.cn-south-1.myhuaweicloud.com/migrator/ollama:0.5.7
          ports:
            - containerPort: 11434
          resources:
            requests:
              cpu: "1000m"
              memory: "2Gi"
              # nvidia.com/gpu: "4"  # 如果要用英伟达GPU,请声明下GPU卡的数量
            limits:
              cpu: "4000m"
              memory: "4Gi"
          volumeMounts:
            - name: ollama-volume
              mountPath: /root/.ollama
          tty: true
  volumeClaimTemplates:
    - metadata:
        name: ollama-volume
      spec:
        storageClassName: sfsturbo-subpath-sc
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 200Gi  # 确保磁盘容量能存储下所有待下载的大模型
---
apiVersion: v1
kind: Service
metadata:
  name: ollama
  namespace: ollama
  labels:
    app: ollama
spec:
  type: ClusterIP
  ports:
    - port: 11434
      protocol: TCP
      targetPort: 11434
  selector:
    app: ollama
    

2.Deepseek-R1部署配置

vim  deepseek-r1-deployment.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: deepseek-pvc
spec:
  accessModes:
    - ReadWriteMany  # NFS 支持多个节点同时读写
  resources:
    requests:
      storage: 2T
  storageClassName: nfs-storage  # 使用定义的 StorageClass
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deepseek-r1-model
spec:
  replicas: 1
  selector:
    matchLabels:
      app: deepseek-r1
  template:
    metadata:
      labels:
        app: deepseek-r1
    spec:
      containers:
        - name: deepseek-r1
          image: deepseek-r1/deepseek-r1-model:671b
          resources:
            requests:
              memory: "128Gi"
              cpu: "32"
              nvidia.com/gpu: 1  # 请求 1 个 NVIDIA GPU
            limits:
              memory: "256Gi"
              cpu: "64"
              nvidia.com/gpu: 1  # 限制最多使用 1 个 NVIDIA GPU
          ports:
            - containerPort: 8081
          volumeMounts:
            - name: deepseek-storage
              mountPath: /mnt/models
      volumes:
        - name: deepseek-storage
          persistentVolumeClaim:
            claimName: deepseek-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: deepseek-r1-service
spec:
  selector:
    app: deepseek-r1
  ports:
    - protocol: TCP
      port: 8081       # 服务端口
      targetPort: 8081  # 容器端口
      nodePort: 30001   # 分配一个静态端口,确保在所有节点上都能访问
  type: NodePort

3.部署到Kubernetes

通过以下命令将Kubernetes资源应用到集群中:
kubectl apply -f ollama-deployment.yaml
kubectl apply -f deepseek-r1-deployment.yaml

4.检查POD 状态

kubectl get pods -n namespace
确保所有Pod都正常运行。如果Pod未启动,可以使用 kubectl describe pod <pod-name> 来查看详细的错误信息。

在这里插入图片描述

5.检查服务状态

kubectl get svc	#--通过NodePort端口访问。

你可以在浏览器或者API客户端中使用这个外部IP访问模型接口,例如:
- Ollama模型API:
 http://<external-ip>:30000
 
- DeepSeek-R1模型API:
 http://<external-ip>:30001

6.调用接口模型

如果模型提供了RESTful API,你可以通过HTTP请求调用。例如,使用curl进行推理请求:
# 假设Ollama模型提供一个推理接口
curl -X POST http://<external-ip>:30000/inference -d '{"input": "your text input"}'
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

atomLg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值