趁热记录下,给未来的自己
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永久回家地址程师训练的模型赋予分享给大众的能力。
从技术侧拆分,由三个部分组成:
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)
可以看到 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/…
以上。