You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.
huolongshe fdeb70744c 调整Volume Claims至独立的配置文件,便于独立删除和重新部署微服务。 2 months ago
dev 调整Volume Claims至独立的配置文件,便于独立删除和重新部署微服务。 2 months ago
docs add: CubeAI模型开发及发布指南 3 months ago
k8s init commit 9 months ago
minikube 调整Volume Claims至独立的配置文件,便于独立删除和重新部署微服务。 2 months ago
prod 调整Volume Claims至独立的配置文件,便于独立删除和重新部署微服务。 2 months ago
.gitignore init commit 9 months ago
LICENSE init commit 9 months ago
README.md 修改minikube部署方式,支持GPU. 2 months ago
build-dockers.sh update REAMDE 4 months ago

README.md

CubeAI智立方 AI算能服务平台

CubeAI智立方是集AI模型自动化服务封装、发布、共享、部署和能力开放等功能于一体的开源AI算能服务平台,其核心作用在于打通AI模型开发至实际生产应用之间的壁垒,加速AI创新和应用进程,促进AI应用从设计、开发直到部署、运营整个生命周期的自动化快速迭代和演进。

系统架构

微服务框架及基础组件

CubeAI平台基于自主研发的 CubePy微服务框架 进行开发,支持在主流容器化云原生平台上部署运行。

CubePy微服务框架 是一套基于 ServiceBoot微服务引擎 开发的云原生微服务应用基础开发平台和代码脚手架工具,目前提供如下微服务控制基础组件:

  • 服务注册与发现中心——Consul

    在CubePy微服务框架中使用第三方组件Consul来充当服务注册/发现中心,同时还兼做统一数据配置中心。

  • 内容服务器——Nexus

    在CubePy微服务框架中使用第三方组件Nexus来充当内容服务器,为整个微服务应用系统提供统一的文件存储、制品仓库等服务功能。

  • 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等语言开发。

CubeAI平台应用微服务

除了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语言开发。

AI模型服务化引擎

CubeAI平台的核心技术之一是AI模型服务化引擎 —— iBoot

为了使用CubeAI平台,AI模型开发者需要先使用iBoot对AI模型推理算法进行简单的封装,使之成为可在互联网上运行的web服务,然后再将其发布至CubeAI平台。在模型发布的过程中,CubeAI会自动将模型进行容器化封装。容器化的AI模型经部署之后,将使用内嵌的iBoot引擎对外提供web服务(通过RESTful API接口或web图形界面)。

CubeAI模型样例

CubeAI模型样例 是使用AI模型服务化引擎—— iBoot ——开发的AI模型推理程序样例集,可作为编写CubeAI模型推理程序的模板来使用。

开发环境准备

参见CubePy微服务框架相关文档(https://git.openi.org.cn/OpenI/cubepy)完成开发环境初始配置。

Docker环境配置

  1. 开启本机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
        
     可使用以下命令完成:
         $ sudo cat > /etc/systemd/system/docker.service.d/override.conf <<EOF
         [Service]
         ExecStart=
         ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
         EOF
    
  2. 如果本机配有NVIDIA显卡:

    1. 安装NVIDIA显卡驱动。

    2. 安装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
      
  3. 为本机docker服务增加NVIDIA容器运行时配置和非安全镜像仓库配置(便于从本机及Minikube集群内部向在本地部署的非安全镜像仓库推送docker镜像):

     在 /etc/docker/daemon.json(如果没有则创建)中添加如下内容(注意替换本机实际IP地址或地址段):
         {
             "insecure-registries": ["10.100.0.0/24"],  # 用本机实际网卡IP地址或地址段来代替
             "exec-opts": ["native.cgroupdriver=systemd"],
             "default-runtime": "nvidia",
             "runtimes": {
                 "nvidia": {
                     "path": "nvidia-container-runtime",
                     "runtimeArgs": []
                 }
             }
         }
    
     可使用以下命令完成(注意替换本机实际IP地址或地址段):
         $ sudo cat > /etc/docker/daemon.json <<EOF
         {
             "insecure-registries": ["10.100.0.0/24"],  # 用本机实际网卡IP地址或地址段来代替
             "exec-opts": ["native.cgroupdriver=systemd"],
             "default-runtime": "nvidia",
             "runtimes": {
                 "nvidia": {
                     "path": "nvidia-container-runtime",
                     "runtimeArgs": []
                 }
             }
         }
    
  4. 上述命令执行完毕后,重启docker服务:

     $ sudo systemctl daemon-reload
     $ sudo systemctl restart docker
    

安装部署Minikube集群

建议使用minikube来搭建单节点k8s集群,供本地开发环境使用(部署CubeAI能力开放平台,以及将CubeAI自身微服务部署至k8s集群)。

Minikube官方文档参见:https://minikube.sigs.k8s.io/docs/

最新版minikube v1.25.2集群搭建步骤如下:

  1. 修改 /etc/resolv.conf 文件,将其中 “nameserver 127.0.x.x” 改为: “nameserver 114.114.114.114”。

  2. 使用非root用户登录,配置其具有操作docker的权限:

     $ sudo usermod -aG docker $USER
     $ newgrp docker
    
  3. 安装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
    
  4. 配置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
    
  5. 拉取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
    
  6. 安装minikube:

     $ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
     $ sudo install minikube-linux-amd64 /usr/local/bin/minikube
    
  7. 启动minikube:

     $ sudo -E minikube start --driver=none --image-mirror-country=cn --image-repository=registry.aliyuncs.com/google_containers --insecure-registry "10.100.0.0/24" --install-addons false --extra-config=kubelet.cgroup-driver=systemd
    

    注意,上述 --insecure-registry 参数值需要替换成本机网卡的IP地址或地址段,例如192.168.1.x或192.168.1.0/24,请根据实际情况修改。

    等待显示:Done! kubectl is now configured to use “minikube” cluster and “default” namespace by default,表示集群启动完毕。然后执行:

     $ sudo chown -R $USER $HOME/.kube $HOME/.minikube
    
  8. 配置metrics-server、dashboard和nvidia-device-plugin(执行本步骤之前,请先参考本文档的“代码下载”小节下载CubeAI项目源码)。

     $ kubectl apply -f ~/cubenet/cubeai/minikube/plugin    (如果目录名不是cubeai,请修改)
     $ 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"]}]}}}}'
     $ minikube addons enable dashboard --images="Dashboard=dashboard:v2.5.1,MetricsScraper=metrics-scraper:v1.0.7"
    
  9. AI能力开放平台需要远程连接此集群,必须配置远程连接权限:

     $ kubectl -nkube-system create sa remote-admin
     $ kubectl create clusterrolebinding remote-admin --clusterrole=cluster-admin --serviceaccount=kube-system:remote-admin
    
  10. 启动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复制到浏览器打开。

  1. 停止minkube:

    $ minikube stop
    
  2. 重启minikube集群:

    $ sudo -E minikube start
    $ sudo chown -R $USER $HOME/.kube $HOME/.minikube
    
  3. 彻底删除minkube集群:

    $ minikube delete --all
    

开发

代码下载

  1. 在当前用户主目录下新建cubenet子目录:

     $ cd 
     $ mkdir cubenet
    
  2. 将CubePy微服务框架所有基础组件源代码及CubeAI平台所有应用微服务源代码下载至当前用户主目录的cubenet子目录之下:

     $ cd ~/cubenet
     $ git clone https://git.openi.org.cn/OpenI/cubepy.git
     $ git clone https://git.openi.org.cn/OpenI/cubepy_uaa.git
     $ git clone https://git.openi.org.cn/OpenI/cubepy_gateway.git
     $ git clone https://git.openi.org.cn/OpenI/cubepy_portal.git
     $ git clone https://git.openi.org.cn/OpenI/cubeai.git
     $ git clone https://git.openi.org.cn/OpenI/cubeai_ppersonal.git
     $ git clone https://git.openi.org.cn/OpenI/cubeai_pmodelhub.git
     $ git clone https://git.openi.org.cn/OpenI/cubeai_popen.git
     $ git clone https://git.openi.org.cn/OpenI/cubeai_umm.git
     $ git clone https://git.openi.org.cn/OpenI/cubeai_umu.git
     $ git clone https://git.openi.org.cn/OpenI/cubeai_umd.git
     $ git clone https://git.openi.org.cn/OpenI/cubeai_ability.git
    
  3. 修改统一配置中心配置参数

    第一次从git仓库下载cubeai项目代码后,需要分别修改其子目录下dev/central-server-config/application.yml、prod/central-server-config/application.yml、minikube/cubeai-configmap.yml和k8s/cubeai-configmap.yml几个文件内容,将相关配置项改为与自己系统中的配置相一致。

    修改kubernetes相关的配置项,请参照本文档“开发环境准备”章节下的“K8S测试集群”小节。

运行/试用/二次开发

  1. 拉起所有依赖dockers:

    打开一个terminal窗口,运行:

     $ cd ~/cubenet/cubeai/dev
     $ docker-compose up
    
  2. 第一次运行时,需要在等待nexus服务启动完成后,执行Nexus配置脚本:

     sh nexus_configure_dev.sh
    
  3. 运行基础组件微服务

    在集成开发环境(例如Pycharm)中分别打开并运行uaa、gateway和portal三个基础组件微服务工程,参见各工程目录下的README文件。

  4. 运行CubeAI应用微服务

    在集成开发环境(例如Pycharm)中分别打开并运行各CubeAI应用微服务工程:umm, umu, umd, ability, ppersonal, pmodelhub, popen,参见各工程目录下的README文件。

  5. 修改应用名称

    1. 以admin帐号登录,或者具有ROLE_ADMIN角色的其他用户帐号登录。

    2. 进入“系统管理|应用管理”页面,创建一个新应用:

      • 应用名称: CubeAI智立方
      • URL: /
      • 主题1: potal
      • 应用简介: AI算能服务平台
      • 头像: <CubeAI智立方logo>
  6. 创建用于CubeAI平台操作的新用户和角色

    1. 以admin帐号登录,或者具有ROLE_ADMIN角色的其他用户帐号登录。
    2. 进入“系统管理|角色管理”页面,添加几个新角色: ROLE_MANAGER, ROLE_OPERATOR, ROLE_APPLICATION, ROLE_CONTENT。
    3. 进入“系统管理|用户管理”页面,新建一个用户,并为该用户添加角色: ROLE_MANAGER, ROLE_OPERATOR, ROLE_APPLICATION, ROLE_CONTENT。
    4. 退出admin用户,以新创建的用户身份登录。
  7. 添加用于访问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
    
  8. 添加模型打包指南文档

    进入“系统管理|文稿管理”页面,新建文稿:

     ---
         - 标题: 模型打包指南            
         - 主题1: model-packaging
         - 正文: 模型打包指南文档
    
  9. 刷新页面,试用CubeAI平台各功能。

部署

CubeAI智立方平台既可以使用docker-compose在单机上部署,也可以在基于k8s/istio的云原生环境中进行部署。

  • docker-compose部署

    参见~/cubenet/cubeai/prod目录下README文件。

  • minikube部署

    参见~/cubenet/cubeai/minikube目录下README文件。

  • k8s部署

    参见~/cubenet/cubeai/k8s目录下README文件。

简介

CubeAI智立方是中国联通研究院自主研发的集AI模型自动化服务封装、发布、共享、部署和能力开放等功能于一体的开源AI算能服务平台,其核心作用在于打通AI模型开发至实际生产应用之间的壁垒,加速AI创新和应用进程,促进AI应用从设计、开发直到部署、运营整个生命周期的自动化快速迭代和演进。

Shell Python

贡献者 (1)