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进行推理。
评论区