Skip to content

cyberflying/deploy-cognitive-service-to-aks-on-China-azure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

部署认知服务的容器到China Azure上的AKS群集


微软云Azure的认知服务包含五大类几十个具体的人工智能服务,可以帮助您创建相应的应用程序服务于各种场景,可以参考Azure认知服务的官方文档

这些认知服务除了提供云端服务的能力,很多服务也同时推出了容器版本,用户可以直接将认知服务的能力以容器的形式部署在本地基础架构、边缘服务器中。

本地部署认知服务时,容器会每15分钟访问云端的计费接口,只统计计费相关的信息。因此,本地部署时,也需要在云端创建相应的服务,以便于获得容器正常运行所需要的Key和连接的端点(endpoint)。

当然也可以将这些容器部署在Kubernetes群集中,本文则已Azure托管的Kubernetes服务AKS进行部署认知服务的容器。

前提条件

  • 准备China Azure账号。可以申请免费试用
  • 访问认知服务容器
    目前有些认知服务的容器是公开的,比如LUIS自然语言理解、关键词提前、语言检测以及观点分析等等,有些还处于预览状态,需要申请才能获得。申请也非常简单,不需要付费,直接网上填写申请表格即可。

环境准备

建议安装最新版本,本实例要求运行 Azure CLI 2.0.64 版或更高版本。Azure CLI既可以访问China Azure,也可以访问全球Azure。
访问China Azure需要设置:

az cloud set -n AzureChinaCloud

访问全球Azure需要设置:

az cloud set -n AzureCloud
  • 安装kubectl
az aks install-cli

创建Azure认知服务

创建认知服务中具体的服务,比如人脸识别,自然语言理解,文本转语音等等,这个过程与创建其他Azure服务一样,登录Azure Portal或者使用Azure CLI进行服务创建都非常简单,这儿不具体说明了。本文以创建语音服务为例,贴出部分截图供参考。 创建的语音服务,记录下相应的Key和Endpoint信息,在部署容器时需要使用。

创建AKS群集

可以参考使用Azure门户部署AKS群集,或者使用Azure CLI创建AKS群集
下面是具体步骤的截图,供参考:

  • 选择Kubernetes Services进行创建
  • 填写群集名称、区域等基本信息
  • 认证选项保持默认,启用RBAC
  • 网络设置可以保持默认Basic。如果需要使用Virtual Nodes则必须使用Advanced网络选项
  • 其他选项保持默认。创建成功后可查看overview页面
  • 在insights页面可以看到相关组件的监控状态信息
  • 创建的AKS集群,需要基础架构相关资源的支撑。比如,VM,存储,网络等等组件,Azure会在AKS cluster创建时将这些底层资源单独创建在另外一个资源组中,这个资源组的名称规则是MC_<aks resource group name>_<aks name>_<aks location>
  • 创建AKS完成后,在客户端建立和AKS cluster的连接

获得认知服务的容器

可以从下面两篇文章中申请和获得认知服务众多的AI能力的容器

Azure认知服务中的容器

具体容器的Registry

以文本转语音(TTS)为例,可以看到默认的容器路径是containerpreview.azurecr.io/microsoft/cognitive-services-text-to-speech

tag是latest的具有 en-US 区域设置和 en-US-JessaRUS 语音的容器映像。

如果要使用中文,可以使用tag为1.3.0-amd64-zh-cn-kangkang-apollo-preview,即完整的容器引用为containerpreview.azurecr.io/microsoft/cognitive-services-text-to-speech:1.3.0-amd64-zh-cn-kangkang-apollo-preview

可以看到TTS的容器目前是需要申请才能获得的,申请方式前文已提到。而对于registry是mcr.microsoft.com/azure-cognitive-services的容器,则已经都是公开的了,大家可以自行下载测试。

部署TTS容器到AKS中

创建AKS用于拉取容器的secret

填写申请表格后,将会收到用于拉取容器的用户名和密码,在客户端使用下面的命令创建secret:

kubectl create secret docker-registry <secret-name> --docker-server=containerpreview.azurecr.io --docker-username=<username> --docker-password=<pwd>

准备部署使用的YAML文件

使用Azure上创建的speech服务的Key和Endpoint替换Yaml文件相应的位置:

apiVersion: v1
kind: Service
metadata:
  name: tts
  labels:
    run: tts
spec:
  selector:
    app: tts
  type: LoadBalancer
  ports:
  - name: tts
    port: 5000
    targetPort: 5000
    protocol: TCP
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: tts
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: tts
    spec:
      containers:
      - name: tts
        image: containerpreview.azurecr.io/microsoft/cognitive-services-text-to-speech:1.3.0-amd64-zh-cn-kangkang-apollo-preview
        ports:
        - name: public-port
          containerPort: 5000
        resources:
          requests:
            memory: 4Gi
            cpu: 1
          limits:
            memory: 6Gi
            cpu: 2
        livenessProbe:
          httpGet:
            path: /status
            port: public-port
          initialDelaySeconds: 30
          timeoutSeconds: 1
          periodSeconds: 10
        args:
            - "eula=accept"
            - "apikey=<api key>" # Add API Key here
            - "billing=https://chinaeast2.api.cognitive.azure.cn/sts/v1.0/issuetoken" # Add billing key here
      imagePullSecrets:
        - name: tts-docker-secret # Add credentials for container preview registry here
      automountServiceAccountToken: false

使用上一步骤中的Yaml文件进行部署

kubectl apply -f cs_tts.yml

部署过程中,可以使用 kubectl describe pod 看到AKS根据Yaml文件去拉取TTS的image:

成功部署后,可以使用kubectl get pod|service查看相应的pod和service:

测试TTS容器

查看service时可以看到LB的外部IP和端口,这个即是TTS对外提供服务的地址,可以直接访问查看状态: 查看具体的API:

可以参考TTS的repo使用各种语言的调用REST API或SDK进行调用。 下面是使用python的一个sample示例:

音频输出结果

Releases

No releases published

Packages

No packages published

Languages