如何贡献代码

type
status
date
slug
summary
tags
category
icon
password
网址

开发

本文档说明如何设置开发环境,以便您可以开始贡献代码。

前提条件

按照以下说明设置您的开发环境。满足这些要求后,您就可以进行更改并部署自己的KServe版本!
在提交PR之前,另请参阅CONTRIBUTING.md

安装要求

您必须安装以下工具:
  1. go:KServe控制器是用Go编写的,需要Go 1.22.7+。
  1. git:用于源代码控制。
  1. Go Module:Go的新依赖管理系统。
  1. ko:用于开发。
  1. kubectl:用于管理开发环境。
  1. kustomize:用于为不同环境自定义YAML,需要v5.0.0+。
  1. yq:yq在项目makefiles中用于解析和显示YAML输出,需要yq 4.*
  1. pre-commit:pre-commit用于在提交更改前对代码库进行检查。
  1. helm:Helm用于安装KServe。

在Kubernetes集群上安装Knative

KServe目前需要Knative Serving用于自动扩缩容、金丝雀发布,需要Istio用于流量路由和入口。
  • 要在Kubernetes集群上安装Knative组件,请按照安装指南操作,或者使用Knative Operators来管理您的安装。可观察性、追踪和日志记录是可选的,但它们通常是排查困难问题的非常有价值的工具。
  • 如果从头开始,KServe需要Kubernetes、Knative和Istio。您可以在安装文档中找到推荐的版本矩阵
  • 如果您已经有IstioKnative(例如从Kubeflow安装),只要满足版本依赖关系,就不需要显式安装它们。
注意
在本地环境中,当使用minikubekind作为Kubernetes集群时,有报告称knative快速启动引导程序无法按预期工作。建议使用yaml或使用knative operator按照knative安装手册进行操作,以获得更好的结果。

设置您的环境

要启动您的环境,您需要设置以下环境变量(我们建议将它们添加到您的.bashrc中):
  1. GOPATH:如果您没有,只需选择一个目录并添加export GOPATH=...
  1. $GOPATH/binPATH中:这是为了使通过go get安装的工具能正常工作。
  1. KO_DEFAULTPLATFORMS:如果您使用M1 Mac book,值为linux/arm64
  1. KO_DOCKER_REPO:开发者镜像应推送到的docker仓库(例如docker.io/<username>)。注意:设置用于推送镜像的docker仓库。您可以通过调整以下各节中提到的身份验证方法和仓库路径来使用任何容器镜像注册表:
注意
如果您使用docker hub存储镜像,您的KO_DOCKER_REPO变量应为docker.io/<username>。目前Docker Hub不允许在用户名下创建子目录。
.bashrc示例:

检出您的fork

Go工具要求您将仓库克隆到GOPATH中的src/github.com/kserve/kserve目录。
要检出此仓库:
  1. 创建您自己的此仓库的fork
  1. 将其克隆到您的机器:
添加<i>upstream</i>远程仓库可以方便您定期同步您的fork
到达这一步后,您就可以按照下面的说明进行完整的构建和部署了。

安装pre-commit钩子

配置pre-commit钩子将在提交更改之前对代码库运行检查。这将帮助您在更改到达仓库之前捕获lint错误、格式问题和其他常见问题。

部署KServe

检查Knative Serving安装

一旦您设置好开发环境,您可以通过以下方式验证安装:
成功

从master分支部署KServe

我们建议使用cert manager为webhook服务器配置证书。只要将证书放在所需位置,其他解决方案也应该可以工作。
您可以按照cert manager文档进行安装。
如果您不想安装cert manager,可以将KSERVE_ENABLE_SELF_SIGNED_CA环境变量设置为true。KSERVE_ENABLE_SELF_SIGNED_CA将执行脚本创建自签名CA并将其修补到webhook配置中。
之后,您可以运行以下命令来部署KServe,如果已安装cert manager,可以跳过上述步骤。
可选
部署KServe时可以更改CPU和内存限制。
预期输出
注意
默认情况下,它会使用master分支的已发布控制器管理器镜像安装到kserve命名空间。

使用您自己的版本部署KServe

运行以下命令使用您的本地更改部署KServe控制器和模型代理。
注意
deploy-dev从您的本地代码构建镜像,发布到KO_DOCKER_REPO,并使用镜像摘要将kserve-controller-managermodel agent部署到您的集群进行测试。请确保您已从客户端机器登录到KO_DOCKER_REPO
运行以下命令使用您的本地更改部署模型服务器。
运行以下命令使用您的本地更改部署解释器。
运行以下命令使用您的本地更改部署存储初始化器。
警告
部署命令将镜像以latest版本发布到KO_DOCKER_REPO,它会更改InferenceService configmap以指向新构建的镜像sha。构建的镜像仅用于开发和测试目的,当前的限制是它会更改受影响的镜像,并将包括kserver-controller-manager在内的所有其他镜像重置为使用默认镜像。

部署后的冒烟测试

运行以下命令进行部署冒烟测试
您应该看到模型服务部署在默认或指定的命名空间中运行。
预期输出

运行单元/集成测试

kserver-controller-manager有一些集成测试,需要mock apiserver和etcd,它们随kubebuilder一起安装。
要运行所有单元/集成测试:

在本地运行e2e测试

要从本地代码设置,请执行:
  1. ./hack/quick_install.sh
  1. make undeploy
  1. make deploy-dev
转到python/kserve并安装kserve python sdk依赖
然后转到test/e2e
运行kubectl create namespace kserve-ci-e2e-test
对于KIND/minikube:
  • 运行export KSERVE_INGRESS_HOST_PORT=localhost:8080
  • 在另一个窗口中运行kubectl port-forward -n istio-system svc/istio-ingressgateway 8080:80
  • 请注意,并非所有测试都会通过,因为pytorch测试需要gpu。这些将在最后显示为待处理的pod,或者您可以添加标记来跳过测试。
运行pytest &gt; testresults.txt
测试可能不会清理。要重新运行,首先执行kubectl delete namespace kserve-ci-e2e-test,重新创建命名空间并再次运行。

迭代

在对代码库进行更改时,需要注意两种特殊情况:
  • 如果您更改生成代码的输入,则必须运行make manifests。输入包括:
  • apis/serving中的API类型定义
  • 存储在config中的清单或kustomize补丁。
要生成KServe python/go客户端,您应该运行make generate
  • 如果您想添加新依赖项,则在go.mod中添加导入和依赖模块的特定版本。当遇到go.mod中未提供的包的导入时,go命令会自动查找包含该包的模块,并使用最新版本将其添加到go.mod中。
  • 如果您想升级依赖项,则运行go get命令,例如go get golang.org/x/text升级到最新版本,go get golang.org/x/text@v0.3.0升级到特定版本。

为代码做贡献

请参阅以下指南
  • 贡献功能
  • 为现有问题做贡献

发布

请查看此处的文档,以了解发布计划和流程。

反馈

提供有关KServe代码反馈的最佳位置是通过Github issue。有关提交bug和功能请求的指南,请参阅创建Github issue。
上一篇
模型存储 - 模型缓存
下一篇
debug指南
Loading...
文章列表
Kserve中文文档
快速开始
管理指南
用户指南
开发指南
机器学习概念
大模型周报