Phi-3-mini-4k-instruct部署教程:Ollama + Kubernetes Helm Chart实现集群化部署
本文介绍了如何在星图GPU平台上,通过Kubernetes Helm Chart自动化部署【ollama】Phi-3-mini-4k-instruct镜像,快速构建可扩展的私有化AI服务。该轻量级大语言模型擅长指令跟随与文本生成,可高效应用于智能问答、文案辅助等日常场景,显著提升内容创作效率。
Phi-3-mini-4k-instruct部署教程:Ollama + Kubernetes Helm Chart实现集群化部署
想快速体验一个轻量级但能力不俗的开源大模型吗?今天我们来聊聊如何用最“云原生”的方式,把微软的Phi-3-mini-4k-instruct模型部署起来。如果你对直接使用Web界面不感兴趣,而是希望把它变成一个可以弹性伸缩、高可用的服务,那么这篇教程就是为你准备的。
我们将使用Ollama作为模型的运行时,再通过Kubernetes Helm Chart把它打包成一套标准的云服务。这样一来,你就能在几分钟内,从零开始搭建一个属于你自己的私有化文本生成服务集群。
1. 为什么选择这个组合?
在开始动手之前,我们先简单了解一下这套方案的核心组件,以及它们能带来什么好处。
1.1 Phi-3-mini-4k-instruct:小而精悍的模型
Phi-3-mini-4k-instruct是微软Phi-3系列中的“小个子”,只有38亿参数。别看它体积小,它在多项基准测试中的表现,足以媲美一些参数大它好几倍的模型。
它的特点非常鲜明:
- 轻量高效:38亿参数,对硬件要求友好,在消费级显卡甚至部分CPU上都能流畅运行。
- 指令跟随能力强:专门针对“指令-回答”模式进行了优化训练,你问什么,它就能很好地回答什么,对话体验很自然。
- 上下文长度4K:可以处理大约3000个汉字左右的上下文,对于大多数日常问答、文案生成、代码辅助等场景完全够用。
- 开源免费:完全开放,可以自由部署、研究和商用。
简单来说,它是一个在“效果”和“资源消耗”之间取得了很好平衡的模型,非常适合作为入门实践或者对成本敏感的生产场景。
1.2 Ollama:大模型的一键运行器
Ollama的出现,极大简化了在本地运行大模型的过程。你可以把它理解成一个专门为运行大模型优化的“容器”或“运行时环境”。
它的优点在于:
- 开箱即用:一条命令就能下载并启动模型,无需复杂的Python环境配置或依赖冲突解决。
- 统一的API:无论底层是什么模型,都通过相同的RESTful API(默认端口11434)进行交互,降低了集成复杂度。
- 资源管理:可以方便地查看模型运行状态、占用资源,并进行基础的管理。
1.3 Kubernetes + Helm:云原生部署的标准答案
如果只是单机运行,Ollama本身已经足够简单。但当我们谈论“服务化”、“集群化”、“高可用”时,Kubernetes (K8s) 是不二之选。
- Kubernetes:负责容器化应用的编排、调度、扩缩容和自愈。它能确保你的Phi-3服务在某个节点故障时自动迁移,在流量激增时自动增加实例。
- Helm:是K8s的“包管理器”。我们把Ollama和Phi-3模型的部署配置(比如需要多少CPU/内存、如何暴露服务、如何挂载存储等)打包成一个Helm Chart。你只需要修改几个参数,就能一键将整个服务部署到K8s集群中,无需手动编写一堆复杂的YAML文件。
这个组合的最终目标:将一个开源大模型,通过标准化的工具,变成一项稳定、可扩展的云服务。
2. 部署准备:环境与工具
在运行Helm命令之前,我们需要确保基础环境已经就绪。以下是整个部署的架构示意图和准备工作。
[ 你的电脑 ] --(helm install)--> [ Kubernetes集群 ]
|
|-- (Pod) [ Ollama + Phi-3模型 ]
|-- (Service) 负载均衡访问入口
|-- (Ingress) 对外提供HTTP服务(可选)
2.1 前提条件
请确保你拥有以下环境或权限:
- 一个可用的Kubernetes集群:可以是云服务商提供的(如阿里云ACK、腾讯云TKE、AWS EKS),也可以是本地搭建的(如minikube, k3s, kind)。你需要拥有在该集群上部署应用的权限(
kubectl能够正常工作)。 - 已安装并配置Helm:Helm的版本建议在v3.8以上。你可以通过
helm version命令检查。 - 集群资源:建议为每个Phi-3-mini实例分配至少2核CPU和4GB内存。模型本身约占用2.4GB磁盘空间。
- 网络访问:部署Pod的节点需要能够访问互联网(如Docker Hub或GitHub)以下载Ollama镜像和Phi-3模型文件。
2.2 获取部署文件
我们将使用一个预先编写好的Helm Chart来部署。你可以从相关的代码仓库获取。
# 克隆包含Helm Chart的仓库(这里是一个示例路径,请替换为实际地址)
git clone https://github.com/your-org/ollama-phi3-helm-chart.git
cd ollama-phi3-helm-chart
这个Chart目录结构通常如下:
ollama-phi3-helm-chart/
├── Chart.yaml # Chart的元数据信息
├── values.yaml # 默认的配置参数(我们将主要修改这个文件)
├── templates/ # Kubernetes资源模板文件
│ ├── deployment.yaml # 定义Ollama的Deployment
│ ├── service.yaml # 定义对外的Service
│ └── ...
└── ...
3. 核心部署步骤详解
一切准备就绪,现在开始最关键的一步:定制化配置并安装。
3.1 配置Helm Values
我们不需要直接修改模板,而是通过覆盖 values.yaml 文件中的参数来定制部署。创建一个用于覆盖的配置文件,例如 my-phi3-values.yaml。
# my-phi3-values.yaml
# 1. 镜像与模型配置
ollama:
image:
repository: ollama/ollama # Ollama官方镜像
tag: latest # 建议指定一个稳定版本,如0.1.29
model: phi3:mini # 指定要拉取和运行的模型,Ollama会自动下载
# 环境变量,例如可以设置代理(如果需要)
env:
- name: OLLAMA_HOST
value: "0.0.0.0" # 监听所有网络接口
# 2. 资源请求与限制(根据你的集群实际情况调整)
resources:
requests:
memory: "4Gi"
cpu: "2"
limits:
memory: "8Gi"
cpu: "4"
# 3. 服务暴露配置
service:
type: ClusterIP # 默认类型,仅在集群内访问
port: 11434 # Ollama默认API端口
# 如果你需要从集群外部访问,可以改为NodePort或结合Ingress
# type: NodePort
# nodePort: 31134 # 手动指定NodePort端口(范围30000-32767)
# 4. 持久化存储(强烈建议配置,否则模型文件在Pod重启后会丢失)
persistence:
enabled: true
storageClass: "standard" # 指定你的K8s集群中的StorageClass名称
accessMode: ReadWriteOnce
size: 10Gi # 存储空间大小,模型本身约2.4G,预留一些空间
mountPath: /root/.ollama # Ollama默认的模型存储路径
# 5. 副本数(实现高可用和负载均衡)
replicaCount: 1 # 初始可以从1个副本开始,后续可以水平扩展
关键配置解读:
ollama.model:这是核心配置,告诉Ollama在启动时自动拉取并加载哪个模型。phi3:mini是Ollama社区认可的模型标签。persistence:务必启用。这会将模型数据保存在持久化卷(PV)中,即使Pod被重新调度,模型也无需重新下载。replicaCount:设置为2或以上,Kubernetes会为你创建多个相同的Pod,并通过Service实现负载均衡,提升服务的可用性和吞吐量。
3.2 执行Helm安装命令
使用 helm install 命令,将我们的应用部署到Kubernetes集群。[RELEASE_NAME] 是你为这次部署起的名字,比如 phi3-mini。
# 语法:helm install [RELEASE_NAME] [CHART_PATH] -f [VALUES_FILE] -n [NAMESPACE]
helm install phi3-mini . -f my-phi3-values.yaml -n ai-models --create-namespace
命令参数说明:
phi3-mini:这次部署在Helm中的发布名称。.:表示使用当前目录下的Chart。-f my-phi3-values.yaml:使用我们自定义的配置文件覆盖默认值。-n ai-models:指定部署到名为ai-models的命名空间中。--create-namespace会在命名空间不存在时自动创建它。
执行后,你会看到类似下面的输出,提示部署成功,并给出一些后续操作提示。
NAME: phi3-mini
LAST DEPLOYED: Fri Nov 1 10:00:00 2024
NAMESPACE: ai-models
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods -l app.kubernetes.io/instance=phi3-mini -n ai-models -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:11434 to access the Ollama API"
kubectl port-forward $POD_NAME 11434:11434 -n ai-models
3.3 验证部署状态
部署命令执行很快,但Pod启动并拉取模型需要一些时间。我们可以通过以下命令观察进度。
# 查看指定命名空间下的所有资源
kubectl get all -n ai-models
# 重点关注Pod的状态,直到状态变为“Running”
kubectl get pods -n ai-models -w
# 查看Pod的详细日志,特别是模型拉取和加载的进度
kubectl logs -f deployment/phi3-mini -n ai-models
在日志中,你会看到Ollama启动并开始拉取 phi3:mini 模型。拉取完成后,日志会显示模型加载成功的信息。这可能需要几分钟,取决于你的网络速度。
4. 使用与测试你的Phi-3服务
当Pod状态变为 Running 后,你的Phi-3-mini文本生成服务就已经在K8s集群里跑起来了。接下来,我们看看怎么使用它。
4.1 在集群内部进行测试
首先,我们可以在集群内创建一个临时的测试Pod,通过命令行调用服务。
# 启动一个包含curl工具的临时Pod
kubectl run curl-test --image=curlimages/curl -it --rm --restart=Never -n ai-models -- sh
# 进入Pod的shell后,执行以下命令测试Ollama API
# 注意:phi3-mini是Service的名字,ai-models是命名空间
curl http://phi3-mini.ai-models.svc.cluster.local:11434/api/generate -d '{
"model": "phi3:mini",
"prompt": "请用一句话介绍你自己。",
"stream": false
}'
如果一切正常,你将收到一个JSON格式的响应,其中包含模型生成的回答。
4.2 (可选)从集群外部访问
默认的 ClusterIP 服务类型只能在集群内访问。如果你需要从外部(比如你的开发机)调用,有几种方法:
方法一:使用kubectl port-forward(临时,适合调试)
# 将本地的11434端口转发到集群中的Service
kubectl port-forward svc/phi3-mini 11434:11434 -n ai-models
转发后,你就可以在本地浏览器或使用curl访问 http://localhost:11434 了。
方法二:修改Service为NodePort(固定端口) 修改 my-phi3-values.yaml 中的 service.type 为 NodePort,并可选指定 nodePort,然后使用 helm upgrade 更新部署。之后可以通过任意集群节点IP和指定的NodePort访问。
方法三:通过Ingress暴露(生产环境推荐) 配置Ingress控制器(如Nginx Ingress),并在Chart的 values.yaml 中配置Ingress规则,通过域名和HTTPS访问。这需要更复杂的配置,但是最标准的生产方式。
4.3 编写一个简单的客户端脚本
服务稳定运行后,你可以用任何喜欢的编程语言来调用它。这里是一个Python示例:
# test_phi3_client.py
import requests
import json
# 如果你的服务通过Ingress或NodePort暴露,请替换下面的URL
# 如果是port-forward,地址就是 http://localhost:11434
OLLAMA_API_URL = "http://phi3-mini.ai-models.svc.cluster.local:11434/api/generate"
def ask_phi3(prompt):
payload = {
"model": "phi3:mini",
"prompt": prompt,
"stream": False,
"options": {
"temperature": 0.7, # 控制创造性,越低越确定,越高越随机
"num_predict": 128 # 生成的最大token数
}
}
try:
response = requests.post(OLLAMA_API_URL, json=payload, timeout=60)
response.raise_for_status()
result = response.json()
return result["response"]
except requests.exceptions.RequestException as e:
return f"请求出错: {e}"
if __name__ == "__main__":
question = "解释一下什么是云计算。"
answer = ask_phi3(question)
print(f"Q: {question}")
print(f"A: {answer}")
运行这个脚本,就能看到Phi-3-mini模型生成的回答了。
5. 运维与进阶配置
部署完成只是第一步,要让服务稳定运行,还需要关注以下方面。
5.1 监控与日志
- 查看日志:
kubectl logs -f deployment/phi3-mini -n ai-models - 资源监控:使用
kubectl top pods -n ai-models查看Pod的CPU和内存使用情况。对于生产环境,建议集成Prometheus和Grafana。 - 就绪探针:我们可以在Deployment中配置就绪探针,确保模型完全加载后再接收流量。这需要在Helm Chart模板中增加相关配置。
5.2 扩缩容
当请求量增大时,你可以轻松地水平扩展Pod的数量。
# 将副本数扩展到3个
kubectl scale deployment phi3-mini --replicas=3 -n ai-models
# 或者通过Helm升级values.yaml中的replicaCount并执行
# helm upgrade phi3-mini . -f my-phi3-values.yaml -n ai-models
Kubernetes的Service会自动将请求负载均衡到所有健康的Pod上。
5.3 升级与回滚
- 升级模型或Ollama版本:修改
my-phi3-values.yaml中的ollama.image.tag或ollama.model(例如换成phi3:mini-128k),然后执行helm upgrade ...。注意:更换模型可能需要重新下载,请确保持久化存储空间足够。 - 回滚:如果升级出现问题,可以使用
helm rollback phi3-mini [REVISION_NUMBER] -n ai-models快速回退到之前的稳定版本。
5.4 模型管理与安全
- 多模型支持:一个Ollama实例可以加载多个模型。你可以通过API动态加载/卸载模型,但更常见的做法是为不同模型部署独立的Helm Release,实现资源隔离。
- API安全:目前我们的服务没有设置认证。在生产环境中,你应该通过Ingress配置HTTPS、设置API网关(如Kong, APISIX)来添加认证(API Key, JWT等),或者将服务部署在内部网络,仅允许可信服务访问。
6. 总结
通过这篇教程,我们完成了一件很有成就感的事:将一个开源大模型Phi-3-mini-4k-instruct,从单纯的本地可运行程序,变成了一套部署在Kubernetes集群上的、可扩展、易管理的云服务。
我们来回顾一下关键步骤和优势:
- 标准化部署:使用Helm Chart将Ollama和模型配置代码化、版本化,实现一键部署和复制。
- 资源与高可用:借助Kubernetes,我们能精确控制服务占用的CPU/内存,并能通过增加副本数轻松应对高并发,某个实例故障时也能自动恢复。
- 持久化存储:通过配置持久化卷,模型数据得以保留,避免了每次重启都重新下载的尴尬。
- 灵活的访问方式:服务可以在集群内被其他应用直接调用,也可以通过NodePort、Ingress等方式安全地暴露给外部。
这套方案不仅适用于Phi-3-mini,也适用于Ollama支持的任何其他模型(如Llama 3, Mistral, Gemma等)。你只需要修改 values.yaml 中的 model 参数,就能快速切换或部署新的模型服务。
下一步,你可以尝试:
- 为这个服务添加一个简单的Web UI前端。
- 配置HPA(Horizontal Pod Autoscaler),让Pod数量能根据CPU使用率自动调整。
- 将模型服务与你现有的业务应用(如客服系统、内容生成平台)进行集成。
希望这个教程能帮你打开大模型服务化部署的大门。动手试试吧,享受在云端驾驭AI模型的乐趣。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐
所有评论(0)