趁热记录下,给未来的自己

0 – 前言

在人工智能领域的小伙伴,应该听说过 Gradio 吧,在进入本文主题之前,先来了解下 gradio 是什么,官网的介绍是:

Gradio is the fastes后端viat way to demo your machine learning model with a friendly web interface so that anyone can use it, anywhere!

简而言之,Gradio App 就是给 AI 算法github永久回家地址程师训练的模型赋予分享给大众的能力。

从技术侧拆分,由三个部分组成:

前端页面 + 后端接口 + AI算法模型推理

Gradio 做了一件事情,就是将这三个部分后端语言封装到一个 python 接口里,用户通过实现其封装的接口,将自己训练的算法模型以 web 服务的形式展现给大众使用。

1 – 一个简单的 gradio 程序

下面这个demo程序来自前端电视剧于 gradio 官网:Gradio

# app.py
import gradio as gr
def sketch_recognition(img):
  # Implement sketch recognition model here...
  # Return labels and confidences as dictionary
iface = gr.Interface(fn=sketch_recognition, inputs="sketchpad", outputs="label").launch(server_name="0.0.0.0", server_port=7000)

Gradio app 基于 Kubernetes 部署实战

可以看到 gr.Interface().l算法导论anuch() 就是将前端页面github打不开,后端服务以及 AI 算法模型三者结合到approach一个接口前端是什么工作里,极大的降低了算法模型落地的难度,使得 AI 算法工程前端是什么工作师在不具备工程能力的情况下,也能拿快速部署前后端并提供服务。

2 – 通过Kubernetes部署

Gradio app 可以直接在物理机上通过 python 运行,不过为了更易于移植以及工程化管理,我们需要把gradio app 打包成 do前端电视剧ck后端开发工程师er 镜像,然后交由 kubernetes 进行管理。

首先是 打包成 docke算法设计与分析r 镜像:

Dockerfile

ARG PYTORCH="1.6.0"
ARG CUDA="10.1"
ARG CUDNN="7"
FROM pytorch/pytorch:$ {PYTORCH} -cuda$ {CUDA} -cudnn$ {CUDNN} -devel
MAINTAINER arkMon
ENV TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0+PTX"
ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
ENV CMAKE_PREFIX_PATH="(dirname(which conda))/../"
ENV TZ=Asia/Shanghai
ENV DEBIAN_FRONTEND=noninteractive
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ >/etc/timezone
RUN apt-get update && apt-get install -y git && apt-get install -y libgl1-mesa-glx && apt-get -y install libglib2.0-dev
RUN pip install cmake && pip install dlib && pip install wget
RUN pip install gradio
RUN export PYTHONUNBUFFERED=1 # 一定要加,不加可能出现启动失败的问题,原因见我另一篇文章: https:///post/7052286381724270600
ADD src ./src # 假设 app.py 等需要的文件在 src 目录下
WORKDIR src
ENTRYPOINT [ "python", "app.py" ]

打包

docker build . -t gradio-demo:v0.0.1

接着,配置 kubernetes yaml 文件: gradio-demo.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gradio-demo
  namespace: openmmlab
  labels:
    k8s-app: inference-engine
spec:
  selector:
    matchLabels:
      name: gradio-demo
  replicas: 1
  template:
    metadata:
      labels:
        name: gradio-demo
    spec:
      restartPolicy: Always
      nodeSelector:
        workfor: inference
      hostNetwork: true
      terminationGracePeriodSeconds: 30
      containers:
        - name: gradio-demo
          image: gradio-demo:v0.0.1
          env:
            - name: PYTHONUNBUFFERED
              value: "1"
          resources:
            limits:
              memory: 20000Mi
            requests:
              memory: 2000Mi
---
apiVersion: v1
kind: Service
metadata:
  name: gradio-demo
  namespace: openmmlab
spec:
  type: ClusterIP
  selector:
    name: gradio-demo
  ports:
    - port: 7600
      targetPort: 7600
      protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^(/gradio-demo)$ $1/ redirect; # 一定要加这一句重定向,否则无法通过subpath的方式访问
  name: gradio-demo
  namespace: openmmlab
spec:
  rules:
    - host: app.xxx.com
      http:
        paths:
          - backend:
              service:
                name: gradio-demo
                port:
                  number: 7600
            pathType: Prefix
            path: /gradio-demo(/|$)(.*)

启动

kubectl apply -f gradio-demo.yaml

最后,启动成功后,通过域名 app.xxx.com/gradio-demo 直接访问即可。

~~~~~~~~~~github开放私库~~ 广告时间 ~~~~~~~~~~~~

下面是我们团队算法同学利前端开发用 gradio 写的 MMGEN-Facestylor,换头像神器,

欢迎使用: app.openmmlab.com/fac后端和前端有什么区别eappearancestylor/

算法已开源,欢迎star:github.com/open-mmlab/…

Gradio app 基于 Kubernetes 部署实战

以上。