Phi-3.5-mini-instruct部署教程:在Kubernetes中以StatefulSet方式编排服务
Phi-3.5-mini-instruct部署教程:在Kubernetes中以StatefulSet方式编排服务
1. 模型简介
Phi-3.5-mini-instruct是一个轻量级的开放模型,属于Phi-3模型家族。它基于高质量的数据集构建,特别关注推理密集型任务。这个模型支持长达128K令牌的上下文长度,经过严格的训练过程,包括监督微调、策略优化和偏好优化,确保能够精确遵循指令并具备强大的安全性能。
作为一款文本生成模型,Phi-3.5-mini-instruct非常适合需要高效、精准指令响应的应用场景。它的轻量级特性使其成为在Kubernetes环境中部署的理想选择,能够在不牺牲性能的前提下节省计算资源。
2. 环境准备
2.1 系统要求
在开始部署前,请确保您的Kubernetes集群满足以下基本要求:
- Kubernetes版本1.20或更高
- 每个Pod至少分配8GB内存
- 每个Pod至少2个CPU核心
- 持久化存储卷(PV)用于模型数据
- 安装了kubectl命令行工具
2.2 获取模型资源
您可以从官方渠道获取Phi-3.5-mini-instruct模型文件。确保下载完整的模型包,通常包括:
- 模型权重文件
- 配置文件
- 分词器相关文件
3. 部署步骤
3.1 创建持久化存储
首先,我们需要为模型创建持久化存储:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: phi3-model-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi应用这个配置:
kubectl apply -f model-pvc.yaml3.2 创建StatefulSet配置
以下是Phi-3.5-mini-instruct的StatefulSet配置示例:
apiVersion: apps/v1 kind: StatefulSet metadata: name: phi3-mini-instruct spec: serviceName: "phi3-service" replicas: 1 selector: matchLabels: app: phi3-mini-instruct template: metadata: labels: app: phi3-mini-instruct spec: containers: - name: phi3-container image: your-vllm-image:latest ports: - containerPort: 8000 volumeMounts: - name: model-storage mountPath: /models resources: requests: memory: "8Gi" cpu: "2" limits: memory: "10Gi" cpu: "4" volumes: - name: model-storage persistentVolumeClaim: claimName: phi3-model-pvc3.3 部署服务
创建服务暴露模型API:
apiVersion: v1 kind: Service metadata: name: phi3-service spec: selector: app: phi3-mini-instruct ports: - protocol: TCP port: 8000 targetPort: 8000 type: ClusterIP应用所有配置:
kubectl apply -f phi3-statefulset.yaml kubectl apply -f phi3-service.yaml4. 验证部署
4.1 检查Pod状态
使用以下命令检查Pod是否正常运行:
kubectl get pods -l app=phi3-mini-instruct4.2 查看日志确认模型加载
检查Pod日志确认模型已成功加载:
kubectl logs <pod-name> | grep "Model loaded"4.3 测试API接口
在集群内部测试API接口:
kubectl run curl-test --image=curlimages/curl -it --rm -- \ curl -X POST http://phi3-service:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{"prompt": "介绍一下你自己", "max_tokens": 100}'5. 集成Chainlit前端
5.1 部署Chainlit服务
创建Chainlit的Deployment配置:
apiVersion: apps/v1 kind: Deployment metadata: name: chainlit-ui spec: replicas: 1 selector: matchLabels: app: chainlit-ui template: metadata: labels: app: chainlit-ui spec: containers: - name: chainlit-container image: chainlit/chainlit:latest ports: - containerPort: 8000 env: - name: MODEL_API_URL value: "http://phi3-service:8000"5.2 暴露Chainlit服务
创建Ingress或LoadBalancer服务:
apiVersion: v1 kind: Service metadata: name: chainlit-service spec: selector: app: chainlit-ui ports: - protocol: TCP port: 80 targetPort: 8000 type: LoadBalancer5.3 访问Chainlit界面
部署完成后,您可以通过服务的外部IP访问Chainlit界面:
kubectl get svc chainlit-service在浏览器中输入显示的外部IP地址即可开始使用Phi-3.5-mini-instruct模型。
6. 常见问题解决
6.1 模型加载失败
如果模型加载失败,请检查:
- 持久化存储是否正确挂载
- 模型文件路径是否正确
- 容器是否有足够的权限访问模型文件
6.2 API响应缓慢
可能的原因和解决方案:
- 资源不足:增加Pod的CPU和内存限制
- 网络延迟:确保服务在同一个节点或可用区
- 模型过大:考虑使用量化版本的模型
6.3 Chainlit无法连接模型服务
检查:
- MODEL_API_URL环境变量设置是否正确
- 网络策略是否允许Pod间通信
- 模型服务是否正常运行
7. 总结
通过本教程,我们成功在Kubernetes集群中以StatefulSet方式部署了Phi-3.5-mini-instruct模型,并通过Chainlit提供了友好的用户界面。这种部署方式具有以下优势:
- 稳定性:StatefulSet确保模型服务的稳定运行
- 可扩展性:可根据需求轻松扩展副本数量
- 持久化:模型数据不会因Pod重启而丢失
- 易用性:Chainlit提供了直观的交互界面
对于生产环境,您可能需要考虑添加监控、日志收集和自动扩缩容等功能,以进一步提升服务的可靠性和可用性。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
