侧边栏壁纸
博主头像
CYC的个人博客博主等级

学习使人进步

  • 累计撰写 96 篇文章
  • 累计创建 11 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
k8s

K8S 1.30环境中私有化部署 Ollama 和 DeepSeek-R1(671B模型)

Administrator
2025-02-19 / 0 评论 / 0 点赞 / 66 阅读 / 13364 字

K8S 1.30环境中私有化部署 Ollama 和 DeepSeek-R1(671B模型)

不同模型参数,配置要求如下:

一、理论介绍:

1. Ollama

Ollama 是一个由 Ollama 公司开发的 AI 模型工具。它专注于将大规模语言模型(如 GPT-3 和其他类似模型)进行本地化部署,特别是让这些模型可以在用户自己的硬件上运行,而不依赖于云计算资源。这使得用户可以更好地控制数据和模型的运行,而不必担心将敏感数据上传到外部服务器。

主要特点:

  • 私有化部署

    :Ollama 允许在本地机器上运行大型语言模型(如 GPT-3、BERT、T5 等),使得企业和个人可以避免数据外泄的风险。

  • 支持多种语言模型

    :Ollama 支持多种预训练的大型语言模型,能够为用户提供类似 GPT 或 T5 的推理能力。

  • 高效性

    :通过本地化部署,Ollama 能够在企业的硬件上运行,大大提升了对隐私和数据安全的控制能力。

  • 易于集成

    :提供简单的 API 接口,可以将其嵌入到现有应用程序或工作流中,简化 AI 模型的集成和管理。


使用场景:

  • 隐私保护

    :对于数据隐私要求严格的行业(如金融、医疗等),Ollama 提供了一个合适的本地化 AI 解决方案。

  • 无需云端依赖

    :在无法依赖云服务的环境中(例如离线工作场景),Ollama 能够帮助用户独立运行 AI 模型。


2. DeepSeek

DeepSeek 是一个与深度学习和智能搜索相关的项目,旨在提升人工智能对大规模数据集的处理能力,特别是在自然语言处理(NLP)和大规模文本数据搜索方面。

主要特点:

  • 深度学习驱动的搜索

    :DeepSeek 使用深度学习技术改进了传统搜索引擎的性能,能够在大量的非结构化文本数据中执行更智能的搜索和推理。

  • 语义搜索

    :与传统的基于关键字的搜索不同,DeepSeek 利用 NLP 技术进行语义搜索,通过理解上下文和语境,提供更精准的搜索结果。

  • 大规模数据处理

    :DeepSeek 特别适用于需要处理大规模文本数据的场景,比如新闻网站、大型电商平台或研究机构的文献库。

  • 自学习能力

    :DeepSeek 系统通常能够根据用户的行为和反馈进行自我调整,从而不断优化搜索和推荐效果。


使用场景:

  • 企业搜索系统

    :DeepSeek 可以应用于企业内部搜索系统,帮助用户在海量文档、知识库中快速找到所需信息。

  • 推荐系统

    :通过 DeepSeek 的智能语义搜索能力,可以应用于电商、社交媒体和内容平台的推荐系统,提供更符合用户兴趣的结果。

  • 学术研究

    :在需要处理大量科研文献的领域,DeepSeek 能够为研究人员提供更加精确和高效的文献搜索和分析工具。


总结:

  • Ollama

     主要集中在本地化部署大型语言模型,帮助用户实现无需云端的 AI 模型部署,关注隐私保护和本地化计算。

  • DeepSeek

     主要侧重于利用深度学习技术改进搜索和信息检索,通过语义理解优化传统的搜索引擎,特别适用于大规模数据集的处理和智能推荐。

这两个工具都在各自领域中推动了 AI 技术的应用和发展,Ollama 更专注于本地化的 AI 模型应用,而 DeepSeek 更注重语义搜索和智能信息检索。

二、实操练习:


1. 前提准备

硬件要求

由于部署的模型是大规模的671B参数模型,需要高性能计算资源。建议的硬件配置为:

  • 计算资源

    • 至少 32 vCPU,推荐 64 vCPU

    • 至少 128 GB 内存,推荐 256 GB 内存

    • 每个节点最好配备 1TB SSD 或以上存储。

  • 网络要求

    • 内部网络带宽至少 10Gbps,确保模型的分布式推理时网络不会成为瓶颈。


Kubernetes集群

  • Kubernetes版本:1.30

  • 建议集群有多个节点,确保可以进行资源调度和扩展。

  • 启用 GPU资源(如果需要加速计算)。


2. 获取模型Docker镜像

确保你有合适的 Ollama 和 DeepSeek-R1 的Docker镜像。如果这些镜像是公开的,直接从Docker Hub或其他容器仓库获取;如果是私有镜像,你需要提供正确的凭证和地址。

ctr -n=k8s.io images pull ollama/ollama-model:latest
ctr -n=k8s.io images pull deepseek-r1/deepseek-r1-model:671b

3. 准备Kubernetes配置文件

你需要创建Kubernetes的Deployment和Service配置文件,并确保配置好Persistent Volume (PV) 和 Persistent Volume Claim (PVC) 来存储模型数据。这里假设你已经通过Docker镜像准备好了相关镜像。

3.1 Persistent Volume (PVC) 配置

在Kubernetes中,PVC(Persistent Volume Claim)用于请求持久化存储。由于模型非常大,可能需要大容量的存储。

model-pvc.yaml

apiVersion: v1
kind:PersistentVolumeClaim
metadata:
name:model-pvc
spec:
accessModes:
    -ReadWriteOnce
resources:
    requests:
      storage:2Ti# 根据模型大小设置存储容量

3.2 Ollama部署文件

ollama-deployment.yaml

apiVersion: apps/v1
kind:Deployment
metadata:
name:ollama-model
spec:
replicas:1
selector:
    matchLabels:
      app:ollama
template:
    metadata:
      labels:
        app:ollama
    spec:
      containers:
        -name:ollama
          image:ollama/ollama-model:latest
          resources:
            requests:
              memory:"64Gi"
              cpu:"16"
            limits:
              memory:"128Gi"
              cpu:"32"
          ports:
            -containerPort:8080
          volumeMounts:
            -name:model-storage
              mountPath:/mnt/models
      volumes:
        -name:model-storage
          persistentVolumeClaim:
            claimName:model-pvc

3.3 DeepSeek-R1部署文件

deepseek-r1-deployment.yaml

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"
            limits:
              memory:"256Gi"
              cpu:"64"
          ports:
            -containerPort:8081
          volumeMounts:
            -name:model-storage
              mountPath:/mnt/models
      volumes:
        -name:model-storage
          persistentVolumeClaim:
            claimName:model-pvc

3.4 服务配置

为了方便外部访问模型服务,配置Kubernetes Service来公开暴露服务。这里使用LoadBalancer类型的服务。

ollama-service.yaml

apiVersion: v1
kind:Service
metadata:
name:ollama-service
spec:
selector:
    app:ollama
ports:
    -protocol:TCP
      port:8080
      targetPort:8080
type:LoadBalancer

deepseek-r1-service.yaml

apiVersion: v1
kind:Service
metadata:
name:deepseek-r1-service
spec:
selector:
    app:deepseek-r1
ports:
    -protocol:TCP
      port:8081
      targetPort:8081
type:LoadBalancer

4. 部署到Kubernetes

通过以下命令将Kubernetes资源应用到集群中:

kubectl apply -f model-pvc.yaml
kubectl apply -f ollama-deployment.yaml
kubectl apply -f deepseek-r1-deployment.yaml
kubectl apply -f ollama-service.yaml
kubectl apply -f deepseek-r1-service.yaml

4.1 检查Pod状态kubectl get pods

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

4.2 检查服务状态kubectl get svc

通过该命令查看是否已成功创建服务,且它们暴露的端口(8080和8081)是否可以从外部访问。

5. 访问模型

5.1 获取外部IP

如果使用的是LoadBalancer类型的Service,你可以通过以下命令获取外部IP:

kubectl get svc

输出示例如下:

NAME                TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
ollama-service      LoadBalancer   10.100.200.1    <external-ip>  8080:30000/TCP 10m
deepseek-r1-service LoadBalancer   10.100.200.2    <external-ip>  8081:30001/TCP 10m

你可以在浏览器或者API客户端中使用这个外部IP访问模型接口,例如:

  • Ollama模型API

    http://<external-ip>:30000

  • DeepSeek-R1模型API

    http://<external-ip>:30001


5.2 调用模型接口

如果模型提供了RESTful API,你可以通过HTTP请求调用。例如,使用curl进行推理请求:

# 假设Ollama模型提供一个推理接口
curl -X POST http://<external-ip>:30000/inference -d '{"input": "your text input"}'

6. 监控和日志管理

6.1 查看Pod日志kubectl logs <pod-name>

查看运行中的Pod的日志,确保模型的推理过程正常。

6.2 使用Prometheus和Grafana监控

  • 部署 Prometheus 来监控Kubernetes集群的资源使用。

  • 配置 Grafana 仪表盘来实时展示模型的推理性能、延迟和吞吐量。


6.3 设置告警

使用Prometheus的告警功能来监控模型的健康状态,例如内存使用超过阈值时通过alertmanager触发告警。


总结

上述步骤展示了如何在Kubernetes 1.30集群中部署Ollama和DeepSeek-R1这类大规模的深度学习模型。需要注意,部署时要合理配置资源请求和限制,确保集群能够承载这些模型的计算和存储需求。通过服务暴露,外部应用可以访问这些模型提供的API进行推理。

0

评论区