当前位置: 首页 > news >正文

基于 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:latestctr -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.ymlvim 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: ollamanamespace: ollama
spec:serviceName: "ollama"replicas: 1selector:matchLabels:app: ollamatemplate:metadata:labels:app: ollamaspec:containers:- name: ollamaimage: swr.cn-south-1.myhuaweicloud.com/migrator/ollama:0.5.7ports:- containerPort: 11434resources:requests:cpu: "1000m"memory: "2Gi"# nvidia.com/gpu: "4"  # 如果要用英伟达GPU,请声明下GPU卡的数量limits:cpu: "4000m"memory: "4Gi"volumeMounts:- name: ollama-volumemountPath: /root/.ollamatty: truevolumeClaimTemplates:- metadata:name: ollama-volumespec:storageClassName: sfsturbo-subpath-scaccessModes: ["ReadWriteOnce"]resources:requests:storage: 200Gi  # 确保磁盘容量能存储下所有待下载的大模型
---
apiVersion: v1
kind: Service
metadata:name: ollamanamespace: ollamalabels:app: ollama
spec:type: ClusterIPports:- port: 11434protocol: TCPtargetPort: 11434selector: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: 2TstorageClassName: nfs-storage  # 使用定义的 StorageClass
---
apiVersion: apps/v1
kind: Deployment
metadata:name: deepseek-r1-model
spec:replicas: 1selector:matchLabels:app: deepseek-r1template:metadata:labels:app: deepseek-r1spec:containers:- name: deepseek-r1image: deepseek-r1/deepseek-r1-model:671bresources:requests:memory: "128Gi"cpu: "32"nvidia.com/gpu: 1  # 请求 1 个 NVIDIA GPUlimits:memory: "256Gi"cpu: "64"nvidia.com/gpu: 1  # 限制最多使用 1 个 NVIDIA GPUports:- containerPort: 8081volumeMounts:- name: deepseek-storagemountPath: /mnt/modelsvolumes:- name: deepseek-storagepersistentVolumeClaim:claimName: deepseek-pvc
---
apiVersion: v1
kind: Service
metadata:name: deepseek-r1-service
spec:selector:app: deepseek-r1ports:- protocol: TCPport: 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"}'
http://www.dtcms.com/a/359142.html

相关文章:

  • 内存管理(智能指针,内存对齐,野指针,悬空指针)
  • Java中Integer转String
  • 为什么企业需要项目管理
  • 安卓编程 之 线性布局
  • 树莓派4B 安装中文输入法
  • AtCoder Beginner Contest 421
  • Mysql 学习day 2 深入理解Mysql索引底层数据结构
  • 【开题答辩全过程】以 基于WEB的茶文化科普系统的设计与实现为例,包含答辩的问题和答案
  • 用简单仿真链路产生 WiFi CSI(不依赖专用工具箱,matlab实现)
  • 面试tips--MyBatis--<where> where 1=1 的区别
  • 如何查看Linux系统中文件夹或文件的大小
  • 【LeetCode - 每日1题】有效的数独
  • SQLSugar 快速入门:从基础到实战查询与使用指南
  • MySQL 在 CentOS 上的安装与配置文件路径详解
  • 【系列06】端侧AI:构建与部署高效的本地化AI模型 第5章:模型剪枝(Pruning)
  • 【LeetCode - 每日1题】鲜花游戏
  • 深度学习:洞察发展趋势,展望未来蓝图
  • Verilog 硬件描述语言自学——重温数电之典型组合逻辑电路
  • 深度学习通用流程
  • 用更少的数据识别更多情绪:低资源语言中的语音情绪识别新方法
  • nestjs连接oracle
  • 大模型备案、算法备案补贴政策汇总【广东地区】
  • SNMPv3开发--snmptrapd
  • CNB远程部署和EdgeOne Pages
  • More Effective C++ 条款18:分期摊还预期的计算成本(Amortize the Cost of Expected Computations)
  • 数据库的CURD
  • Shell 秘典(卷三)——循环运转玄章 与 case 分脉断诀精要
  • C语言类型转换踩坑解决过程
  • Java高并发架构核心技术有哪些?
  • 安装Redis