aiops

机器学习部署模型服务

当训练好了一个模型,如何对外提供推理服务。Seldon Core是在Kubernetes上部署机器学习模型的流行组件。简单地说,Seldon Core将模型封装成生产级的REST/GRPC微服务。Seldon Core已与Istio、Jeager、Prometheus做了集成,支持灰度发布、A/B测试、链路跟踪、指标监控等。 今天给大家示例的是最简化的使用方式,仅有Seldon Core,无其他开源组件。我只想用Seldon Core来完成我的模型加载和提供API服务。 | 部署Seldon Core Operator 编辑values.yaml,禁用ambassador, istio ambassador: enabled: false istio: enabled: false 因为我的Kubernetes集群版本v1.22.2,所以要修改一下webhook.yaml里的协议版本 sideEffects: None admissionReviewVersions: - v1beta1 | 安装 helm install -n seldon-system seldon-core-operator seldon-core-operator | Prefect工作流 Prefect agent role添加seldon API操作权限 - apiGroups: - machinelearning.seldon.io resources: - seldondeployments verbs: - '*' | 修改模型训练任务 在训练模型任务返回MLflow的run_id,归档模型文件时,不注册模型版本 @task def train_model(data, mlflow_experiment_id, alpha=0.5, l1_ratio=0.5): mlflow.set_tracking_uri(f'http://mlflow.platform.sukai.com/') train, test = train_test_split(data) # The predicted column is "quality" which is a scalar from [3, 9] train_x = train.

继续阅读

Jupyter Notebook弹性使用Kubernetes集群GPU资源

在前面介绍了Kubernetes集群中提高GPU资源使用率的两个途径:1,GPU虚拟化,共享使用GPU。2,弹性调度,动态地创建和销毁占用GPU资源的Jupyter Pod。今天主要介绍如何通过腾讯开源的tkestack/elastic-jupyter-operator实现GPU资源弹性调度。 弹性调度原理 Jupyter Enterprise Gateway Jupyter Enterprise Gateway是一个支持多用户和多集群环境的可插拔框架。这样Jupyter Notebook能够在分布式集群中启动远程内核,远程内核可以在使用时创建,在空闲时销毁,不再需要一直占用宝贵的GPU资源。 tkestack/elastic-jupyter-operator 在使用Jupyter Enterprise Gateway过程中,我们需要将远程内核配置到Gateway注册,启动远程内核实例。elastic-jupyter-operator解决了这个过程自动化问题,动态地管理内核,为Gateway生成内核配置,并增加了KernelLauncher新方法,实现Kernel Pod的生命周期管理。通过kubeflow-launcher在Kubernetes中创建jupyter kernel Pod,当Kernel空闲时,删除Kernel的CR,实现Kernel占用资源的回收释放。 部署使用 部署elastic-jupyter-operator kubectl apply -f ./hack/enterprise_gateway/prepare.yaml make deploy 创建Gateway CR apiVersion: kubeflow.tkestack.io/v1alpha1 kind: JupyterGateway metadata: name: jupytergateway-elastic-tensorflow spec: cullIdleTimeout: 10 cullInterval: 10 logLevel: DEBUG image: ccr.ccs.tencentyun.com/kubeflow-oteam/enterprise-gateway:dev # Use the kernel which is defined in JupyterKernelSpec CR. defaultKernel: python-tensorflow kernels: - python-tensorflow 创建KernelSpec CR和KernelTemplate CR apiVersion: kubeflow.tkestack.io/v1alpha1 kind: JupyterKernelSpec metadata: name: python-tensorflow spec: language: Python displayName: "Elastic tensorlfow Kernel on Kubernetes" image: elyra/kernel-tf-py:2.

继续阅读

Jupyter Notebook共享使用Kubernetes集群的GPU资源

在Kubernetes集群中如何提高算力资源使用效率一直受到用户关注,公司内部有限GPU资源如何得到充分利用,1,GPU虚拟化,将GPU硬件由独享变成共享使用;2,弹性调度,当申请占用的GPU资源空闲时,释放资源给有需要的用户使用。本篇先介绍如何将GPU虚拟化,如何使用虚拟化的GPU资源。GPU虚拟化的开源解决方案有几个,我们选择的是阿里云的GPU共享方案。 | 安装Nvidia Docker运行时 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update sudo apt-get install -y nvidia-docker2 sudo apt install nvidia-container-toolkit sudo systemctl restart docker sudo tee /etc/docker/daemon.json <<EOF { "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"], "storage-driver": "overlay2", "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } } EOF sudo docker run --rm --gpus all nvidia/cuda:11.

继续阅读

使用Kaniko构建Docker镜像

在Kubernetes集群中构建容器镜像,有两种方式:1,Docker in Docker方式,将Kubernetes的主机节点的docker socket文件共享给Pod中的容器,在Pod容器中运行docker命令构建镜像。2,使用Kaniko来构建容器镜像,Kaniko不依赖Docker daemon,有用户态空间就能执行dockerfile的全部指令。这使得在Kubernetes中构建容器镜像变得简单又安全。 下面介绍两种在k8s中使用Kaniko构建容器镜像的方式,1,Kubeflow fairing构建容器镜像。2,GitLab流水线构建容器镜像。因为最近在接触kubeflow,所以才有了kubeflow fairing构建容器镜像的玩法,kubeflow fairing主要用于将开发人员完成的模型打包,用于在Kubernetes中创建训练任务。 | Kubeflow Fairing构建容器镜像 !pip install msrestazure -i https://pypi.tuna.tsinghua.edu.cn/simple --user import logging from kubeflow.fairing import constants from kubeflow.fairing.preprocessors import base as base_preprocessor DOCKER_REGISTRY = '192.168.0.93/ai' constants.constants.KANIKO_IMAGE = "aiotceo/kaniko-executor:v1.6.0" from kubeflow.fairing.builders import cluster # output_map is a map of extra files to add to the notebook. # It is a map from source location to the location inside the context. output_map = { "Dockerfile.

继续阅读