Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
huolongshe 327d854f17 | 3 months ago | |
---|---|---|
dev | 1 year ago | |
docs | 1 year ago | |
k8s | 2 years ago | |
minikube | 1 year ago | |
prod | 1 year ago | |
.gitignore | 2 years ago | |
LICENSE | 2 years ago | |
README.md | 3 months ago | |
build-dockers.sh | 1 year ago |
CubeAI智立方是一套集AI模型自动化服务封装、发布、共享、部署和能力开放等功能于一体的开源AI服务原生平台和工具集,其核心作用在于打通AI模型开发至实际生产应用之间的壁垒,加速AI创新和应用进程,促进AI应用从设计、开发直到部署、运营整个生命周期的自动化快速迭代和演进。
CubeAI智立方开源软件由一系列基础开发工具、平台应用微服务和模型样例程库等软件组成,详见: CubeAI智立方 。
CubeAI智立方AI服务原生平台系统总体架构如下图所示:
CubeAI智立方AI服务原生平台软件架构如下图所示:
CubeAI平台基于自主研发的 CubePy微服务框架 进行开发,支持在主流容器化云原生平台上部署运行。
CubePy微服务框架 是一套基于 ServiceBoot云原生微服务引擎 开发的云原生微服务应用基础开发平台和代码脚手架工具,目前提供如下微服务控制基础组件:
内容服务器——Nexus
在CubePy微服务框架中使用第三方组件Nexus来充当内容服务器,为整个微服务应用系统提供统一的文件存储、制品仓库等服务功能。
服务注册与发现中心——Consul
在CubePy微服务框架中,当在非k8s环境(例如开发环境和docker-compose生产环境)中运行时,使用第三方组件Consul来充当服务注册/发现中心;当在k8s环境中运行时,使用k8s内置的DNS来实现服务注册/发现。
统一数据配置中心--configserver
CubePy微服务框架使用基于ServiceBoot开发的特殊微服务——configserver——来充当统一数据配置中心。
API网关——gateway
CubePy微服务框架使用基于ServiceBoot开发的特殊微服务——gateway——来充当API网关,用于为后端微服务提供统一的访问入口和HTTP路由转发功能。
用户认证授权中心——uaa
CubePy微服务框架使用基于ServiceBoot开发的特殊微服务——uaa——来充当用户认证授权中心,用于提供基于OAuth2协议和JWT(Json Web Token)的用户认证和授权服务,以及基于JWT和角色的微服务访问控制等功能。此外,CubePy微服务框架中的uaa还提供了用户管理、角色管理、消息管理、应用管理、文档管理等服务功能。
前端主门户——portal
CubePy微服务框架使用基于ServiceBoot开发的前端微服务——portal——来为整个微服务应用系统提供统一的前端主门户入口界面。portal前端界面基于Angular框架,使用TypeScript和HTML等语言开发。
除了CubePy微服务框架提供的基础组件外,CubeAI平台软件主要包括以下几个微服务:
个人中心前端微服务,链接于主portal之后。ppersonal前端基于Angular框架,使用TypeScript/HTML等语言开发。
AI模型共享平台前端微服务,链接于主portal之后。pmodelhub前端基于Angular框架,使用TypeScript/HTML等语言开发。
AI能力开放平台前端微服务,链接于主portal之后。Popen前端基于Angular框架,使用TypeScript/HTML等语言开发。
AI模型管理后端微服务。下挂一个MySql数据库,统一管理CubeAI应用中所有需要持久化的数据模型。使用Python语言开发。
AI模型发布后端微服务。负责将建模阶段打包好的AI模型发布至CubeAI平台,并生成docker形式的微服务镜像。使用Python语言开发。
AI模型部署后端微服务。将CubeAI平台中已发布模型部署至Kubernetes云原生平台,以docker容器的方式运行,以RESTful API的形式向用户提供AI能力开放接口。使用Python语言开发。
AI能力开放网关后端微服务。对Kubernetes平台中docker容器提供的AI能力API接口进行二次封装,增强API访问的安全性。使用Python语言开发。
CubeAI平台的核心技术之一是AI模型服务化引擎 —— ServiceBoot。
为了使用CubeAI平台,AI模型开发者需要先使用 ServiceBoot 对AI模型推理算法进行简单的封装,使之成为可在互联网上运行的web服务,然后再将其发布至CubeAI平台。在模型发布的过程中,CubeAI会自动将模型进行容器化封装。容器化的AI模型经部署之后,将使用内嵌的ServiceBoot引擎对外提供web服务(通过RESTful API接口或web图形界面)。
CubeAI模型示范库 是使用 ServiceBoot微服务引擎 开发的AI模型推理服务程序样例集,可作为编写CubeAI模型推理服务程序的模板来使用。
是一套可以独立于平台单独使用的AI模型本地打包和部署工具,可用于将 《CubeAI智立方模型样例库》 中的AI模型推理服务程序在本地打包为Docker镜像,并且部署至本地Docker容器或者本地或远程k8s云环境。
CubeAI Model Deployer in Kubernetes
是一套可以独立于平台、可单独运行于k8s容器之中的AI模型打包和部署工具,用于将 《CubeAI智立方模型样例库》 中的AI模型推理服务程序打包为Docker镜像并部署运行。
首先参照 CubePy微服务框架 中的相关指南文档完成微服务框架初始开发环境配置。
如果本机配有NVIDIA GPU显卡,可通过一下步骤来安装配置相应的GPU开发环境:
安装NVIDIA显卡驱动
执行 nvidia-smi 命令验证NVIDIA显卡驱动是否正常安装:
$ nvidia-smi
安装CUDA Toolkit
下载并安装CUDA Toolkit,建议使用10.2版本:
$ wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
$ sudo sh cuda_10.2.89_440.33.01_linux.run
创建符号链接,便于快捷访问:
$ sudo ln -s /usr/local/cuda-10.2 /usr/local/cuda
更新系统环境变量
编辑 /etc/profile 文件,在其末尾追加如下几行内容:
export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
然后重启系统。
查看CUDA安装情况及版本号:
$ nvcc -V
安装cuDNN(CUDA的深度学习加速库)
从 https://developer.nvidia.com/rdp/cudnn-download 网站选择下载相应版本的cuDNN,例如:cudnn-9.2-linux-x64-v7.6.5.32.tgz
解压cudnn文件,并执行如下操作:
$ tar -xvf cudnn-9.2-linux-x64-v7.6.5.32.tgz
$ cd cudnn-9.2-linux-x64-v7.6.5.32
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h
$ sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
开启本机docker服务的2375端口(在minikube集群环境中部署CubeAI情况下,模型打包时需要访问集群外部的宿主机docker服务):
在 /etc/systemd/system/docker.service.d/override.conf文件(如果没有则创建)中添加如下几行内容:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
如果本机配有NVIDIA GPU显卡,需要安装NVIDIA容器运行时:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-docker2 conntrack ebtables ethtool socat
在Docker引擎配置参数中添加NVIDIA容器运行时相关参数:
在 /etc/docker/daemon.json 文件中添加如下内容:
{
"registry-mirrors": [
"https://mirror.baidubce.com/"
],
"live-restore": true,
"insecure-registries": ["<本机网卡IP地址>", "<本机网卡IP地址>:8001“],
"exec-opts": ["native.cgroupdriver=systemd"],
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
完成上述操作后,重启docker服务:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
建议使用minikube来搭建单节点k8s集群,用于部署CubeAI能力开放平台,以及将CubeAI自身微服务部署至k8s集群。
Minikube官方文档参见:https://minikube.sigs.k8s.io/docs/ 。
建议使用 minikube v1.25.2 版本,集群搭建步骤如下:
如果使用 Ubuntu 16.4 ,需在每次重启系统后执行如下操作(Ubuntu 18.4/20.4 不需要):
修改 /etc/resolv.conf 文件:
将其中 “nameserver 127.0.x.x” 改为: “nameserver 114.114.114.114”
使用非root用户登录,配置其具有操作docker的权限:
$ sudo usermod -aG docker $USER
$ newgrp docker
安装kubectl:
$ curl -LO “https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl”
$ sudo install kubectl /usr/local/bin/kubectl
配置HostPath Volume持久化:
$ sudo sysctl fs.protected_regular=0
$ sudo mkdir -p /var/tmp/hostpath-provisioner /tmp/hostpath-provisioner
$ sudo mount --bind /var/tmp/hostpath-provisioner /tmp/hostpath-provisioner
$ echo '/var/tmp/hostpath-provisioner /tmp/hostpath-provisioner none defaults,bind 0 0' |sudo tee -a /etc/fstab
拉取minikube依赖的镜像:
$ docker pull registry.aliyuncs.com/google_containers/storage-provisioner:v5
$ docker tag registry.aliyuncs.com/google_containers/storage-provisioner:v5 registry.aliyuncs.com/google_containers/k8s-minikube/storage-provisioner:v5
安装minikube:
$ curl -LO https://storage.googleapis.com/minikube/releases/v1.25.2/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
启动minikube:
如果以前启动过其他版本的minikube,需要先清除相关痕迹:
$ minikube delete --all
$ minikube delete
$ sudo rm -rf .kube/
$ sudo rm -rf .minikube/
$ sudo rm -rf /etc/kubernetes/
$ sudo rm /tmp/juju*
$ sudo rm /tmp/minikube*
$ sudo rm -rf /var/lib/minikube/
然后执行如下命令其中minikube:
$ sudo -E minikube start --driver=none --image-mirror-country=cn --image-repository=registry.aliyuncs.com/google_containers --insecure-registry "10.100.1.2" --install-addons false --extra-config=kubelet.cgroup-driver=systemd
注意,上述 --insecure-registry 参数值需要替换成本机网卡的IP地址或地址段,例如192.168.1.x或192.168.1.0/24,请根据实际情况修改。
启动过程中如果出现如下提示:
Exiting due to INET_DOWNLOAD_TIMEOUT: updating control plane: downloading binaries: downloading kubeadm: download failed: https://storage.googleapis.com
可在 /etc/hosts 中加入如下一行试试:
172.217.160.112 storage.googleapis.com
等待显示:Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default,表示集群启动完毕。然后执行:
$ sudo chown -R $USER $HOME/.kube $HOME/.minikube
如果需要在k8s中使用GPU,可通过执行以下命令来配置gpushare(执行本步骤之前,请先参考本文档的“代码下载”小节下载CubeAI项目源码):
$ sh ~/cubenet/cubeai_deploy/minikube/gpushare/deploy_gpushare.sh
配置metrics-server(可选):
$ kubectl apply -f ~/cubenet/cubeai_deploy/minikube/plugin_metrics
$ kubectl -nkube-system patch deploy metrics-server --patch '{"spec":{"template":{"spec":{"containers":[{"name":"metrics-server","args":["--cert-dir=/tmp","--secure-port=4443","--kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP","--kubelet-use-node-status-port","--metric-resolution=15s","--kubelet-insecure-tls"]}]}}}}'
配置dashboard:
$ minikube addons enable dashboard --images="Dashboard=dashboard:v2.5.1,MetricsScraper=metrics-scraper:v1.0.7"
配置远程连接权限,以使AI能力开放平台可远程连接此集群:
$ kubectl -nkube-system create sa remote-admin
$ kubectl create clusterrolebinding remote-admin --clusterrole=cluster-admin --serviceaccount=kube-system:remote-admin
启动dashboard界面:
$ minikube dashboard
等待显示Opening http://127.0.0.1:3xxxx/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...,命令会自动调用浏览器打开dashboard。
如果未自动打开浏览器,请将上述URL复制到浏览器打开。
停止minkube:
$ minikube stop
重启minikube集群:
$ sudo -E minikube start
$ sudo chown -R $USER $HOME/.kube $HOME/.minikube
彻底删除minkube集群:
$ minikube delete --all
在当前用户主目录下新建 cubenet 子目录:
$ cd
$ mkdir cubenet
将CubePy微服务框架所有基础组件源代码及CubeAI平台所有应用微服务源代码下载至当前用户主目录的cubenet子目录之下:
$ cd ~/cubenet
$ git clone https://openi.pcl.ac.cn/cubepy/cubepy.git
$ git clone https://openi.pcl.ac.cn/cubepy/cubepy_uaa.git
$ git clone https://openi.pcl.ac.cn/cubepy/cubepy_gateway.git
$ git clone https://openi.pcl.ac.cn/cubepy/cubepy_portal.git
$ git clone https://openi.pcl.ac.cn/cubeai/cubeai_deploy.git
$ git clone https://openi.pcl.ac.cn/cubeai/cubeai_ppersonal.git
$ git clone https://openi.pcl.ac.cn/cubeai/cubeai_pmodelhub.git
$ git clone https://openi.pcl.ac.cn/cubeai/cubeai_popen.git
$ git clone https://openi.pcl.ac.cn/cubeai/cubeai_umm.git
$ git clone https://openi.pcl.ac.cn/cubeai/cubeai_umu.git
$ git clone https://openi.pcl.ac.cn/cubeai/cubeai_umd.git
$ git clone https://openi.pcl.ac.cn/cubeai/cubeai_ability.git
修改统一配置中心配置参数
第一次从git仓库下载cubeai_deploy项目代码后,需要分别修改其子目录下dev/central-server-config/application.yml、prod/central-server-config/application.yml、minikube/cubeai-configmap.yml和k8s/cubeai-configmap.yml几个文件内容,将相关配置项改为与自己系统中的配置相一致。
修改kubernetes相关的配置项,请参照本文档“开发环境准备”章节下的“K8S测试集群”小节。
拉起所有依赖dockers:
打开一个terminal窗口,运行:
$ cd ~/cubenet/cubeai_deploy/dev
$ docker-compose up
第一次运行时,需要在等待nexus服务启动完成后,执行Nexus配置脚本:
sh nexus_configure_dev.sh
运行基础组件微服务
在集成开发环境(例如Pycharm)中分别打开并运行uaa、gateway和portal三个基础组件微服务工程,参见各工程目录下的README文件。
运行CubeAI应用微服务
在集成开发环境(例如Pycharm)中分别打开并运行各CubeAI应用微服务工程:umm, umu, umd, ability, ppersonal, pmodelhub, popen,参见各工程目录下的README文件。
修改应用名称
- 应用名称: CubeAI智立方
- URL: /
- 主题1: portal
- 应用简介: AI算能服务平台
- 头像: <CubeAI智立方logo>
创建用于CubeAI平台操作的新用户和角色
添加用于访问CubeAI各子平台的应用链接
进入“系统管理|应用管理”页面,创建若干新应用:
- 应用名称: AI模型共享
- URL: /ms/pmodelhub/#/market
- 主题1: 平台导航
- 主题2: homepage
- 所需角色:
- 应用名称: AI能力开放
- URL: /ms/popen/#/market
- 主题1: 平台导航
- 主题2: homepage
- 所需角色:
- 应用名称: AI应用示范
- URL: /ms/popen/#/demo
- 主题1: 平台导航
- 主题2: homepage
- 所需角色:
- 应用名称: 个人中心
- URL: /ms/ppersonal/#/
- 主题1: 平台导航
- 主题2: homepage
- 所需角色: ROLE_USER
- 应用名称: 系统管理
- URL: /admin
- 主题1: 平台导航
- 主题2: homepage
- 所需角色: ROLE_ADMIN
刷新页面,试用CubeAI平台各功能。
CubeAI智立方平台既可以使用docker-compose在单机上部署,也可以在基于k8s/istio的云原生环境中进行部署。
docker-compose部署
参见 prod/README 。
minikube部署
参见 minikube/README 。
k8s部署
参见 k8s/README 。
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》