当前位置: 首页 > 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.xdnf.cn/news/1397629.html

相关文章:

  • Oracle 数据库性能调优:从瓶颈诊断到精准优化之道
  • Zynq开发实践(FPGA之输入、输出整合)
  • K8s卷机制:数据持久化与共享
  • 【机器学习基础】机器学习中的容量、欠拟合与过拟合:理论基础与实践指南
  • 【高级机器学习】 4. 假设复杂度与泛化理论详解
  • HiFi-GAN模型代码分析
  • 理解JVM
  • web渗透ASP.NET(Webform)反序列化漏洞
  • psql介绍(PostgreSQL命令行工具)(pgAdmin内置、DBeaver、Azure Data Studio)数据库命令行工具
  • 【OpenGL】LearnOpenGL学习笔记17 - Cubemap、Skybox、环境映射(反射、折射)
  • sql简单练习——随笔记
  • 打工人日报#20250830
  • 鸿蒙ArkUI 基础篇-12-List/ListItem-界面布局案例歌曲列表
  • 音视频学习(六十二):H264中的SEI
  • [字幕处理]一种使用AI翻译mkv视频字幕操作流程 飞牛
  • 【Blender】二次元人物制作【一】:二次元角色头部建模
  • Java的Optional实现优雅判空新体验【最佳实践】
  • 【已解决】could not read Username for ‘https://x.x.x‘: No such device or address
  • 算法(③二叉树)
  • leetcode算法刷题的第二十二天
  • DVWA靶场通关笔记-文件包含(Impossible级别)
  • 数据治理进阶——解读数据治理体系基础知识【附全文阅读】
  • 【DreamCamera2】相机应用修改成横屏后常见问题解决方案
  • 用户态网络缓冲区设计
  • MQTT 连接建立与断开流程详解(二)
  • Vue3 + GeoScene 地图点击事件系统设计
  • 学习大模型,还有必要学习机器学习,深度学习和数学吗
  • DAEDAL:动态调整生成长度,让大语言模型推理效率提升30%的新方法
  • Oracle下载安装(学习版)
  • Nacos-3.0.3 适配PostgreSQL数据库